Hi Jim, > I developed a strong aversion to strncpy, and wrote this about it: > https://meyering.net/crusade-to-eliminate-strncpy/
Thanks for your voice and past effort here. Here's doc I propose to add to the gnulib documentation (and similar one to wcscpy and wcsncpy): diff --git a/doc/posix-functions/strcpy.texi b/doc/posix-functions/strcpy.texi index 3289362..89c6cd3 100644 --- a/doc/posix-functions/strcpy.texi +++ b/doc/posix-functions/strcpy.texi @@ -17,3 +17,6 @@ OS X 10.8. Portability problems not fixed by Gnulib: @itemize @end itemize + +Note: @code{strcpy (dst, src)} is only safe to use when you can guarantee that +there are at least @code{strlen (src) + 1} bytes allocated at @code{dst}. diff --git a/doc/posix-functions/strncpy.texi b/doc/posix-functions/strncpy.texi index 3cc6b45..087acaf 100644 --- a/doc/posix-functions/strncpy.texi +++ b/doc/posix-functions/strncpy.texi @@ -17,3 +17,12 @@ OS X 10.8. Portability problems not fixed by Gnulib: @itemize @end itemize + +Note: This function was designed for the use-case of filling a fixed-size +record with a string, before writing it to a file. This function is +@strong{not} appropriate for copying a string into a bounded memory area, +because you have no guarantee that the result will be NUL-terminated. +Even if you add the NUL byte at the end yourself, this function is +inefficient (as it spends time clearing unused memory) and will allow +silent truncation occur, which is not a good behavior for GNU programs. +For more details, see @see{https://meyering.net/crusade-to-eliminate-strncpy/}.