tutil.[ch]: add strlcpy for platforms that do not have it - vote - simple cgi voting system for web and gopher
HTML git clone git://src.adamsgaard.dk/vote
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
DIR commit 5190a3453c2755d07cb5e6afeb9689d27275d4da
DIR parent a6ae3f0db3f76e55a4ecc84bf09ee62e629881e3
HTML Author: Anders Damsgaard <anders@adamsgaard.dk>
Date: Sun, 27 Sep 2020 08:59:58 +0200
util.[ch]: add strlcpy for platforms that do not have it
Diffstat:
M util.c | 24 ++++++++++++++++++++++++
M util.h | 1 +
2 files changed, 25 insertions(+), 0 deletions(-)
---
DIR diff --git a/util.c b/util.c
t@@ -228,3 +228,27 @@ escapechars(char *s)
}
}
}
+
+#ifdef NEED_STRLCPY /* OpenBSD implementation */
+size_t
+strlcpy(char *dst, const char *src, size_t dsize) {
+ const char *osrc = src;
+ size_t nleft = dsize;
+
+ if (nleft != 0) {
+ while (--nleft != 0) {
+ if ((*dst++= *src++) == '\0')
+ break;
+ }
+ }
+
+ if (nleft == 0) {
+ if (dsize != 0)
+ *dst = '\0';
+ while (*src++)
+ ;
+ }
+
+ return(src - osrc - 1);
+}
+#endif /* NEED_STRLCPY */
DIR diff --git a/util.h b/util.h
t@@ -17,3 +17,4 @@ int uriencode(const char *s, char *buf, size_t bufsiz);
int utf8pad(char *buf, size_t bufsiz, const char *s, size_t len, int pad);
void xmlencode(const char *s);
void escapechars(char *s);
+size_t strlcpy(char *dst, const char *src, size_t dsize);