]> granicus.if.org Git - zziplib/commitdiff
move _zzip_strndup to new zzip/__string.h and use it in bins/*.c
authorGuido Draheim <guidod@gmx.de>
Sun, 11 Jun 2017 23:56:26 +0000 (01:56 +0200)
committerGuido Draheim <guidod@gmx.de>
Sun, 11 Jun 2017 23:56:26 +0000 (01:56 +0200)
bins/unzzipcat-big.c
bins/unzzipcat-mem.c
bins/unzzipcat-mix.c
bins/unzzipcat-zip.c
zzip/Makefile.am
zzip/Makefile.in
zzip/__string.h [new file with mode: 0644]
zzip/mmapped.c

index 1ce0610e819c575a8f17dd36768b63151e92fbe8..5b004763854ae30bc018cd7ad196bc4a5770f135 100644 (file)
@@ -9,6 +9,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/stat.h>
+#include <zzip/__string.h>
 #include <zzip/__debug.h>
 #include "unzzipcat-zip.h"
 
@@ -54,7 +55,7 @@ static void makedirs(const char* name)
 {
       char* p = strrchr(name, '/');
       if (p) {
-          char* dir_name = strndup(name, p-name);
+          char* dir_name = _zzip_strndup(name, p-name);
           makedirs(dir_name);
           free (dir_name);
       } else {
@@ -69,7 +70,7 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
    {
       char* p = strrchr(name, '/');
       if (p) {
-          char* dir_name = strndup(name, p-name);
+          char* dir_name = _zzip_strndup(name, p-name);
           makedirs(dir_name); 
           free (dir_name);
       }
index d89153921d266c117246496be9ac673390cf2b05..3f30e8dc8c725243f91a66d826e742fbcc285f30 100644 (file)
@@ -10,6 +10,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/stat.h>
+#include <zzip/__string.h>
 #include "unzzipcat-zip.h"
 
 #ifdef ZZIP_HAVE_UNISTD_H
@@ -58,7 +59,7 @@ static void makedirs(const char* name)
 {
       char* p = strrchr(name, '/');
       if (p) {
-          char* dir_name = strndup(name, p-name);
+          char* dir_name = _zzip_strndup(name, p-name);
           makedirs(dir_name);
           free (dir_name);
       } else {
@@ -73,7 +74,7 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
    {
       char* p = strrchr(name, '/');
       if (p) {
-          char* dir_name = strndup(name, p-name);
+          char* dir_name = _zzip_strndup(name, p-name);
           makedirs(dir_name); 
           free (dir_name);
       }
index 071b50ccbdbc8464b4a88a6827cd64ce7e790223..fde678477cf5f55d739905965aa3cdbaa016747a 100644 (file)
@@ -10,6 +10,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/stat.h>
+#include <zzip/__string.h>
 #include "unzzipcat-zip.h"
 
 #ifdef ZZIP_HAVE_UNISTD_H
@@ -44,7 +45,7 @@ static void makedirs(const char* name)
 {
       char* p = strrchr(name, '/');
       if (p) {
-          char* dir_name = strndup(name, p-name);
+          char* dir_name = _zzip_strndup(name, p-name);
           makedirs(dir_name);
           free (dir_name);
       } else {
@@ -59,7 +60,7 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
    {
       char* p = strrchr(name, '/');
       if (p) {
-          char* dir_name = strndup(name, p-name);
+          char* dir_name = _zzip_strndup(name, p-name);
           makedirs(dir_name); 
           free (dir_name);
       }
index dd04ac141cd38998522394f235597e420162f777..9ad9fcbdc7e85f2964953049d3d2de88d80a9ba2 100644 (file)
@@ -10,6 +10,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/stat.h>
+#include <zzip/__string.h>
 #include "unzzipcat-zip.h"
 
 #ifdef ZZIP_HAVE_UNISTD_H
@@ -44,7 +45,7 @@ static void makedirs(const char* name)
 {
       char* p = strrchr(name, '/');
       if (p) {
-          char* dir_name = strndup(name, p-name);
+          char* dir_name = _zzip_strndup(name, p-name);
           makedirs(dir_name);
           free (dir_name);
       } else {
@@ -59,7 +60,7 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
    {
       char* p = strrchr(name, '/');
       if (p) {
-          char* dir_name = strndup(name, p-name);
+          char* dir_name = _zzip_strndup(name, p-name);
           makedirs(dir_name); 
           free (dir_name);
       }
index 0319cc80fa5d3ea32df60bc271e4fcd9b9faef57..db75a75f9eefe34f99193367a1f8eca1d62f592e 100644 (file)
@@ -8,7 +8,7 @@ zzipdir = ${includedir}/zzip
 zzip_HEADERS = $(libzzip_la_headers) \
                $(libzzipmmapped_la_headers) \
                $(libzzipfseeko_la_headers)
-noinst_HEADERS = __debug.h __hints.h __mmap.h __dirent.h __fnmatch.h
+noinst_HEADERS = __debug.h __hints.h __mmap.h __dirent.h __fnmatch.h __string.h
 #
 VERSION_INFO=@VERSION_INFO@
 RELEASE_INFO=@RELEASE_INFO@
index 03ee59755cfc927c67e1f4d4b536c82335403cfa..b4b74ad2d85a5e880042139b6c4942af1d837fff 100644 (file)
@@ -397,7 +397,7 @@ zzip_HEADERS = $(libzzip_la_headers) \
                $(libzzipmmapped_la_headers) \
                $(libzzipfseeko_la_headers)
 
-noinst_HEADERS = __debug.h __hints.h __mmap.h __dirent.h __fnmatch.h
+noinst_HEADERS = __debug.h __hints.h __mmap.h __dirent.h __fnmatch.h __string.h
 #
 libzzip_la_SOURCES = \
        zip.c \
diff --git a/zzip/__string.h b/zzip/__string.h
new file mode 100644 (file)
index 0000000..351b0c1
--- /dev/null
@@ -0,0 +1,67 @@
+#ifndef __ZZIP_INTERNAL_STRING_H
+#define __ZZIP_INTERNAL_STRING_H
+
+#ifdef __linux__
+#define _GNU_SOURCE _glibc_developers_are_idiots_to_call_strndup_gnu_specific_
+#endif
+
+#include <zzip/conf.h>
+
+#if   defined ZZIP_HAVE_STRING_H
+#include <string.h>
+#elif defined ZZIP_HAVE_STRINGS_H
+#include <strings.h>
+#endif
+
+
+#if defined ZZIP_HAVE_STRNDUP || defined strndup
+#define _zzip_strndup strndup
+#else
+
+/* if your system does not have strndup: */
+zzip__new__ static char *
+_zzip_strndup(char const *p, size_t maxlen)
+{
+    if (p == NULL)
+    {
+       return p;
+    } else 
+    {
+        size_t len = strnlen(p, maxlen);
+        char* r = malloc(len + 1);
+        if (r == NULL)
+            return NULL; /* errno = ENOMEM */
+        r[len] = '\0';
+        return memcpy(r, p, len);
+    }
+}
+#endif
+
+#if defined ZZIP_HAVE_STRCASECMP || defined strcasecmp
+#define _zzip_strcasecmp strcasecmp
+#else
+
+/* if your system does not have strcasecmp: */
+static int
+_zzip_strcasecmp(char *__zzip_restrict a, char *_zzip_restrict b)
+{
+    if (! a)
+        return (b) ? 1 : 0;
+    if (! b)
+        return -1;
+    while (1)
+    {
+        int v = tolower(*a) - tolower(*b);
+        if (v)
+            return v;
+        if (! *a)
+            return 1;
+        if (! *b)
+            return -1;
+        a++;
+        b++;
+    }
+}
+#endif
+
+#endif
index 87d76a1338cd46e1821c65a3429a4ac703a8fcd3..6276e1ac1b4a5302f48731b9d8c46bec1e80efee 100644 (file)
@@ -33,6 +33,7 @@
 #include <zzip/__debug.h>
 #include <zzip/__mmap.h>
 #include <zzip/__fnmatch.h>
+#include <zzip/__string.h>
 
 #include <stdlib.h>
 #include <sys/stat.h>
@@ -230,55 +231,8 @@ zzip_disk_close(ZZIP_DISK * disk)
 }
 
 /* ====================================================================== */
-
 /*                      helper functions                                  */
 
-#ifdef ZZIP_HAVE_STRNDUP
-#define _zzip_strndup strndup
-#else
-
-/* if your system does not have strndup: */
-zzip__new__ static char *
-_zzip_strndup(char *p, size_t maxlen)
-{
-    if (! p)
-        return 0;
-    ___ zzip_byte_t *r = malloc(maxlen + 1);
-    if (! r)
-        return r;
-    strncpy(r, p, maxlen);
-    r[maxlen] = '\0';
-    return r;
-    ____;
-}
-#endif
-
-#if defined ZZIP_HAVE_STRCASECMP || defined strcasecmp
-#define _zzip_strcasecmp strcasecmp
-#else
-
-/* if your system does not have strcasecmp: */
-static int
-_zzip_strcasecmp(char *__zzip_restrict a, char *_zzip_restrict b)
-{
-    if (! a)
-        return (b) ? 1 : 0;
-    if (! b)
-        return -1;
-    while (1)
-    {
-        int v = tolower(*a) - tolower(*b);
-        if (v)
-            return v;
-        if (! *a)
-            return 1;
-        if (! *b)
-            return -1;
-        a++;
-        b++;
-    }
-}
-#endif
 
 /** helper functions for (mmapped) zip access api
  *