Define strlcpy on platforms that do not have it
authorkwolekr <kwolekr@minetest.net>
Sun, 9 Feb 2014 18:12:28 +0000 (13:12 -0500)
committerkwolekr <kwolekr@minetest.net>
Sun, 9 Feb 2014 18:57:29 +0000 (13:57 -0500)
src/porting.h
src/script/common/c_content.cpp

index 0f2007fa795b21ecd7836e5c433a7210c057ec39..c03ae40aa4ea7be66ea9403fce2d29ab3213949a 100644 (file)
@@ -88,11 +88,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
        #define strtoull(x, y, z) _strtoui64(x, y, z)
        #define strcasecmp(x, y) stricmp(x, y)
        #define strncasecmp(x, y, n) strnicmp(x, y, n)
-
-       // We can't simply alias strlcpy() to MSVC's strcpy_s(), since strcpy_s
-       // by default raises an assertion error and aborts the program if the
-       // buffer is too small.  So we need to define our own.
-       #define strlcpy(x, y, n) mystrlcpy(x, y, n)
 #else
        #define ALIGNOF(x) __alignof__(x)
 #endif
@@ -101,6 +96,24 @@ with this program; if not, write to the Free Software Foundation, Inc.,
        #define strtok_r(x, y, z) mystrtok_r(x, y, z)
 #endif
 
+// strlcpy is missing from glibc.  thanks a lot, drepper.
+// strlcpy is also missing from AIX and HP-UX because they aim to be weird.
+// We can't simply alias strlcpy to MSVC's strcpy_s, since strcpy_s by
+// default raises an assertion error and aborts the program if the buffer is
+// too small.
+#if defined(__FreeBSD__) || defined(__NetBSD__)    || \
+       defined(__OpenBSD__) || defined(__DragonFly__) || \
+       defined(__APPLE__)   ||                           \
+       defined(__sun)       || defined(sun)           || \
+       defined(__QNX__)     || defined(__QNXNTO__)
+       #define HAVE_STRLCPY
+#endif
+
+// So we need to define our own.
+#ifndef HAVE_STRLCPY
+       #define strlcpy(d, s, n) mystrlcpy(d, s, n)
+#endif
+
 #define PADDING(x, y) ((ALIGNOF(y) - ((uintptr_t)(x) & (ALIGNOF(y) - 1))) & (ALIGNOF(y) - 1))
 
 namespace porting
index 4e26dc2454bf0df739e628ddf3314284cf78a31a..8e4da1b0586c74b8577281fdd310ab78e2772b49 100644 (file)
@@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "log.h"
 #include "tool.h"
 #include "serverobject.h"
+#include "porting.h"
 #include "mapgen.h"
 #include "json/json.h"