diff options
author | Russ Allbery <rra@stanford.edu> | 2008-04-07 19:43:02 +0000 |
---|---|---|
committer | Russ Allbery <rra@stanford.edu> | 2008-04-07 19:43:02 +0000 |
commit | 307ba7704617f8473644e571a6d63aba8de53dec (patch) | |
tree | f370092c6b91bb325ec3eb67471f1149b46051f5 /portable | |
parent | 5c7f925d454d16cf6427f3d3e9e2a5f0299ca085 (diff) |
Add support for enabling and disabling principals (clearing or setting
the NOTGS flag) and examining principals to kasetkey. This
functionality isn't used by wallet (and probably won't be) but is
convenient for other users of kasetkey such as kadmin-remctl.
Diffstat (limited to 'portable')
-rw-r--r-- | portable/strlcat.c | 42 | ||||
-rw-r--r-- | portable/strlcpy.c | 40 |
2 files changed, 82 insertions, 0 deletions
diff --git a/portable/strlcat.c b/portable/strlcat.c new file mode 100644 index 0000000..971a348 --- /dev/null +++ b/portable/strlcat.c @@ -0,0 +1,42 @@ +/* $Id$ + * + * Replacement for a missing strlcat. + * + * Provides the same functionality as the *BSD function strlcat, originally + * developed by Todd Miller and Theo de Raadt. strlcat works similarly to + * strncat, except simpler. The result is always nul-terminated even if the + * source string is longer than the space remaining in the destination string, + * and the total space required is returned. The third argument is the total + * space available in the destination buffer, not just the amount of space + * remaining. + * + * Written by Russ Allbery <rra@stanford.edu> + * This work is hereby placed in the public domain by its author. + */ + +#include <config.h> +#include <system.h> + +/* + * If we're running the test suite, rename strlcat to avoid conflicts with + * the system version. + */ +#if TESTING +# define strlcat test_strlcat +size_t test_strlcat(char *, const char *, size_t); +#endif + +size_t +strlcat(char *dst, const char *src, size_t size) +{ + size_t used, length, copy; + + used = strlen(dst); + length = strlen(src); + if (size > 0 && used < size - 1) { + copy = (length >= size - used) ? size - used - 1 : length; + memcpy(dst + used, src, copy); + dst[used + copy] = '\0'; + } + return used + length; +} diff --git a/portable/strlcpy.c b/portable/strlcpy.c new file mode 100644 index 0000000..1dd49a3 --- /dev/null +++ b/portable/strlcpy.c @@ -0,0 +1,40 @@ +/* $Id$ + * + * Replacement for a missing strlcpy. + * + * Provides the same functionality as the *BSD function strlcpy, originally + * developed by Todd Miller and Theo de Raadt. strlcpy works similarly to + * strncpy, except saner and simpler. The result is always nul-terminated + * even if the source string is longer than the destination string, and the + * total space required is returned. The destination string is not nul-filled + * like strncpy does, just nul-terminated. + * + * Written by Russ Allbery <rra@stanford.edu> + * This work is hereby placed in the public domain by its author. + */ + +#include <config.h> +#include <system.h> + +/* + * If we're running the test suite, rename strlcpy to avoid conflicts with + * the system version. + */ +#if TESTING +# define strlcpy test_strlcpy +size_t test_strlcpy(char *, const char *, size_t); +#endif + +size_t +strlcpy(char *dst, const char *src, size_t size) +{ + size_t length, copy; + + length = strlen(src); + if (size > 0) { + copy = (length >= size) ? size - 1 : length; + memcpy(dst, src, copy); + dst[copy] = '\0'; + } + return length; +} |