This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Revert "Inline strlcat(), strlcpy()"
authorYves Orton <demerphq@gmail.com>
Thu, 22 Dec 2022 11:50:46 +0000 (12:50 +0100)
committerYves Orton <demerphq@gmail.com>
Thu, 22 Dec 2022 12:40:09 +0000 (13:40 +0100)
This reverts commit 5be23dd97e360d19c8abb4c0c534f5d5f9d3691a.

The original patch seems to break DBM.

embed.fnc
inline.h
proto.h
util.c

index fe66907..d4c6b58 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -3780,11 +3780,11 @@ FXpoT   |I32    |xs_handshake   |const U32 key|NN void * v_my_perl\
                                |NN const char * file| ...
 Xp     |void   |xs_boot_epilog |const I32 ax
 #ifndef HAS_STRLCAT
-AsTd   |Size_t |my_strlcat     |NULLOK char *dst|NULLOK const char *src|Size_t size
+ApTd   |Size_t |my_strlcat     |NULLOK char *dst|NULLOK const char *src|Size_t size
 #endif
 
 #ifndef HAS_STRLCPY
-AsTd   |Size_t |my_strlcpy     |NULLOK char *dst|NULLOK const char *src|Size_t size
+ApTd   |Size_t |my_strlcpy     |NULLOK char *dst|NULLOK const char *src|Size_t size
 #endif
 
 #ifndef HAS_STRNLEN
index 484bc39..49cae27 100644 (file)
--- a/inline.h
+++ b/inline.h
@@ -3625,79 +3625,5 @@ Perl_savesharedsvpv(pTHX_ SV *sv)
 }
 
 /*
-=for apidoc my_strlcat
-
-The C library C<strlcat> if available, or a Perl implementation of it.
-This operates on C C<NUL>-terminated strings.
-
-C<my_strlcat()> appends string C<src> to the end of C<dst>.  It will append at
-most S<C<size - strlen(dst) - 1>> characters.  It will then C<NUL>-terminate,
-unless C<size> is 0 or the original C<dst> string was longer than C<size> (in
-practice this should not happen as it means that either C<size> is incorrect or
-that C<dst> is not a proper C<NUL>-terminated string).
-
-Note that C<size> is the full size of the destination buffer and
-the result is guaranteed to be C<NUL>-terminated if there is room.  Note that
-room for the C<NUL> should be included in C<size>.
-
-The return value is the total length that C<dst> would have if C<size> is
-sufficiently large.  Thus it is the initial length of C<dst> plus the length of
-C<src>.  If C<size> is smaller than the return, the excess was not appended.
-
-=cut
-
-Description stolen from http://man.openbsd.org/strlcat.3
-*/
-#ifndef HAS_STRLCAT
-PERL_STATIC_INLINE Size_t
-Perl_my_strlcat(char *dst, const char *src, Size_t size)
-{
-    Size_t used, length, copy;
-
-    used = strlen(dst);
-    length = strlen(src);
-    if (size > 0 && used < size - 1) {
-        copy = (length >= size - used) ? size - used - 1 : length;
-        memcpy(dst + used, src, copy);
-        dst[used + copy] = '\0';
-    }
-    return used + length;
-}
-#endif
-
-
-/*
-=for apidoc my_strlcpy
-
-The C library C<strlcpy> if available, or a Perl implementation of it.
-This operates on C C<NUL>-terminated strings.
-
-C<my_strlcpy()> copies up to S<C<size - 1>> characters from the string C<src>
-to C<dst>, C<NUL>-terminating the result if C<size> is not 0.
-
-The return value is the total length C<src> would be if the copy completely
-succeeded.  If it is larger than C<size>, the excess was not copied.
-
-=cut
-
-Description stolen from http://man.openbsd.org/strlcpy.3
-*/
-#ifndef HAS_STRLCPY
-PERL_STATIC_INLINE Size_t
-Perl_my_strlcpy(char *dst, const char *src, Size_t size)
-{
-    Size_t length, copy;
-
-    length = strlen(src);
-    if (size > 0) {
-        copy = (length >= size) ? size - 1 : length;
-        memcpy(dst, src, copy);
-        dst[copy] = '\0';
-    }
-    return length;
-}
-#endif
-
-/*
  * ex: set ts=8 sts=4 sw=4 et:
  */
diff --git a/proto.h b/proto.h
index 3cb29fa..a0c5f49 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -4860,11 +4860,11 @@ PERL_CALLCONV int       Perl_signbit(NV f)
 
 #endif
 #if !defined(HAS_STRLCAT)
-STATIC Size_t  Perl_my_strlcat(char *dst, const char *src, Size_t size);
+PERL_CALLCONV Size_t   Perl_my_strlcat(char *dst, const char *src, Size_t size);
 #define PERL_ARGS_ASSERT_MY_STRLCAT
 #endif
 #if !defined(HAS_STRLCPY)
-STATIC Size_t  Perl_my_strlcpy(char *dst, const char *src, Size_t size);
+PERL_CALLCONV Size_t   Perl_my_strlcpy(char *dst, const char *src, Size_t size);
 #define PERL_ARGS_ASSERT_MY_STRLCPY
 #endif
 #if !defined(HAS_STRNLEN)
diff --git a/util.c b/util.c
index 16c87e2..8da7c11 100644 (file)
--- a/util.c
+++ b/util.c
@@ -5738,6 +5738,80 @@ S_xs_version_bootcheck(pTHX_ U32 items, U32 ax, const char *xs_p,
     }
 }
 
+/*
+=for apidoc my_strlcat
+
+The C library C<strlcat> if available, or a Perl implementation of it.
+This operates on C C<NUL>-terminated strings.
+
+C<my_strlcat()> appends string C<src> to the end of C<dst>.  It will append at
+most S<C<size - strlen(dst) - 1>> characters.  It will then C<NUL>-terminate,
+unless C<size> is 0 or the original C<dst> string was longer than C<size> (in
+practice this should not happen as it means that either C<size> is incorrect or
+that C<dst> is not a proper C<NUL>-terminated string).
+
+Note that C<size> is the full size of the destination buffer and
+the result is guaranteed to be C<NUL>-terminated if there is room.  Note that
+room for the C<NUL> should be included in C<size>.
+
+The return value is the total length that C<dst> would have if C<size> is
+sufficiently large.  Thus it is the initial length of C<dst> plus the length of
+C<src>.  If C<size> is smaller than the return, the excess was not appended.
+
+=cut
+
+Description stolen from http://man.openbsd.org/strlcat.3
+*/
+#ifndef HAS_STRLCAT
+Size_t
+Perl_my_strlcat(char *dst, const char *src, Size_t size)
+{
+    Size_t used, length, copy;
+
+    used = strlen(dst);
+    length = strlen(src);
+    if (size > 0 && used < size - 1) {
+        copy = (length >= size - used) ? size - used - 1 : length;
+        memcpy(dst + used, src, copy);
+        dst[used + copy] = '\0';
+    }
+    return used + length;
+}
+#endif
+
+
+/*
+=for apidoc my_strlcpy
+
+The C library C<strlcpy> if available, or a Perl implementation of it.
+This operates on C C<NUL>-terminated strings.
+
+C<my_strlcpy()> copies up to S<C<size - 1>> characters from the string C<src>
+to C<dst>, C<NUL>-terminating the result if C<size> is not 0.
+
+The return value is the total length C<src> would be if the copy completely
+succeeded.  If it is larger than C<size>, the excess was not copied.
+
+=cut
+
+Description stolen from http://man.openbsd.org/strlcpy.3
+*/
+#ifndef HAS_STRLCPY
+Size_t
+Perl_my_strlcpy(char *dst, const char *src, Size_t size)
+{
+    Size_t length, copy;
+
+    length = strlen(src);
+    if (size > 0) {
+        copy = (length >= size) ? size - 1 : length;
+        memcpy(dst, src, copy);
+        dst[copy] = '\0';
+    }
+    return length;
+}
+#endif
+
 PERL_STATIC_INLINE bool
 S_gv_has_usable_name(pTHX_ GV *gv)
 {