iutil: ship a clean-room version of strtonum for convenience - ics2txt - convert icalendar .ics file to plain text Err bitreich.org 70 hgit clone git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ics2txt URL:git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ics2txt bitreich.org 70 1Log /scm/ics2txt/log.gph bitreich.org 70 1Files /scm/ics2txt/files.gph bitreich.org 70 1Refs /scm/ics2txt/refs.gph bitreich.org 70 1Tags /scm/ics2txt/tag bitreich.org 70 1README /scm/ics2txt/file/README.md.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 94173d57d064a613633e0cdd0b1a6da35d28fee8 /scm/ics2txt/commit/94173d57d064a613633e0cdd0b1a6da35d28fee8.gph bitreich.org 70 1parent 599d47ef952d535e775263772cfbbbe9a2704971 /scm/ics2txt/commit/599d47ef952d535e775263772cfbbbe9a2704971.gph bitreich.org 70 hAuthor: Josuah Demangeon URL:mailto:me@josuah.net bitreich.org 70 iDate: Thu, 24 Jun 2021 23:48:52 +0200 Err bitreich.org 70 i Err bitreich.org 70 iutil: ship a clean-room version of strtonum for convenience Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M Makefile | 2 +- Err bitreich.org 70 i D strtonum.c | 65 ------------------------------- Err bitreich.org 70 i M util.c | 37 +++++++++++++++++++++++++------ Err bitreich.org 70 i M util.h | 8 +------- Err bitreich.org 70 i Err bitreich.org 70 i4 files changed, 32 insertions(+), 80 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/Makefile b/Makefile /scm/ics2txt/file/Makefile.gph bitreich.org 70 i@@ -7,7 +7,7 @@ CFLAGS = $D $W -g Err bitreich.org 70 i PREFIX = /usr/local Err bitreich.org 70 i MANPREFIX = ${PREFIX}/man Err bitreich.org 70 i Err bitreich.org 70 i-SRC = ical.c base64.c util.c strtonum.c Err bitreich.org 70 i+SRC = ical.c base64.c util.c Err bitreich.org 70 i HDR = ical.h base64.h util.h Err bitreich.org 70 i OBJ = ${SRC:.c=.o} Err bitreich.org 70 i AWK = tsv2ics.awk Err bitreich.org 70 1diff --git a/strtonum.c b/strtonum.c /scm/ics2txt/file/strtonum.c.gph bitreich.org 70 i@@ -1,65 +0,0 @@ Err bitreich.org 70 i-/* $OpenBSD: strtonum.c,v 1.8 2015/09/13 08:31:48 guenther Exp $ */ Err bitreich.org 70 i- Err bitreich.org 70 i-/* Err bitreich.org 70 i- * Copyright (c) 2004 Ted Unangst and Todd Miller Err bitreich.org 70 i- * All rights reserved. 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- Err bitreich.org 70 i-#define INVALID 1 Err bitreich.org 70 i-#define TOOSMALL 2 Err bitreich.org 70 i-#define TOOLARGE 3 Err bitreich.org 70 i- Err bitreich.org 70 i-long long Err bitreich.org 70 i-strtonum(const char *numstr, long long minval, long long maxval, Err bitreich.org 70 i- const char **errstrp) Err bitreich.org 70 i-{ Err bitreich.org 70 i- long long ll = 0; Err bitreich.org 70 i- int error = 0; Err bitreich.org 70 i- char *ep; Err bitreich.org 70 i- struct errval { Err bitreich.org 70 i- const char *errstr; Err bitreich.org 70 i- int err; Err bitreich.org 70 i- } ev[4] = { Err bitreich.org 70 i- { NULL, 0 }, Err bitreich.org 70 i- { "invalid", EINVAL }, Err bitreich.org 70 i- { "too small", ERANGE }, Err bitreich.org 70 i- { "too large", ERANGE }, Err bitreich.org 70 i- }; Err bitreich.org 70 i- Err bitreich.org 70 i- ev[0].err = errno; Err bitreich.org 70 i- errno = 0; Err bitreich.org 70 i- if (minval > maxval) { Err bitreich.org 70 i- error = INVALID; Err bitreich.org 70 i- } else { Err bitreich.org 70 i- ll = strtoll(numstr, &ep, 10); Err bitreich.org 70 i- if (numstr == ep || *ep != '\0') Err bitreich.org 70 i- error = INVALID; Err bitreich.org 70 i- else if ((ll == LLONG_MIN && errno == ERANGE) || ll < minval) Err bitreich.org 70 i- error = TOOSMALL; Err bitreich.org 70 i- else if ((ll == LLONG_MAX && errno == ERANGE) || ll > maxval) Err bitreich.org 70 i- error = TOOLARGE; Err bitreich.org 70 i- } Err bitreich.org 70 i- if (errstrp != NULL) Err bitreich.org 70 i- *errstrp = ev[error].errstr; Err bitreich.org 70 i- errno = ev[error].err; Err bitreich.org 70 i- if (error) Err bitreich.org 70 i- ll = 0; Err bitreich.org 70 i- Err bitreich.org 70 i- return (ll); Err bitreich.org 70 i-} Err bitreich.org 70 1diff --git a/util.c b/util.c /scm/ics2txt/file/util.c.gph bitreich.org 70 i@@ -2,6 +2,7 @@ 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 #include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i@@ -9,8 +10,6 @@ Err bitreich.org 70 i Err bitreich.org 70 i char *arg0; Err bitreich.org 70 i Err bitreich.org 70 i-/** logging **/ Err bitreich.org 70 i- Err bitreich.org 70 i static void Err bitreich.org 70 i _log(char const *fmt, va_list va) Err bitreich.org 70 i { Err bitreich.org 70 i@@ -54,8 +53,6 @@ debug(char const *fmt, ...) Err bitreich.org 70 i _log(fmt, va); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i-/** strings **/ Err bitreich.org 70 i- Err bitreich.org 70 i size_t Err bitreich.org 70 i strlcpy(char *d, char const *s, size_t sz) Err bitreich.org 70 i { Err bitreich.org 70 i@@ -137,7 +134,35 @@ strsplit(char *s, char **array, size_t len, char const *sep) Err bitreich.org 70 i return i; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i-/** memory **/ Err bitreich.org 70 i+long long Err bitreich.org 70 i+strtonum(char const *s, long long min, long long max, char const **errstr) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ long long ll = 0; Err bitreich.org 70 i+ char *end; Err bitreich.org 70 i+ Err bitreich.org 70 i+ assert(min < max); Err bitreich.org 70 i+ errno = 0; Err bitreich.org 70 i+ ll = strtoll(s, &end, 10); Err bitreich.org 70 i+ if ((errno == ERANGE && ll == LLONG_MIN) || ll < min) { Err bitreich.org 70 i+ if (errstr != NULL) Err bitreich.org 70 i+ *errstr = "too small"; Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ if ((errno == ERANGE && ll == LLONG_MAX) || ll > max) { Err bitreich.org 70 i+ if (errstr != NULL) Err bitreich.org 70 i+ *errstr = "too large"; Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ if (errno == EINVAL || *end != '\0') { Err bitreich.org 70 i+ if (errstr != NULL) Err bitreich.org 70 i+ *errstr = "invalid"; Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ assert(errno == 0); Err bitreich.org 70 i+ if (errstr != NULL) Err bitreich.org 70 i+ *errstr = NULL; Err bitreich.org 70 i+ return ll; Err bitreich.org 70 i+} Err bitreich.org 70 i Err bitreich.org 70 i void * Err bitreich.org 70 i reallocarray(void *mem, size_t n, size_t sz) Err bitreich.org 70 i@@ -147,8 +172,6 @@ reallocarray(void *mem, size_t n, size_t sz) Err bitreich.org 70 i return realloc(mem, n * sz); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i-/** time **/ Err bitreich.org 70 i- Err bitreich.org 70 i time_t Err bitreich.org 70 i tztime(struct tm *tm, char const *tz) Err bitreich.org 70 i { Err bitreich.org 70 1diff --git a/util.h b/util.h /scm/ics2txt/file/util.h.gph bitreich.org 70 i@@ -8,13 +8,11 @@ Err bitreich.org 70 i Err bitreich.org 70 i #define LEN(x) (sizeof (x) / sizeof *(x)) Err bitreich.org 70 i Err bitreich.org 70 i-/** logging **/ Err bitreich.org 70 i extern char *arg0; Err bitreich.org 70 i+ Err bitreich.org 70 i void err(int, char const *fmt, ...); Err bitreich.org 70 i void warn(char const *fmt, ...); Err bitreich.org 70 i void debug(char const *fmt, ...); Err bitreich.org 70 i- Err bitreich.org 70 i-/** strings **/ Err bitreich.org 70 i size_t strlcpy(char *, char const *, size_t); Err bitreich.org 70 i char *strsep(char **, char const *); Err bitreich.org 70 i void strchomp(char *); Err bitreich.org 70 i@@ -22,11 +20,7 @@ char *strappend(char **, char const *); Err bitreich.org 70 i size_t strlcat(char *, char const *, size_t); Err bitreich.org 70 i long long strtonum(const char *, long long, long long, const char **); Err bitreich.org 70 i size_t strsplit(char *, char **, size_t, char const *); Err bitreich.org 70 i- Err bitreich.org 70 i-/** memory **/ Err bitreich.org 70 i void *reallocarray(void *, size_t, size_t); Err bitreich.org 70 i- Err bitreich.org 70 i-/** time **/ Err bitreich.org 70 i time_t tztime(struct tm *, char const *); Err bitreich.org 70 i Err bitreich.org 70 i #endif Err bitreich.org 70 .