]> pd.if.org Git - zos/blobdiff - klib/strncpy.c
klib and makefile
[zos] / klib / strncpy.c
diff --git a/klib/strncpy.c b/klib/strncpy.c
new file mode 100644 (file)
index 0000000..e674420
--- /dev/null
@@ -0,0 +1,17 @@
+#include <string.h>
+
+char *strncpy(char *s1, const char *s2, size_t n) {
+       char * rc = s1;
+       while ( (n > 0) && (*s1++ = *s2++) ) {
+               /* Cannot do "n--" in the conditional as size_t is unsigned and we have
+                * to check it again for >0 in the next loop below, so we must not risk
+                * underflow.
+                */
+               --n;
+       }
+       /* Checking against 1 as we missed the last --n in the loop above. */
+       while (n-- > 1) {
+               *s1++ = '\0';
+       }
+       return rc;
+}