--- a/backport-include/linux/string.h +++ b/backport-include/linux/string.h @@ -25,4 +25,8 @@ extern void *memdup_user_nul(const void void memzero_explicit(void *s, size_t count); #endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,3,0)) +ssize_t strscpy(char *dest, const char *src, size_t count); +#endif + #endif /* __BACKPORT_LINUX_STRING_H */ --- a/compat/backport-4.3.c +++ b/compat/backport-4.3.c @@ -57,3 +57,29 @@ void seq_hex_dump(struct seq_file *m, co } } EXPORT_SYMBOL_GPL(seq_hex_dump); + +ssize_t strscpy(char *dest, const char *src, size_t count) +{ + long res = 0; + + if (count == 0) + return -E2BIG; + + while (count) { + char c; + + c = src[res]; + dest[res] = c; + if (!c) + return res; + res++; + count--; + } + + /* Hit buffer length without finding a NUL; force NUL-termination. */ + if (res) + dest[res-1] = '\0'; + + return -E2BIG; +} +EXPORT_SYMBOL_GPL(strscpy);