| tput compatibility functions into separate files - numtools - perform numerical… | |
| git clone git://src.adamsgaard.dk/numtools | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit a1fa37b0737ca364df053cf246891c4fe723670a | |
| parent e710d47a98ac2003a535a8663584b7fc659b9051 | |
| Author: Anders Damsgaard <[email protected]> | |
| Date: Tue, 31 Aug 2021 11:25:26 +0200 | |
| put compatibility functions into separate files | |
| Diffstat: | |
| M Makefile | 21 ++++++++++++++------- | |
| M rangetest.c | 27 ++------------------------- | |
| A strlcpy.c | 50 +++++++++++++++++++++++++++++… | |
| A strnlen.c | 32 +++++++++++++++++++++++++++++… | |
| A util.h | 17 +++++++++++++++++ | |
| 5 files changed, 115 insertions(+), 32 deletions(-) | |
| --- | |
| diff --git a/Makefile b/Makefile | |
| t@@ -21,14 +21,22 @@ BIN =\ | |
| SRC = ${BIN:=.c} | |
| +COMPATSRC =\ | |
| + strnlen.c\ | |
| + strlcpy.c\ | |
| + | |
| +COMPATOBJ = ${COMPATSRC:.c=.o} | |
| + | |
| HDR =\ | |
| arg.h\ | |
| + util.h\ | |
| +LIB = ${COMPATOBJ} | |
| LIBS = -lm | |
| _CFLAGS = ${CFLAGS} ${INCS} -DVERSION=\"${VERSION}\" | |
| _LDFLAGS = ${LDFLAGS} ${LIBS} | |
| -_CPPFLAGS = ${CPPFLAGS} | |
| +_CPPFLAGS = ${CPPFLAGS} -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700 -D_BSD_SOURCE | |
| MAN1 = ${BIN:=.1} ${SCRIPTS:=.1} | |
| DOC =\ | |
| t@@ -37,19 +45,18 @@ DOC =\ | |
| all: ${BIN} | |
| -${BIN}: ${@:=.o} | |
| +${BIN}: ${LIB} ${@:=.o} | |
| -OBJ = ${SRC:.c=.o} | |
| +OBJ = ${SRC:.c=.o} ${COMPATOBJ} | |
| ${OBJ}: ${HDR} | |
| .o: | |
| - ${CC} -o $@ $< ${_LDFLAGS} | |
| + ${CC} -o $@ $< ${_LDFLAGS} ${LIB} | |
| .c.o: | |
| ${CC} ${_CFLAGS} ${_CPPFLAGS} -o $@ -c $< | |
| - | |
| install: | |
| # installing executable files and scripts. | |
| mkdir -p "${DESTDIR}${PREFIX}/bin" | |
| t@@ -76,13 +83,13 @@ uninstall: | |
| dist: | |
| rm -rf "${NAME}-${VERSION}" | |
| mkdir -p "${NAME}-${VERSION}" | |
| - cp -rf ${MAN1} ${DOC} ${BIN} ${SCRIPTS} "${NAME}-${VERSION}" | |
| + cp -rf ${MAN1} ${DOC} ${SRC} ${COMPATSRC} ${SCRIPTS} "${NAME}-${VERSIO… | |
| # make tarball | |
| tar cf - "${NAME}-${VERSION}" | \ | |
| gzip -c > "${NAME}-${VERSION}.tar.gz" | |
| rm -rf "${NAME}-${VERSION}" | |
| clean: | |
| - rm -f ${BIN} ${OBJ} | |
| + rm -f ${BIN} ${OBJ} ${LIB} | |
| .PHONY: install uninstall dist clean | |
| diff --git a/rangetest.c b/rangetest.c | |
| t@@ -5,35 +5,12 @@ | |
| #include <string.h> | |
| #include "arg.h" | |
| +#include "util.h" | |
| #define VALUESTR "@VAL@" | |
| char *argv0; | |
| -#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 */ | |
| - | |
| static void | |
| usage(void) | |
| { | |
| t@@ -66,7 +43,7 @@ static void | |
| binary_search(char *cmd, char *cmd0, double minv, double maxv, int maxiter) | |
| { | |
| int minfail, maxfail; | |
| - int iter; | |
| + int iter = 0; | |
| double val; | |
| minfail = launch(cmd, cmd0, minv); | |
| diff --git a/strlcpy.c b/strlcpy.c | |
| t@@ -0,0 +1,50 @@ | |
| +/* $OpenBSD: strlcpy.c,v 1.16 2019/01/25 00:19:25 millert Exp $ … | |
| + | |
| +/* | |
| + * Copyright (c) 1998, 2015 Todd C. Miller <[email protected]> | |
| + * | |
| + * 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 */ | |
| +} | |
| diff --git a/strnlen.c b/strnlen.c | |
| t@@ -0,0 +1,32 @@ | |
| +/* $OpenBSD: strnlen.c,v 1.9 2019/01/25 00:19:25 millert Exp $ */ | |
| + | |
| +/* | |
| + * Copyright (c) 2010 Todd C. Miller <[email protected]> | |
| + * | |
| + * 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> | |
| + | |
| +size_t | |
| +strnlen(const char *str, size_t maxlen) | |
| +{ | |
| + const char *cp; | |
| + | |
| + for (cp = str; maxlen != 0 && *cp != '\0'; cp++, maxlen--) | |
| + ; | |
| + | |
| + return (size_t)(cp - str); | |
| +} | |
| diff --git a/util.h b/util.h | |
| t@@ -0,0 +1,17 @@ | |
| +#ifndef UTIL_H_ | |
| +#define UTIL_H_ | |
| + | |
| +#ifdef __OpenBSD__ | |
| +#include <unistd.h> | |
| +#else | |
| +#define pledge(p1, p2) 0 | |
| +#define unveil(p1, p2) 0 | |
| +#endif | |
| + | |
| +#undef strlcpy | |
| +size_t strlcpy(char *dst, const char *src, size_t dsize); | |
| + | |
| +#undef strnlen | |
| +size_t strnlen(const char *str, size_t maxlen); | |
| + | |
| +#endif |