]> granicus.if.org Git - zziplib/commitdiff
implement makedirs for zzip_extract examples
authorGuido Draheim <guidod@gmx.de>
Mon, 24 Apr 2017 21:12:38 +0000 (23:12 +0200)
committerGuido Draheim <guidod@gmx.de>
Mon, 24 Apr 2017 21:12:38 +0000 (23:12 +0200)
bins/unzzipcat-big.c
bins/unzzipcat-mem.c
bins/unzzipcat-mix.c
bins/unzzipcat-zip.c

index 6f18e5f7741a1cd204294db02ecea6c21527134e..d2df75b26332ececdcdfac5fbb51ee13a4cd8ca9 100644 (file)
@@ -8,6 +8,7 @@
 #include <zzip/fseeko.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/stat.h>
 #include "unzzipcat-zip.h"
 
 #ifdef ZZIP_HAVE_FNMATCH_H
@@ -62,6 +63,18 @@ static void unzzip_cat_file(FILE* disk, char* name, FILE* out)
     }
 }
 
+static void makedirs(const char* name)
+{
+      char* p = strrchr(name, '/');
+      if (p) {
+          char* dir_name = strndup(name, p-name);
+          makedirs(dir_name);
+          free (dir_name);
+      } else {
+          mkdir(name, 775);
+          errno = 0;
+      }
+}
 
 static FILE* create_fopen(char* name, char* mode, int subdirs)
 {
@@ -70,7 +83,7 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
       char* p = strrchr(name, '/');
       if (p) {
           char* dir_name = strndup(name, p-name);
-          // makedirs(dir_name); // TODO
+          makedirs(dir_name); 
           free (dir_name);
       }
    }
index c7abd51eaee906b91cb18926e763323e64915ff7..34d369f5156b76e6fd3fa9da2d623983278dcbba 100644 (file)
@@ -9,6 +9,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/stat.h>
 #include "unzzipcat-zip.h"
 
 #ifdef ZZIP_HAVE_UNISTD_H
@@ -57,6 +58,19 @@ static void unzzip_mem_disk_cat_file(ZZIP_MEM_DISK* disk, char* name, FILE* out)
     }
 }
 
+static void makedirs(const char* name)
+{
+      char* p = strrchr(name, '/');
+      if (p) {
+          char* dir_name = strndup(name, p-name);
+          makedirs(dir_name);
+          free (dir_name);
+      } else {
+          mkdir(name, 775);
+          errno = 0;
+      }
+}
+
 static FILE* create_fopen(char* name, char* mode, int subdirs)
 {
    if (subdirs)
@@ -64,14 +78,13 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
       char* p = strrchr(name, '/');
       if (p) {
           char* dir_name = strndup(name, p-name);
-          // makedirs(dir_name); // TODO
+          makedirs(dir_name); 
           free (dir_name);
       }
    }
    return fopen(name, mode);      
 }
 
-
 static int unzzip_cat (int argc, char ** argv, int extract)
 {
     int argn;
index 0611e8078fc6c74f650e5d1fd13ad2b06dbef84c..9d06ca284f3de69792d3d67dcefa933ed3ecf963 100644 (file)
@@ -9,6 +9,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/stat.h>
 #include "unzzipcat-zip.h"
 
 #ifdef ZZIP_HAVE_UNISTD_H
@@ -43,6 +44,19 @@ static void unzzip_cat_file(ZZIP_DIR* disk, char* name, FILE* out)
     }
 }
 
+static void makedirs(const char* name)
+{
+      char* p = strrchr(name, '/');
+      if (p) {
+          char* dir_name = strndup(name, p-name);
+          makedirs(dir_name);
+          free (dir_name);
+      } else {
+          mkdir(name, 775);
+          errno = 0;
+      }
+}
+
 static FILE* create_fopen(char* name, char* mode, int subdirs)
 {
    if (subdirs)
@@ -50,14 +64,13 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
       char* p = strrchr(name, '/');
       if (p) {
           char* dir_name = strndup(name, p-name);
-          // makedirs(dir_name); // TODO
+          makedirs(dir_name); 
           free (dir_name);
       }
    }
    return fopen(name, mode);      
 }
 
-
 static int unzzip_cat (int argc, char ** argv, int extract)
 {
     int argn;
index cc546e2e8f0f12892b4f78ef240086661b2ef4b3..216fabb7729bcdf02f9f7feabe9edc49c75a1535 100644 (file)
@@ -9,6 +9,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/stat.h>
 #include "unzzipcat-zip.h"
 
 #ifdef ZZIP_HAVE_UNISTD_H
@@ -43,6 +44,19 @@ static void unzzip_cat_file(ZZIP_DIR* disk, char* name, FILE* out)
     }
 }
 
+static void makedirs(const char* name)
+{
+      char* p = strrchr(name, '/');
+      if (p) {
+          char* dir_name = strndup(name, p-name);
+          makedirs(dir_name);
+          free (dir_name);
+      } else {
+          mkdir(name, 775);
+          errno = 0;
+      }
+}
+
 static FILE* create_fopen(char* name, char* mode, int subdirs)
 {
    if (subdirs)
@@ -50,14 +64,13 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
       char* p = strrchr(name, '/');
       if (p) {
           char* dir_name = strndup(name, p-name);
-          // makedirs(dir_name); // TODO
+          makedirs(dir_name); 
           free (dir_name);
       }
    }
    return fopen(name, mode);      
 }
 
-
 static int unzzip_cat (int argc, char ** argv, int extract)
 {
     int argn;