#include "m_mktemp.h"
#include "makedir.h"
#include <fcntl.h>
+#include <limits.h>
extern char *mhdocdir;
size = 1; /* Some mallocs don't like 0. */
p = malloc(size);
if (!p)
- adios(NULL, "malloc failed, size wanted: %zu", size);
+ adios(NULL, "malloc failed, size wanted: %lu", (unsigned long)size);
return p;
}
new = realloc(ptr, size);
if (!new)
- adios(NULL, "realloc failed, size wanted: %zu", size);
+ adios(NULL, "realloc failed, size wanted: %lu", (unsigned long)size);
return new;
}
p = calloc(nelem, elsize);
if (!p)
- adios(NULL, "calloc failed, size wanted: %zu * %zu", nelem, elsize);
+ adios(NULL, "calloc failed, size wanted: %lu * %lu",
+ (unsigned long)nelem, (unsigned long)elsize);
return p;
}
return state == NOTOK ? NOTOK : OK;
}
+
+
+/*
+ * Convert an int to a char string.
+ */
+char *
+m_str(int value) {
+ return m_strn(value, 0);
+}
+
+
+/*
+ * Convert an int to a char string, of limited width if > 0.
+ */
+#define STR(s) #s
+/* SIZE(n) includes NUL. n must just be digits, not an equation. */
+#define SIZE(n) (sizeof STR(n))
+
+char *
+m_strn(int value, unsigned int width) {
+ /* Need to include space for negative sign. But don't use INT_MIN
+ because it could be a macro that would fool SIZE(n). */
+ static char buffer[SIZE(-INT_MAX)];
+ const int num_chars = snprintf(buffer, sizeof buffer, "%d", value);
+
+ return num_chars > 0 && (width == 0 || (unsigned int) num_chars <= width)
+ ? buffer
+ : "?";
+}