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 *safe_strdup (const char *s)
26 l = mutt_strlen (s) + 1;
27 p = (char *) safe_malloc (l);
32 char *safe_strcat (char *d, size_t l, const char *s)
39 l--; /* Space for the trailing '\0'. */
51 char *safe_strncat (char *d, size_t l, const char *s, size_t sl)
58 l--; /* Space for the trailing '\0'. */
62 for (; *s && l && sl; l--, sl--)
70 void mutt_str_replace (char **p, const char *s)
76 void mutt_str_adjust (char **p)
80 safe_realloc (p, mutt_strlen (*p) + 1);
83 /* convert all characters in the string to lowercase */
84 char *mutt_strlower (char *s)
89 *p = tolower ((unsigned char) *p);
96 /* NULL-pointer aware string comparison functions */
98 char *mutt_substrcpy (char *dest, const char *beg, const char *end,
104 if (len > destlen - 1)
106 memcpy (dest, beg, len);
111 char *mutt_substrdup (const char *begin, const char *end)
119 len = mutt_strlen (begin);
121 p = safe_malloc (len + 1);
122 memcpy (p, begin, len);
127 int mutt_strcmp (const char *a, const char *b)
129 return strcmp (NONULL (a), NONULL (b));
132 int mutt_strcasecmp (const char *a, const char *b)
134 return strcasecmp (NONULL (a), NONULL (b));
137 int mutt_strncmp (const char *a, const char *b, size_t l)
139 return strncmp (NONULL (a), NONULL (b), l);
142 int mutt_strncasecmp (const char *a, const char *b, size_t l)
144 return strncasecmp (NONULL (a), NONULL (b), l);
147 size_t mutt_strlen (const char *a)
149 return a ? strlen (a) : 0;
152 int mutt_strcoll (const char *a, const char *b)
154 return strcoll (NONULL (a), NONULL (b));
157 const char *mutt_stristr (const char *haystack, const char *needle)
166 while (*(p = haystack)) {
169 tolower ((unsigned char) *p) == tolower ((unsigned char) *q);
178 char *mutt_skip_whitespace (char *p)
184 void mutt_remove_trailing_ws (char *s)
188 for (p = s + mutt_strlen (s) - 1; p >= s && ISSPACE (*p); p--)