commit ce77c9b63c9f45a925a8d125b33624ed57159914
parent 3ad6095175dec6957a66e1f776252dc055cdf303
Author: hhvn <dev@hhvn.uk>
Date: Thu, 2 Dec 2021 16:02:15 +0000
Makefile hirc.h strlcpy.c: posix compatibility
Diffstat:
3 files changed, 59 insertions(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
@@ -6,7 +6,7 @@ MANDIR = $(PREFIX)/share/man
BIN = hirc
OBJ = main.o handle.o hist.o nick.o \
chan.o serv.o ui.o commands.o \
- config.o
+ config.o strlcpy.o
MAN = hirc.1
COMMIT = $(shell git log HEAD...HEAD~1 --pretty=format:%h)
diff --git a/hirc.h b/hirc.h
@@ -10,6 +10,12 @@
/* real maximum = MAX_HISTORY * (channels + servers + queries) */
#define strcmp_n(s1, s2) (s1 == s2 ? 0 : (s1 ? s2 ? strcmp(s1, s2) : -1 : -1))
+/* strlcpy.c */
+#ifndef __OpenBSD__
+#undef strlcpy
+size_t strlcpy(char *dst, const char *src, size_t dsize);
+#endif /* __OpenBSD__ */
+
/* main.c */
void * emalloc(size_t size);
char * estrdup(const char *str);
diff --git a/strlcpy.c b/strlcpy.c
@@ -0,0 +1,52 @@
+#ifndef __OpenBSD__
+/* $OpenBSD: strlcpy.c,v 1.16 2019/01/25 00:19:25 millert Exp $ */
+
+/*
+ * Copyright (c) 1998, 2015 Todd C. Miller <millert@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/types.h>
+#include <string.h>
+
+/*
+ * Copy string src to buffer dst of size dsize. At most dsize-1
+ * chars will be copied. Always NUL terminates (unless dsize == 0).
+ * Returns strlen(src); if retval >= dsize, truncation occurred.
+ */
+size_t
+strlcpy(char *dst, const char *src, size_t dsize)
+{
+ const char *osrc = src;
+ size_t nleft = dsize;
+
+ /* Copy as many bytes as will fit. */
+ if (nleft != 0) {
+ while (--nleft != 0) {
+ if ((*dst++ = *src++) == '\0')
+ break;
+ }
+ }
+
+ /* Not enough room in dst, add NUL and traverse rest of src. */
+ if (nleft == 0) {
+ if (dsize != 0)
+ *dst = '\0'; /* NUL-terminate dst */
+ while (*src++)
+ ;
+ }
+
+ return(src - osrc - 1); /* count does not include NUL */
+}
+#endif