2014-10-19 3:38 GMT+02:00 Joe Perches <j...@perches.com>: > On Sun, 2014-10-19 at 00:03 +0200, Rickard Strandqvist wrote: >> Added a function strzcpy which works the same as strncpy, >> but guaranteed to produce the trailing null character. >> >> There are many places in the code where strncpy used although it >> must be zero terminated, and switching to strlcpy is not an option >> because the string must nonetheless be fyld with zero characters. > [] >> diff --git a/lib/string.c b/lib/string.c > [] >> +char *strzcpy(char *dest, const char *src, size_t count) >> +{ >> + char *tmp = dest; >> + >> + while (count) { >> + if ((*tmp = *src) != 0) >> + src++; >> + tmp++; >> + count--; >> + } >> + >> + if (dest != tmp) >> + *--tmp = '\0'; >> + >> + return dest; >> +} > > why not > > char *strzcpy(char *dest, const char *src, size_t count) > { > strncpy(dest, src, count) > if (count) > dest[count - 1] = 0; /* or '\0' or whatever */ > > return dest; > } > > maybe use static inline too. >
Hi Joe Yes this solution have also been discussed. https://lkml.org/lkml/2014/10/16/682 Very possible that it is a better solution. The code that I use in strzcpy is not the way I'd written it, but is the same as in strncpy now. But as I understand it the real strncpy code is normally highly optimized for the hardware it runs on. Ex: arch/x86/lib/string_32.c But missing for x86 64 bit and Arm..? Kind regards Rickard Strandqvist -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/