[PATCH 2/5] OS: add the subsurface_mkdir() wrapper
Lubomir I. Ivanov
neolit123 at gmail.com
Sun Feb 15 10:25:19 PST 2015
From: "Lubomir I. Ivanov" <neolit123 at gmail.com>
Win32's API does not support file permission bits via the
mkdir() function. We wrap the mkdir() call into
subsurface_mkdir() and ignore 'mode' for Win32.
Signed-off-by: Lubomir I. Ivanov <neolit123 at gmail.com>
---
dive.h | 1 +
git-access.c | 2 +-
linux.c | 6 ++++++
macos.c | 7 +++++++
windows.c | 15 +++++++++++++++
5 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/dive.h b/dive.h
index 8247a5f..f798332 100644
--- a/dive.h
+++ b/dive.h
@@ -675,6 +675,7 @@ extern int subsurface_rename(const char *path, const char *newpath);
extern int subsurface_open(const char *path, int oflags, mode_t mode);
extern FILE *subsurface_fopen(const char *path, const char *mode);
extern void *subsurface_opendir(const char *path);
+extern int subsurface_mkdir(const char *path, mode_t mode);
extern int subsurface_access(const char *path, int mode);
extern struct zip *subsurface_zip_open_readonly(const char *path, int flags, int *errorp);
extern int subsurface_zip_close(struct zip *zip);
diff --git a/git-access.c b/git-access.c
index c39e7ef..d0c489d 100644
--- a/git-access.c
+++ b/git-access.c
@@ -30,7 +30,7 @@ static const char *system_git_dir(void)
if (!*pathname) {
// This doesn't work on Windows, crap that it is. Somebody needs to fix it.
snprintf(pathname, PATH_MAX, "%s/git-caches", system_default_directory());
- mkdir(pathname, 0777);
+ subsurface_mkdir(pathname, 0777);
}
return pathname;
}
diff --git a/linux.c b/linux.c
index 3ffd997..2576b76 100644
--- a/linux.c
+++ b/linux.c
@@ -5,6 +5,7 @@
#include "membuffer.h"
#include <string.h>
#include <sys/types.h>
+#include <sys/stat.h>
#include <dirent.h>
#include <fnmatch.h>
#include <stdio.h>
@@ -164,6 +165,11 @@ void *subsurface_opendir(const char *path)
return (void *)opendir(path);
}
+int subsurface_mkdir(const char *path, mode_t mode)
+{
+ return mkdir(path, mode);
+}
+
int subsurface_access(const char *path, int mode)
{
return access(path, mode);
diff --git a/macos.c b/macos.c
index 36c1f60..2c7c8ad 100644
--- a/macos.c
+++ b/macos.c
@@ -9,6 +9,8 @@
#include <CoreServices/CoreServices.h>
#include <mach-o/dyld.h>
#include <sys/syslimits.h>
+#include <sys/types.h>
+#include <sys/stat.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
@@ -147,6 +149,11 @@ void *subsurface_opendir(const char *path)
return (void *)opendir(path);
}
+int subsurface_mkdir(const char *path, mode_t mode)
+{
+ return mkdir(path, mode);
+}
+
int subsurface_access(const char *path, int mode)
{
return access(path, mode);
diff --git a/windows.c b/windows.c
index 5441b39..e859518 100644
--- a/windows.c
+++ b/windows.c
@@ -12,6 +12,8 @@
#include <assert.h>
#include <dirent.h>
#include <zip.h>
+#include <direct.h>
+#include <sys/types.h>
const char non_standard_system_divelist_default_font[] = "Calibri";
const char current_system_divelist_default_font[] = "Segoe UI";
@@ -231,6 +233,19 @@ void *subsurface_opendir(const char *path)
return (void *)ret;
}
+int subsurface_mkdir(const char *path, mode_t mode)
+{
+ (void)mode;
+ int ret = -1;
+ if (!path)
+ return ret;
+ wchar_t *wpath = utf8_to_utf16(path);
+ if (wpath)
+ ret = _wmkdir(wpath);
+ free((void *)wpath);
+ return ret;
+}
+
int subsurface_access(const char *path, int mode)
{
int ret = -1;
--
1.7.11.msysgit.0
More information about the subsurface
mailing list