The following commit has been merged in the master branch:
commit 514b67de00c11709b8103d80b7e2cd18e786c69f
Author: Guillem Jover <[email protected]>
Date:   Fri Nov 11 05:10:20 2011 +0100

    libcompat: Add new strndup()

diff --git a/configure.ac b/configure.ac
index 6dd5529..7edcd26 100644
--- a/configure.ac
+++ b/configure.ac
@@ -86,7 +86,7 @@ DPKG_CHECK_DECL([WCOREDUMP], [sys/wait.h])
 DPKG_CHECK_DECL([TIOCNOTTY], [sys/ioctl.h])
 DPKG_CHECK_PROGNAME
 DPKG_CHECK_COMPAT_FUNCS([getopt getopt_long obstack_free \
-                         strnlen strerror strsignal asprintf \
+                         strnlen strndup strerror strsignal asprintf \
                          scandir alphasort unsetenv])
 AC_CHECK_DECLS([strnlen], [[#include <string.h>]])
 AC_CHECK_FUNCS([memcpy lchown],
diff --git a/lib/compat/Makefile.am b/lib/compat/Makefile.am
index cb3224a..33da1bd 100644
--- a/lib/compat/Makefile.am
+++ b/lib/compat/Makefile.am
@@ -28,6 +28,10 @@ if !HAVE_STRNLEN
 libcompat_a_SOURCES += strnlen.c strnlen.h
 endif
 
+if !HAVE_STRNDUP
+libcompat_a_SOURCES += strndup.c
+endif
+
 if !HAVE_STRERROR
 libcompat_a_SOURCES += strerror.c
 endif
diff --git a/lib/compat/compat.h b/lib/compat/compat.h
index daf9cc7..4086bdd 100644
--- a/lib/compat/compat.h
+++ b/lib/compat/compat.h
@@ -64,6 +64,13 @@ int asprintf(char *str, char const *fmt, ...);
 int vasprintf(char *str, const char *fmt, va_list args);
 #endif
 
+#ifndef HAVE_STRNDUP
+#include <stddef.h>
+
+#undef strndup
+char *strndup(const char *s, size_t n);
+#endif
+
 #ifndef HAVE_STRERROR
 const char *strerror(int);
 #endif
diff --git a/lib/compat/unsetenv.c b/lib/compat/strndup.c
similarity index 71%
copy from lib/compat/unsetenv.c
copy to lib/compat/strndup.c
index 7551629..2159a46 100644
--- a/lib/compat/unsetenv.c
+++ b/lib/compat/strndup.c
@@ -1,7 +1,7 @@
 /*
  * libcompat - system compatibility library
  *
- * Copyright © 1995 Ian Jackson <[email protected]>
+ * Copyright © 2011 Guillem Jover <[email protected]>
  *
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -18,22 +18,28 @@
  */
 
 #include <config.h>
+#include <compat.h>
 
 #include <string.h>
 #include <stdlib.h>
 
-#ifndef HAVE_UNSETENV
-int
-unsetenv(const char *p)
+#ifndef HAVE_STRNDUP
+#undef strndup
+
+char *
+strndup(const char *s, size_t n)
 {
-       char *q;
+       size_t len;
+       char *str;
+
+       len = strnlen(s, n);
+       str = malloc(len + 1);
+       if (str == NULL)
+               return NULL;
 
-       q = malloc(strlen(p) + 3);
-       if (!q)
-               return -1;
+       memcpy(str, s, len);
+       str[len] = '\0';
 
-       strcpy(q, p);
-       strcat(q, "=");
-       return putenv(q);
+       return str;
 }
 #endif

-- 
dpkg's main repository


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Reply via email to