]> diplodocus.org Git - nmh/blobdiff - sbr/utils.c
inc/test-eom-align: Fix MMDF-mbox `B' size calculation.
[nmh] / sbr / utils.c
index 205c859240ed690c1b1c09cdcf30977d220f1117..8debe1aaedb0f1f25be8bd5b96bd61f148bf7e32 100644 (file)
@@ -12,6 +12,7 @@
 #include "makedir.h"
 #include <fcntl.h>
 #include <limits.h>
+#include "read_line.h"
 
 extern char *mhdocdir;
 
@@ -35,7 +36,7 @@ void *mh_xmalloc(size_t size)
         size = 1; /* Some mallocs don't like 0. */
     p = malloc(size);
     if (!p)
-        adios(NULL, "malloc failed, size wanted: %lu", (unsigned long)size);
+        adios(NULL, "malloc failed, size wanted: %zu", size);
 
     return p;
 }
@@ -47,7 +48,7 @@ void *mh_xrealloc(void *ptr, size_t size)
 
     /* Copy POSIX behaviour, coping with non-POSIX systems. */
     if (size == 0) {
-        mh_xfree(ptr);
+        free(ptr);
         return mh_xmalloc(1); /* Get a unique pointer. */
     }
     if (!ptr)
@@ -55,7 +56,7 @@ void *mh_xrealloc(void *ptr, size_t size)
 
     new = realloc(ptr, size);
     if (!new)
-        adios(NULL, "realloc failed, size wanted: %lu", (unsigned long)size);
+        adios(NULL, "realloc failed, size wanted: %zu", size);
 
     return new;
 }
@@ -70,8 +71,7 @@ void *mh_xcalloc(size_t nelem, size_t elsize)
 
     p = calloc(nelem, elsize);
     if (!p)
-        adios(NULL, "calloc failed, size wanted: %lu * %lu",
-            (unsigned long)nelem, (unsigned long)elsize);
+        adios(NULL, "calloc failed, size wanted: %zu * %zu", nelem, elsize);
 
     return p;
 }
@@ -89,13 +89,6 @@ char *mh_xstrdup(const char *src)
     return dest;
 }
 
-/* Call free(3), if ptr isn't NULL. */
-void mh_xfree(void *ptr)
-{
-    if (ptr)
-        free(ptr); /* Some very old platforms can't cope with NULL. */
-}
-
 /*
  * Return the present working directory, if the current directory does not
  * exist, or is too long, make / the pwd.
@@ -533,24 +526,30 @@ nmh_version_changed (int older) {
 }
 
 
-/*
- * Scan for any 8-bit characters.  Return 1 if they exist.
- *
- * Scan up until the given endpoint (but not the actual endpoint itself).
- * If the endpoint is NULL, scan until a '\0' is reached.
- */
-
-int
-contains8bit(const char *start, const char *end)
+/* contains8bit returns true if any byte from start onwards fails
+ * isascii(3), i.e. is outside [0, 0x7f].  If start is NULL it returns
+ * false.  Bytes are examined until a NUL byte, or, if end is not NULL,
+ * whilst start is before end. */
+bool contains8bit(const char *start, const char *end)
 {
-    if (! start)
-       return 0;
+    const char *p;
+    char c;
 
-    while (*start != '\0' && (!end || (start < end)))
-       if (! isascii((unsigned char) *start++))
-           return 1;
+    if (!start)
+        return false;
 
-    return 0;
+    p = start;
+    if (end) {
+        while (p < end && (c = (*p++)))
+            if (!isascii((unsigned char)c))
+                return true;
+    } else {
+        while ((c = (*p++)))
+            if (!isascii((unsigned char)c))
+                return true;
+    }
+
+    return false;
 }