Comment by wpollock
8 days ago
This article is a bit misleading. Linux kernel programming uses C, but not the C standard library and never has. The string functions discussed here are "helper" functions included in the kernel and are not part of the standard library.
The C standard library doesn't have strscpy or the others; it still has strncpy.
Should be using strcpy_s or strncpy_s.
Annex K (which is what that is) is sufficiently unpopular as to have been under discussion to be removed from the standard. Few implementations exist, and even fewer conform to the standard (e.g. Microsoft's doesn't).
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm
Furthermore, since the kernel uses no C library, it's the kernel developer's choices what to implement and use.
Unpopular because it came from Microsoft. But it works, and with my safeclib even usable in the kernel.
The cited document is outdated. This is a better overview: https://rurban.github.io/safeclib/doc/safec-3.9/d6/d31/md_do...
Isn't Microsoft the same group that still won't allow you to write "import <cstdint>" in C++ ?
1 reply →
> Should be using strcpy_s or strncpy_s
These functions are optional in the C standard and not always present. AFAIK, they are not included in glibc as of 2025.