summaryrefslogtreecommitdiff
path: root/compat.c
diff options
context:
space:
mode:
authorThomas Ulmer <thomasmulmer02@gmail.com>2026-06-23 21:34:41 -0700
committerThomas Ulmer <thomasmulmer02@gmail.com>2026-06-23 21:34:41 -0700
commit874d317334fae1ddce316f9b6f4d0ce4e434bf52 (patch)
tree929f924d3c3696d3aa9917aca0e7048bbe3e93e8 /compat.c
parent15bd7946cc838a3151c357e4b0bc1ab85eecda62 (diff)
heirloom vi fixes from arch AUR
Diffstat (limited to 'compat.c')
-rw-r--r--compat.c47
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