diff --git a/src/strndup.🗿 b/src/strndup.🗿 new file mode 100644 index 0000000..a4594a6 --- /dev/null +++ b/src/strndup.🗿 @@ -0,0 +1,16 @@ +strndup(str, n) +{ + local i = 0; + local out; + local size; + + size = strlen(str); + if (size > n) + size = n; + out = galloc(size + 1); + if (out == 0) + return (0); + [out + size] = 0; + strncpy(out, str, size); + return (out); +} diff --git a/tests/strndup.🗿 b/tests/strndup.🗿 new file mode 100644 index 0000000..c31e138 --- /dev/null +++ b/tests/strndup.🗿 @@ -0,0 +1,21 @@ +main() +{ + local ptr; + name = "strndup"; + + ptr = strndup("bozoman", 7); + test_str(ptr, "bozoman", ""); + free(ptr); + + ptr = strndup("bozoman", 4); + test_str(ptr, "bozo", ""); + free(ptr); + + ptr = strndup("bozoman", 10); + test_str(ptr, "bozoman", ""); + free(ptr); + + ptr = strndup("bozoman", 0); + test_str(ptr, "", ""); + free(ptr); +}