+static inline int m_strcasecmp(const char *a, const char *b) {
+ return strcasecmp(NONULL(a), NONULL(b));
+}
+
+static inline int m_strncmp(const char *a, const char *b, ssize_t n) {
+ return strncmp (NONULL(a), NONULL(b), n);
+}
+
+static inline int m_strncasecmp(const char *a, const char *b, ssize_t n) {
+ return strncasecmp(NONULL(a), NONULL(b), n);
+}
+
+/****************************************************************************/
+/* making copies */
+/****************************************************************************/
+
+static inline char *m_strdup(const char *s) {
+ ssize_t len = m_strlen(s);
+ return len ? p_dup(s, len + 1) : NULL;
+}
+
+static inline char *m_substrdup(const char *s, const char *end) {
+ return p_dupstr(s, end ? end - s : m_strlen(s));
+}
+
+static inline char *m_strreplace(char **p, const char *s) {
+ p_delete(p);
+ return (*p = m_strdup(s));
+}