Eric Blake wrote: > On 05/24/2012 08:23 AM, Jim Meyering wrote: >> The use of strncpy is so seldom justifiable, that it is best >> just to avoid it altogether. Thus, we should enforce that: >> >>>From 22695d676de21d0af6d50ca8218eeb49b45608ab Mon Sep 17 00:00:00 2001 >> From: Jim Meyering <[email protected]> >> Date: Thu, 24 May 2012 16:21:34 +0200 >> Subject: [PATCH] maint: prohibit use of strncpy >> >> * cfg.mk (sc_prohibit_strncpy): New syntax-check rule. >> Exempt pinky.c and who.c, at least for now. >> --- >> cfg.mk | 9 +++++++++ >> 1 file changed, 9 insertions(+) >> >> diff --git a/cfg.mk b/cfg.mk >> index 7a86c2a..ff5d996 100644 >> --- a/cfg.mk >> +++ b/cfg.mk >> @@ -403,6 +403,12 @@ sc_prohibit_strncmp: >> { echo '$(ME): use STREQ_LEN or STRPREFIX instead of str''ncmp' \ >> 1>&2; exit 1; } || : >> >> +# Really. You don't want to use this function. >> +sc_prohibit_strncpy: >> + @prohibit='\<str''ncpy *\(' \ >> + halt='do not use str''ncpy, period' \ >> + $(_sc_search_regexp) > > > This seems like it is worth floating into gnulib's maint.mk.
That was my plan. I notice that libvirt has had a similar rule for a couple of years. This rule has two minor improvements over the one in coreutils: I removed the str''ncpy obfuscation, since it wasn't needed, and added comments. >From 71b2855288794404177296fab5db2f851db7a8a8 Mon Sep 17 00:00:00 2001 From: Jim Meyering <[email protected]> Date: Fri, 25 May 2012 16:38:49 +0200 Subject: [PATCH] maint.mk: add strncpy-prohibiting syntax-check rule * top/maint.mk (sc_prohibit_strncpy): New rule, from coreutils. --- ChangeLog | 5 +++++ top/maint.mk | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/ChangeLog b/ChangeLog index 686228c..1252100 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-05-25 Jim Meyering <[email protected]> + + maint.mk: add strncpy-prohibiting syntax-check rule + * top/maint.mk (sc_prohibit_strncpy): New rule, from coreutils. + 2012-05-24 Jim Meyering <[email protected]> maint.mk: compute $(gpg_key_ID) more portably diff --git a/top/maint.mk b/top/maint.mk index 9746410..11cb6a6 100644 --- a/top/maint.mk +++ b/top/maint.mk @@ -332,6 +332,14 @@ sc_prohibit_strcmp: halt='$(ME): replace strcmp calls above with STREQ/STRNEQ' \ $(_sc_search_regexp) +# Really. You don't want to use this function. +# It may fail to NUL-terminate the destination, +# and always NUL-pads out to the specified length. +sc_prohibit_strncpy: + @prohibit='\<strncpy *\(' \ + halt='do not use strncpy, period' \ + $(_sc_search_regexp) + # Pass EXIT_*, not number, to usage, exit, and error (when exiting) # Convert all uses automatically, via these two commands: # git grep -l '\<exit *(1)' \ -- 1.7.10.2.565.gbd578b5
