]> git.lyx.org Git - lyx.git/blobdiff - src/support/mkdir.cpp
Introduce FileName::changePermission() and fix ConverterCache.
[lyx.git] / src / support / mkdir.cpp
index 410c05722b6e7d3ffe0c8752749760d493311140..d96dca007b7ab310a7dad92256fe2b82fbb810ed 100644 (file)
@@ -11,6 +11,7 @@
 #include <config.h>
 
 #include "support/lyxlib.h"
+#include "support/debug.h"
 #include "support/FileName.h"
 
 #ifdef HAVE_SYS_STAT_H
@@ -34,28 +35,76 @@ namespace lyx {
 namespace support {
 
 
-int mkdir(FileName const & pathname, unsigned long int mode)
+int mymkdir(char const * pathname, unsigned long int mode)
 {
+       LYXERR0("MKDIR" << pathname);
        // FIXME: why don't we have mode_t in lyx::mkdir prototype ??
 #if HAVE_MKDIR
 # if MKDIR_TAKES_ONE_ARG
        // MinGW32
-       return ::mkdir(pathname.toFilesystemEncoding().c_str());
+       return ::mkdir(pathname);
        // FIXME: "Permissions of created directories are ignored on this system."
 # else
        // POSIX
-       return ::mkdir(pathname.toFilesystemEncoding().c_str(), mode_t(mode));
+       return ::mkdir(pathname, mode_t(mode));
 # endif
 #elif defined(_WIN32)
        // plain Windows 32
-       return CreateDirectory(pathname.toFilesystemEncoding().c_str(), 0) != 0 ? 0 : -1;
+       return CreateDirectory(pathname, 0) != 0 ? 0 : -1;
        // FIXME: "Permissions of created directories are ignored on this system."
 #elif HAVE__MKDIR
-       return ::_mkdir(pathname.toFilesystemEncoding().c_str());
+       return ::_mkdir(pathname);
        // FIXME: "Permissions of created directories are ignored on this system."
 #else
 #   error "Don't know how to create a directory on this system."
 #endif
+
+}
+
+int mkdir(FileName const & pathname, unsigned long int mode)
+{
+       return mymkdir(pathname.toFilesystemEncoding().c_str(), mode);
+}
+
+
+// adapted from zlib-1.2.3/contrib/minizip/miniunz.c
+int makedir(char * newdir, unsigned long int mode)
+{
+       char *buffer;
+       char *p;
+       int     len = (int)strlen(newdir);
+
+       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) {
+                       free(buffer);
+                       return 1;
+               }
+               if (hold == 0)
+                       break;
+               *p++ = hold;
+       }
+       free(buffer);
+       return 0;
 }