From: Pádraig Brady
Date: Sat, 7 Nov 2020 21:04:12 +0000 (+0000) Subject: maint: avoid strncat warning on GCC X-Git-Tag: v9.0~191 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=165a80f6e6f613d2443f19c87f9511ce2cf9818c;p=thirdparty%2Fcoreutils.git maint: avoid strncat warning on GCC GCC 10.1.1 without optimization gives: error: ‘strncat’ argument 2 declared attribute ‘nonstring’ [-Werror=stringop-overflow=] strncat (comment, UT_ID (utmp_ent), utmpsize); Note the strncat man page says that: "src does not need to be null-terminated if it contains n or more bytes." And the POSIX spec says that the second (source) parameter is an array not a string. So I think it's incorrect for strncat to require src be a string type. This constraint seems to be being added to the gcc builtin strncat, as specifiying -fno-builtin also avoids the warning. Note specifying any optimization level also avoids the warning. * src/who.c (make_id_equals_comment): Avoid the issue by using stpcpy + stzncpy, instead of strcpy + strncat. This pattern is used elsewhere in who.c --- diff --git a/src/who.c b/src/who.c index abf3bc734a..a039272472 100644 --- a/src/who.c +++ b/src/who.c @@ -450,8 +450,8 @@ make_id_equals_comment (STRUCT_UTMP const *utmp_ent) size_t utmpsize = sizeof UT_ID (utmp_ent); char *comment = xmalloc (strlen (_("id=")) + utmpsize + 1); - strcpy (comment, _("id=")); - strncat (comment, UT_ID (utmp_ent), utmpsize); + char *p = stpcpy (comment, _("id=")); + stzncpy (p, UT_ID (utmp_ent), utmpsize); return comment; }