diff options
| author | Thomas Ulmer <thomasmulmer02@gmail.com> | 2026-06-23 21:34:41 -0700 |
|---|---|---|
| committer | Thomas Ulmer <thomasmulmer02@gmail.com> | 2026-06-23 21:34:41 -0700 |
| commit | 874d317334fae1ddce316f9b6f4d0ce4e434bf52 (patch) | |
| tree | 929f924d3c3696d3aa9917aca0e7048bbe3e93e8 /compat.c | |
| parent | 15bd7946cc838a3151c357e4b0bc1ab85eecda62 (diff) | |
heirloom vi fixes from arch AUR
Diffstat (limited to 'compat.c')
| -rw-r--r-- | compat.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/compat.c b/compat.c new file mode 100644 index 0000000..85a46b1 --- /dev/null +++ b/compat.c @@ -0,0 +1,47 @@ +/* Carsten Kunze, 2016 */ + +#include <string.h> + +#ifndef HAVE_STRLCPY +size_t +strlcpy(char *dst, const char *src, size_t dstsize) { + size_t srcsize; + /* Not conform to strlcpy, but avoids to access illegal memory in case + * of unterminated strings */ + for (srcsize = 0; srcsize < dstsize; srcsize++) + if (!src[srcsize]) + break; + if (dstsize > srcsize) + dstsize = srcsize; + else if (dstsize) + dstsize--; + if (dstsize) + /* assumes non-overlapping buffers */ + memcpy(dst, src, dstsize); + dst[dstsize] = 0; + return srcsize; +} +#endif + +#ifndef HAVE_STRLCAT +size_t +strlcat(char *dst, const char *src, size_t dstsize) { + size_t ld, ls; + for (ld = 0; ld < dstsize - 1; ld++) + if (!dst[ld]) + break; + dst += ld; + dstsize -= ld; + for (ls = 0; ls < dstsize; ls++) + if (!src[ls]) + break; + if (dstsize > ls) + dstsize = ls; + else if (dstsize) + dstsize--; + if (dstsize) + memcpy(dst, src, dstsize); + dst[dstsize] = 0; + return ld + ls; +} +#endif |
