aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ports
diff options
context:
space:
mode:
Diffstat (limited to 'src/ports')
-rw-r--r--src/ports/SkOSFile_stdio.cpp54
1 files changed, 53 insertions, 1 deletions
diff --git a/src/ports/SkOSFile_stdio.cpp b/src/ports/SkOSFile_stdio.cpp
index 1254394431..6c825b4cb6 100644
--- a/src/ports/SkOSFile_stdio.cpp
+++ b/src/ports/SkOSFile_stdio.cpp
@@ -9,8 +9,17 @@
#include "SkOSFile.h"
-#include <stdio.h>
#include <errno.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#ifdef _WIN32
+#include <direct.h>
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
SkFILE* sk_fopen(const char path[], SkFILE_Flags flags)
{
@@ -98,3 +107,46 @@ void sk_fclose(SkFILE* f)
::fclose((FILE*)f);
}
+bool sk_exists(const char *path)
+{
+#ifdef _WIN32
+ return (0 == _access(path, 0));
+#else
+ return (0 == access(path, 0));
+#endif
+}
+
+bool sk_isdir(const char *path)
+{
+ struct stat status;
+ if (0 != stat(path, &status)) {
+ return false;
+ }
+ return (status.st_mode & S_IFDIR);
+}
+
+bool sk_mkdir(const char* path)
+{
+ if (sk_isdir(path)) {
+ return true;
+ }
+ if (sk_exists(path)) {
+ fprintf(stderr,
+ "sk_mkdir: path '%s' already exists but is not a directory\n",
+ path);
+ return false;
+ }
+
+ int retval;
+#ifdef _WIN32
+ retval = _mkdir(path);
+#else
+ retval = mkdir(path, 0777);
+#endif
+ if (0 == retval) {
+ return true;
+ } else {
+ fprintf(stderr, "sk_mkdir: error %d creating dir '%s'\n", errno, path);
+ return false;
+ }
+}