iBring in reallocarray() from OpenBSD - stagit-gopher - A git gopher frontend. (mirror) Err bitreich.org 70 hgit clone git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/ URL:git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/ bitreich.org 70 1Log /scm/stagit-gopher/log.gph bitreich.org 70 1Files /scm/stagit-gopher/files.gph bitreich.org 70 1Refs /scm/stagit-gopher/refs.gph bitreich.org 70 1Tags /scm/stagit-gopher/tag bitreich.org 70 1README /scm/stagit-gopher/file/README.gph bitreich.org 70 1LICENSE /scm/stagit-gopher/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 2809fd3795e8445f686547d08eef4631efc05030 /scm/stagit-gopher/commit/2809fd3795e8445f686547d08eef4631efc05030.gph bitreich.org 70 1parent 87360fe2526f7713c4626d04da521579141fcf68 /scm/stagit-gopher/commit/87360fe2526f7713c4626d04da521579141fcf68.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Wed, 6 Jan 2016 17:02:28 +0000 Err bitreich.org 70 i Err bitreich.org 70 iBring in reallocarray() from OpenBSD Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M Makefile | 1 + Err bitreich.org 70 i M compat.h | 2 ++ Err bitreich.org 70 i M config.mk | 4 ++-- Err bitreich.org 70 i A reallocarray.c | 39 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i M strlcat.c | 2 ++ Err bitreich.org 70 i M strlcpy.c | 2 ++ Err bitreich.org 70 i Err bitreich.org 70 i6 files changed, 48 insertions(+), 2 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/Makefile b/Makefile /scm/stagit-gopher/file/Makefile.gph bitreich.org 70 i@@ -6,6 +6,7 @@ SRC = \ Err bitreich.org 70 i stagit.c\ Err bitreich.org 70 i stagit-index.c Err bitreich.org 70 i COMPATSRC = \ Err bitreich.org 70 i+ reallocarray.c\ Err bitreich.org 70 i strlcat.c\ Err bitreich.org 70 i strlcpy.c Err bitreich.org 70 i BIN = \ Err bitreich.org 70 1diff --git a/compat.h b/compat.h /scm/stagit-gopher/file/compat.h.gph bitreich.org 70 i@@ -3,4 +3,6 @@ Err bitreich.org 70 i size_t strlcat(char *, const char *, size_t); Err bitreich.org 70 i #undef strlcpy Err bitreich.org 70 i size_t strlcpy(char *, const char *, size_t); Err bitreich.org 70 i+#undef reallocarray Err bitreich.org 70 i+void *reallocarray(void *, size_t, size_t); Err bitreich.org 70 i #endif Err bitreich.org 70 1diff --git a/config.mk b/config.mk /scm/stagit-gopher/file/config.mk.gph bitreich.org 70 i@@ -28,8 +28,8 @@ LDFLAGS = ${LIBS} Err bitreich.org 70 i Err bitreich.org 70 i # uncomment for compat Err bitreich.org 70 i CFLAGS += -DCOMPAT Err bitreich.org 70 i-# uncomment if your libc doesn't support strlcat, strlcpy. Err bitreich.org 70 i-COMPATOBJ = strlcat.o strlcpy.o Err bitreich.org 70 i+# uncomment if your libc doesn't support reallocarray, strlcat, strlcpy. Err bitreich.org 70 i+COMPATOBJ = reallocarray.o strlcat.o strlcpy.o Err bitreich.org 70 i Err bitreich.org 70 i # compiler and linker Err bitreich.org 70 i #CC = cc Err bitreich.org 70 1diff --git a/reallocarray.c b/reallocarray.c /scm/stagit-gopher/file/reallocarray.c.gph bitreich.org 70 i@@ -0,0 +1,39 @@ Err bitreich.org 70 i+/* Err bitreich.org 70 i+ * Copyright (c) 2008 Otto Moerbeek Err bitreich.org 70 i+ * Err bitreich.org 70 i+ * Permission to use, copy, modify, and distribute this software for any Err bitreich.org 70 i+ * purpose with or without fee is hereby granted, provided that the above Err bitreich.org 70 i+ * copyright notice and this permission notice appear in all copies. Err bitreich.org 70 i+ * Err bitreich.org 70 i+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES Err bitreich.org 70 i+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF Err bitreich.org 70 i+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR Err bitreich.org 70 i+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES Err bitreich.org 70 i+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN Err bitreich.org 70 i+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF Err bitreich.org 70 i+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Err bitreich.org 70 i+ */ Err bitreich.org 70 i+ Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+ Err bitreich.org 70 i+#include "compat.h" Err bitreich.org 70 i+ Err bitreich.org 70 i+/* Err bitreich.org 70 i+ * This is sqrt(SIZE_MAX+1), as s1*s2 <= SIZE_MAX Err bitreich.org 70 i+ * if both s1 < MUL_NO_OVERFLOW and s2 < MUL_NO_OVERFLOW Err bitreich.org 70 i+ */ Err bitreich.org 70 i+#define MUL_NO_OVERFLOW (1UL << (sizeof(size_t) * 4)) Err bitreich.org 70 i+ Err bitreich.org 70 i+void * Err bitreich.org 70 i+reallocarray(void *optr, size_t nmemb, size_t size) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW) && Err bitreich.org 70 i+ nmemb > 0 && SIZE_MAX / nmemb < size) { Err bitreich.org 70 i+ errno = ENOMEM; Err bitreich.org 70 i+ return NULL; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ return realloc(optr, size * nmemb); Err bitreich.org 70 i+} Err bitreich.org 70 1diff --git a/strlcat.c b/strlcat.c /scm/stagit-gopher/file/strlcat.c.gph bitreich.org 70 i@@ -19,6 +19,8 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i Err bitreich.org 70 i+#include "compat.h" Err bitreich.org 70 i+ Err bitreich.org 70 i /* Err bitreich.org 70 i * Appends src to string dst of size dsize (unlike strncat, dsize is the Err bitreich.org 70 i * full size of dst, not space left). At most dsize-1 characters Err bitreich.org 70 1diff --git a/strlcpy.c b/strlcpy.c /scm/stagit-gopher/file/strlcpy.c.gph bitreich.org 70 i@@ -19,6 +19,8 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i Err bitreich.org 70 i+#include "compat.h" Err bitreich.org 70 i+ Err bitreich.org 70 i /* Err bitreich.org 70 i * Copy string src to buffer dst of size dsize. At most dsize-1 Err bitreich.org 70 i * chars will be copied. Always NUL terminates (unless dsize == 0). Err bitreich.org 70 .