]> granicus.if.org Git - sudo/commitdiff
Add strnlen() replacement needed for glob.c.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 26 May 2015 19:55:18 +0000 (13:55 -0600)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Tue, 26 May 2015 19:55:18 +0000 (13:55 -0600)
Only used if no glob() and no strnlen().

MANIFEST
config.h.in
configure
configure.ac
include/sudo_compat.h
lib/util/strnlen.c [new file with mode: 0644]

index 99ff97ecab7b9adfe033170906652c8e923be12a..0dab8eaeb5745a49e0d58902d7977861bfc76b38 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -159,6 +159,7 @@ lib/util/siglist.in
 lib/util/snprintf.c
 lib/util/strlcat.c
 lib/util/strlcpy.c
+lib/util/strnlen.c
 lib/util/strsignal.c
 lib/util/strtobool.c
 lib/util/strtoid.c
index dd5590ee01901258b71702aa6487dedbd8b36f67..5114d28305a9f20d3d66c2bc42580892a5b4e379 100644 (file)
 /* Define to 1 if you have the `strlcpy' function. */
 #undef HAVE_STRLCPY
 
+/* Define to 1 if you have the `strnlen' function. */
+#undef HAVE_STRNLEN
+
 /* Define to 1 if you have the `strsignal' function. */
 #undef HAVE_STRSIGNAL
 
index c14828b598ecc8d9a99c61886bcc17d9fb6e1713..41174242c4ad09dc583053ba6dbb285cbf40b18b 100755 (executable)
--- a/configure
+++ b/configure
@@ -18930,6 +18930,32 @@ esac
 "
     done
 
+    for ac_func in strnlen
+do :
+  ac_fn_c_check_func "$LINENO" "strnlen" "ac_cv_func_strnlen"
+if test "x$ac_cv_func_strnlen" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STRNLEN 1
+_ACEOF
+
+else
+
+       case " $LIBOBJS " in
+  *" strnlen.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strnlen.$ac_objext"
+ ;;
+esac
+
+
+    for _sym in sudo_strnlen; do
+       COMPAT_EXP="${COMPAT_EXP}${_sym}
+"
+    done
+
+
+fi
+done
+
 
 fi
 done
index ab879c116841d73b8d9bd4161b401bc4ab14764a..09ec9154302de9b588448ef570205cbb36c6c55e 100644 (file)
@@ -2574,6 +2574,10 @@ SUDO_FUNC_ISBLANK
 AC_CHECK_FUNCS([glob], [], [
     AC_LIBOBJ(glob)
     SUDO_APPEND_COMPAT_EXP(sudo_glob sudo_globfree)
+    AC_CHECK_FUNCS([strnlen], [], [
+       AC_LIBOBJ(strnlen)
+       SUDO_APPEND_COMPAT_EXP(sudo_strnlen)
+    ])
 ])
 AC_CHECK_FUNCS([memrchr], [], [
     AC_LIBOBJ(memrchr)
index 7f9aae68aad44052dbce5ab28fdf4812a14211a8..2efa5a7ca2e32b2ef21e5afa398c8cc8ae19b56f 100644 (file)
@@ -431,6 +431,11 @@ __dso_public size_t sudo_strlcpy(char *dst, const char *src, size_t siz);
 # undef strlcpy
 # define strlcpy(_a, _b, _c) sudo_strlcpy((_a), (_b), (_c))
 #endif /* HAVE_STRLCPY */
+#if !defined(HAVE_GLOB) && !defined(HAVE_STRNLEN)
+__dso_public size_t sudo_strnlen(char *str, size_t maxlen);
+# undef strnlen
+# define strnlen(_a, _b) sudo_strnlen((_a), (_b))
+#endif /* !HAVE_GLOB && !HAVE_STRNLEN */
 #ifndef HAVE_MEMRCHR
 __dso_public void *sudo_memrchr(const void *s, int c, size_t n);
 # undef memrchr
diff --git a/lib/util/strnlen.c b/lib/util/strnlen.c
new file mode 100644 (file)
index 0000000..1502ad0
--- /dev/null
@@ -0,0 +1,36 @@
+/*     $OpenBSD: strnlen.c,v 1.5 2014/06/10 04:17:37 deraadt Exp $     */
+
+/*
+ * Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com>
+ *
+ * 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 <config.h>
+
+#ifndef HAVE_STRNLEN
+
+#include <sys/types.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);
+}
+
+#endif /* HAVE_STRNLEN */