~ chicken-core (chicken-5) d6d3da4bcdceb2beb223db0e0d9fd381546ff6b7
commit d6d3da4bcdceb2beb223db0e0d9fd381546ff6b7
Author: Peter Bex <peter.bex@xs4all.nl>
AuthorDate: Thu Feb 6 09:56:48 2014 +0100
Commit: Mario Domenech Goulart <mario.goulart@gmail.com>
CommitDate: Fri Feb 7 20:37:39 2014 -0200
Prevent problems when the host system does provide strlcpy/strlcat.
Defining strlcat/strlcopy causes trouble if HAVE_STRLCAT/HAVE_STRLCPY
is not set and the host system does offer these functions. This could
also happen on systems that don't offer these functions but
bsd/string.h is being included by user code on Linux, for example.
Instead of defining strlcat and defining C_strlcat to point to that,
we define the replacement function directly under the name C_strlcat.
On systems which do have strlcat, we define C_strlcat as an alias of
strlcat.
Signed-off-by: Mario Domenech Goulart <mario.goulart@gmail.com>
diff --git a/chicken.h b/chicken.h
index 6b8fc6a1..b2cccf47 100644
--- a/chicken.h
+++ b/chicken.h
@@ -923,12 +923,10 @@ DECL_C_PROC_p0 (128, 1,0,0,0,0,0,0,0)
# define C_memcpy memcpy
# define C_memcmp memcmp
-# define C_strlcpy strlcpy
# define C_strncpy strncpy
# define C_strcmp strcmp
# define C_strncmp strncmp
# define C_strlen strlen
-# define C_strlcat strlcat
# define C_memset memset
# define C_memmove memmove
# define C_strncasecmp strncasecmp
@@ -3055,8 +3053,10 @@ C_path_to_executable(C_char *fname)
#endif
/* These strl* functions are based on public domain code by C.B. Falconer */
-#ifndef HAVE_STRLCPY
-C_inline size_t strlcpy(char *dst, const char *src, size_t sz)
+#ifdef HAVE_STRLCPY
+# define C_strlcpy strlcpy
+#else
+C_inline size_t C_strlcpy(char *dst, const char *src, size_t sz)
{
const char *start = src;
@@ -3073,15 +3073,17 @@ C_inline size_t strlcpy(char *dst, const char *src, size_t sz)
}
#endif
-#ifndef HAVE_STRLCAT
-C_inline size_t strlcat(char *dst, const char *src, size_t sz)
+#ifdef HAVE_STRLCAT
+# define C_strlcat strlcat
+#else
+C_inline size_t C_strlcat(char *dst, const char *src, size_t sz)
{
char *start = dst;
while (*dst++) /* assumes sz >= strlen(dst) */
if (sz) sz--; /* i.e. well formed string */
dst--;
- return dst - start + strlcpy(dst, src, sz);
+ return dst - start + C_strlcpy(dst, src, sz);
}
#endif
Trap