2 * Copyright notice from original mutt:
3 * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
4 * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
6 * This file is part of mutt-ng, see http://www.muttng.org/.
7 * It's licensed under the GNU General Public License,
8 * please see the file GPL in the top level source directory.
19 char *str_dup (const char *s)
24 if (!s || !*s) return NULL;
26 p = (char *) mem_malloc (l);
31 char *str_cat (char *d, size_t l, const char *s)
38 l--; /* Space for the trailing '\0'. */
50 char *str_ncat (char *d, size_t l, const char *s, size_t sl)
57 l--; /* Space for the trailing '\0'. */
61 for (; *s && l && sl; l--, sl--)
69 int str_cmp (const char *a, const char *b)
71 return strcmp (NONULL (a), NONULL (b));
74 int str_casecmp (const char *a, const char *b)
76 return strcasecmp (NONULL (a), NONULL (b));
79 int str_ncmp (const char *a, const char *b, size_t l)
81 return strncmp (NONULL (a), NONULL (b), l);
84 int str_ncasecmp (const char *a, const char *b, size_t l)
86 return strncasecmp (NONULL (a), NONULL (b), l);
89 size_t str_len (const char *a)
91 return a ? strlen (a) : 0;
94 int str_coll (const char *a, const char *b)
96 return strcoll (NONULL (a), NONULL (b));
99 void str_replace (char **p, const char *s)
105 void str_adjust (char **p)
109 mem_realloc (p, str_len (*p) + 1);
112 /* convert all characters in the string to lowercase */
113 char *str_tolower (char *s)
118 *p = tolower ((unsigned char) *p);
125 /* NULL-pointer aware string comparison functions */
127 char *str_substrcpy (char *dest, const char *beg, const char *end,
133 if (len > destlen - 1)
135 memcpy (dest, beg, len);
140 char *str_substrdup (const char *begin, const char *end)
148 len = str_len (begin);
150 p = mem_malloc (len + 1);
151 memcpy (p, begin, len);
156 const char *str_isstr (const char *haystack, const char *needle)
165 while (*(p = haystack)) {
168 tolower ((unsigned char) *p) == tolower ((unsigned char) *q);
177 int str_eq (const char* s1, const char* s2) {
178 int l = str_len (s1);
180 if (l != str_len (s2))
182 return (str_ncmp (s1, s2, l) == 0);
185 char* str_skip_initws (char* s) {
190 void str_skip_trailws (char *s) {
193 for (p = s + str_len (s) - 1; p >= s && ISSPACE (*p); p--)