* Copyright © 2006 Pierre Habouzit
*/
-#include "macros.h"
-#include "str.h"
+#include "lib-lib.h"
#define XX 255
unsigned char const __m_strdigits[128] = {
haystack++;
}
}
+
+int ascii_strcasecmp(const char *a, const char *b)
+{
+ int i;
+
+ if (a == b)
+ return 0;
+ if (a == NULL && b)
+ return -1;
+ if (b == NULL && a)
+ return 1;
+
+ for (; *a || *b; a++, b++) {
+ if ((i = ascii_tolower(*a) - ascii_tolower(*b)))
+ return i;
+ }
+
+ return 0;
+}
+
+int ascii_strncasecmp (const char *a, const char *b, ssize_t n)
+{
+ int i, j;
+
+ if (a == b)
+ return 0;
+ if (a == NULL && b)
+ return -1;
+ if (b == NULL && a)
+ return 1;
+
+ for (j = 0; (*a || *b) && j < n; a++, b++, j++) {
+ if ((i = ascii_tolower(*a) - ascii_tolower(*b)))
+ return i;
+ }
+
+ return 0;
+}
+
+ssize_t m_snsubst(char *dst, ssize_t n, const char *fmt, const char *src)
+{
+ ssize_t pos = 0;
+ const char *p;
+
+ p = strchr(fmt, '%');
+ if (!p)
+ return snprintf(dst, n, "%s %s", fmt, src);
+
+ for (;;) {
+ if (p[1] == 's') {
+ pos += m_strncpy(dst + pos, n - pos, fmt, p - fmt);
+ pos += m_strcpy(dst + pos, n - pos, src);
+ fmt = p + 2;
+ } else {
+ pos += m_strncpy(dst + pos, n - pos, fmt, p + 1 - fmt);
+ fmt = p + 1;
+ if (p[1] == '%')
+ p++;
+ }
+
+ p = strchr(fmt, '%');
+ if (!p)
+ return pos + m_strcpy(dst + pos, n - pos, fmt);
+ }
+}