X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-lib%2Fstr.h;h=f9ef19f1c6382eb914da7e1ab46b01d4dde4c96d;hp=1beac83790c4aea914680f71bd10154f0cd62e9b;hb=HEAD;hpb=15d63145b9f11a1fa58c74abbeab7533ea2e5d21 diff --git a/lib-lib/str.h b/lib-lib/str.h index 1beac83..f9ef19f 100644 --- a/lib-lib/str.h +++ b/lib-lib/str.h @@ -94,6 +94,16 @@ extern char const __m_b36chars_upper[36]; /* conversions */ /****************************************************************************/ +/** \brief Converts an octal digit into an int. + * \param[in] c the octal char + * \return + * - 0–7 if c is a valid octal digit, + * - -1 on error. + */ +static inline int octval(int c) { + return !(c & ~127) && __m_strdigits[c] < 7 ? __m_strdigits[c] : -1; +} + /** \brief Converts an hexadecimal digit into an int. * \param[in] c the hexadecimal char * \return @@ -199,6 +209,50 @@ ssize_t m_strwidth(const char *s); /* comparisons */ /****************************************************************************/ +/** \brief Tells whether s begins with p. + * + * \param[in] s the input string + * \param[in] p the prefix + * \param[out] pp position in s + * + * \return 1 if a match is found, 0 otherwise. + */ +static inline int m_strstart(const char *s, const char *p, const char **pp) +{ + if (!s) + return 0; + + while (*p) { + if (ascii_tolower(*s++) != ascii_tolower(*p++)) + return 0; + } + if (pp) + *pp = s; + return 1; +} + +/** \brief Tells whether s begins with p, case insensitive. + * + * \param[in] s the input string + * \param[in] p the prefix + * \param[out] pp position in s + * + * \return 1 if a match is found, 0 otherwise. + */ +static inline int m_strcasestart(const char *s, const char *p, const char **pp) +{ + if (!s) + return 0; + + while (*p) { + if (*s++ != *p++) + return 0; + } + if (pp) + *pp = s; + return 1; +} + /** \brief \c NULL resistant strcmp. * \param[in] a the first string. * \param[in] b the second string. @@ -368,8 +422,7 @@ typedef enum { M_FORMAT_MAKEPRINT = (1 << 2), /* make sure that all chars are printable */ M_FORMAT_OPTIONAL = (1 << 3), M_FORMAT_STAT_FILE = (1 << 4), /* used by mutt_attach_fmt */ - M_FORMAT_ARROWCURSOR = (1 << 5), /* reserve space for arrow_cursor */ - M_FORMAT_INDEX = (1 << 6) /* this is a main index entry */ + M_FORMAT_INDEX = (1 << 6), /* this is a main index entry */ } format_flag; typedef const char *