string: provide strscpy()
authorChris Metcalf <cmetcalf@ezchip.com>
Wed, 29 Apr 2015 16:52:04 +0000 (12:52 -0400)
committerChris Metcalf <cmetcalf@ezchip.com>
Thu, 10 Sep 2015 19:36:59 +0000 (15:36 -0400)
commit30035e45753b708e7d47a98398500ca005e02b86
treea7a03ae69c14176c9824a382b0eef09cf8687c8b
parenta6e2f029ae34f41adb6ae3812c32c5d326e1abd2
string: provide strscpy()

The strscpy() API is intended to be used instead of strlcpy(),
and instead of most uses of strncpy().

- Unlike strlcpy(), it doesn't read from memory beyond (src + size).

- Unlike strlcpy() or strncpy(), the API provides an easy way to check
  for destination buffer overflow: an -E2BIG error return value.

- The provided implementation is robust in the face of the source
  buffer being asynchronously changed during the copy, unlike the
  current implementation of strlcpy().

- Unlike strncpy(), the destination buffer will be NUL-terminated
  if the string in the source buffer is too long.

- Also unlike strncpy(), the destination buffer will not be updated
  beyond the NUL termination, avoiding strncpy's behavior of zeroing
  the entire tail end of the destination buffer.  (A memset() after
  the strscpy() can be used if this behavior is desired.)

- The implementation should be reasonably performant on all
  platforms since it uses the asm/word-at-a-time.h API rather than
  simple byte copy.  Kernel-to-kernel string copy is not considered
  to be performance critical in any case.

Signed-off-by: Chris Metcalf <cmetcalf@ezchip.com>
include/linux/string.h
lib/string.c