]> git.lyx.org Git - features.git/commitdiff
zipunzip.cpp: Replace makedir etc with versions in support::FileName, fix a bug in...
authorBo Peng <bpeng@lyx.org>
Sat, 5 Jan 2008 04:39:01 +0000 (04:39 +0000)
committerBo Peng <bpeng@lyx.org>
Sat, 5 Jan 2008 04:39:01 +0000 (04:39 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22373 a592a061-630c-0410-9148-cb99ea01b6c8

src/support/minizip/zipunzip.cpp

index e6307a2cb02f549c448d996ae22f57a22b90eace..2c69453e6a7f8b1367104573c20d8bc212417f35 100644 (file)
@@ -55,6 +55,7 @@
 #include <string>
 #include <vector>
 #include <utility>
+#include "support/FileName.h"
 
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>
@@ -90,7 +91,8 @@
 #define WRITEBUFFERSIZE (16384)
 #define MAXFILENAME (256)
 
-using namespace std;\r
+using namespace std;
+using lyx::support::FileName;
 
 
 #ifdef WIN32
@@ -264,70 +266,6 @@ bool zipFiles(string const & zipfile, vector<pair<string, string> > const & file
 
 // adapted from miniunz.c
 
-
-int mymkdir(char const * pathname, unsigned long int mode)
-{
-#if HAVE_MKDIR
-# if MKDIR_TAKES_ONE_ARG
-       // MinGW32
-       return ::mkdir(pathname);
-# else
-       // POSIX
-       return ::mkdir(pathname, mode_t(mode));
-# endif
-#elif defined(_WIN32)
-       // plain Windows 32
-       return CreateDirectory(pathname, 0) != 0 ? 0 : -1;
-#elif HAVE__MKDIR
-       return ::_mkdir(pathname);
-#else
-#   error "Don't know how to create a directory on this system."
-#endif
-}
-
-
-int makedir(char * newdir)
-{
-       char *buffer;
-       char *p;
-       int     len = (int)strlen(newdir);
-       int mode = 0775;
-
-       if (len <= 0)
-               return 1;
-
-       buffer = (char*)malloc(len+1);
-       strcpy(buffer,newdir);
-
-       if (buffer[len-1] == '/')
-               buffer[len-1] = '\0';
-       if (mymkdir(buffer, mode) == 0) {
-               free(buffer);
-               return 0;
-       }
-
-       p = buffer + 1;
-       while (1) {
-               char hold;
-
-               while(*p && *p != '\\' && *p != '/')
-                       p++;
-               hold = *p;
-               *p = 0;
-               if (mymkdir(buffer, mode) != 0) {
-                       printf("couldn't create directory %s\n",buffer);
-                       free(buffer);
-                       return 1;
-               }
-               if (hold == 0)
-                       break;
-               *p++ = hold;
-       }
-       free(buffer);
-       return 0;
-}
-
-
 /* change_file_date : change the date/time of a file
        filename : the filename of the file where date/time must be modified
        dosdate : the new date at the MSDos format (4 bytes)
@@ -374,7 +312,8 @@ int do_extract_currentfile(unzFile uf,
        const char * password,
        const char * dirname)
 {
-       char filename_inzip[256];
+       char full_path[1024];
+       char* filename_inzip = full_path;
        char* filename_withoutpath;
        char* p;
        int err=UNZ_OK;
@@ -382,9 +321,16 @@ int do_extract_currentfile(unzFile uf,
        void* buf;
        uInt size_buf;
 
+       strcpy(full_path, dirname);
+       while ((*filename_inzip) != '\0') filename_inzip++;
+       if (*(filename_inzip-1) != '/' && *(filename_inzip-1) != '\\') {
+               *filename_inzip = '/';
+               *(++filename_inzip) = '\0';
+       }
+
        unz_file_info file_info;
        //uLong ratio=0;
-       err = unzGetCurrentFileInfo(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
+       err = unzGetCurrentFileInfo(uf,&file_info,filename_inzip,256,NULL,0,NULL,0);
 
        if (err!=UNZ_OK) {
                printf("error %d with zipfile in unzGetCurrentFileInfo\n",err);
@@ -406,42 +352,32 @@ int do_extract_currentfile(unzFile uf,
        }
        // this is a directory
        if ((*filename_withoutpath)=='\0') {
-               if ((*popt_extract_without_path)==0)
-                       makedir(filename_inzip);
+               if ((*popt_extract_without_path)==0) {
+                       printf("Create directory %s\n", filename_inzip);
+                       FileName(filename_inzip).createPath();
+               }
        }
        // this is a filename
        else {
-               char write_filename[1024];
-
-               strcpy(write_filename, dirname);
-               int len = strlen(write_filename);
-               if (write_filename[len-1] != '\\' &&
-                       write_filename[len-1] != '/')
-                       strcat(write_filename, "/");
-
-               if ((*popt_extract_without_path)==0)
-                       strcat(write_filename, filename_inzip);
-               else
-                       strcat(write_filename, filename_withoutpath);
-
                err = unzOpenCurrentFilePassword(uf,password);
                if (err!=UNZ_OK) {
                        printf("error %d with zipfile in unzOpenCurrentFilePassword\n",err);
                } else {
-                       fout=fopen(write_filename, "wb");
+                       fout=fopen(full_path, "wb");
 
                        /* some zipfile don't contain directory alone before file */
                        if ((fout==NULL) && ((*popt_extract_without_path)==0) &&
                                (filename_withoutpath!=(char*)filename_inzip)) {
                                char c=*(filename_withoutpath-1);
                                *(filename_withoutpath-1)='\0';
-                               makedir(write_filename);
+                               printf("Create directory %s\n", full_path);
+                               FileName(full_path).createPath();
                                *(filename_withoutpath-1)=c;
-                               fout=fopen(write_filename,"wb");
+                               fout=fopen(full_path,"wb");
                        }
 
                        if (fout==NULL) {
-                               printf("error opening %s\n",write_filename);
+                               printf("error opening %s\n", full_path);
                        }
                }
 
@@ -464,7 +400,7 @@ int do_extract_currentfile(unzFile uf,
                                fclose(fout);
 
                        if (err==0)
-                               change_file_date(write_filename,file_info.dosDate,
+                               change_file_date(full_path, file_info.dosDate,
                                        file_info.tmu_date);
                }