Re: [PATCH] net/rds: using strlcpy instead of strncpy
From: Ben Hutchings <hidden>
Date: 2013-03-05 03:38:09
On Tue, 2013-03-05 at 11:32 +0800, Chen Gang wrote:
于 2013年03月05日 11:16, Ben Hutchings 写道:quoted
I think it is wrong, and the code should be changed to do either: 1. Zero-initialise the whole of the name, then use strlcpy(). 2. Keep using strncpy(), and also set the last byte of name to 0.I think what I have done is just like your choice "2." for me, I think they are equal: - strncpy(ctr.name, names[i], sizeof(ctr.name) - 1); + strlcpy(ctr.name, names[i], sizeof(ctr.name)); strncpy(ctr.name, names[i], sizeof(ctr.name) - 1); + ctr.name[sizeof(ctr.name) - 1] = '\0';
They are not. strncpy() pads with zeroes to the end of the given buffer whereas strlcpy() adds only a single zero byte (and truncates if necessary to fit the zero byte). Ben. -- Ben Hutchings, Staff Engineer, Solarflare Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked.