summaryrefslogtreecommitdiff
path: root/posix.c
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavier.delcampo@orain.io>2020-10-13 16:23:12 +0200
committerXavier Del Campo Romero <xavier.delcampo@orain.io>2020-10-13 16:23:12 +0200
commit3a6c25efebc509a107accb4d27ea8f5dc7ca0d17 (patch)
treec911696ddbe8d1cb0b42f0a7ec78e783bff8a814 /posix.c
parent6930a91f26c465903a139614c81637716e81cf3b (diff)
downloadmkdir_r-3a6c25efebc509a107accb4d27ea8f5dc7ca0d17.tar.gz
Add support for Win32
Diffstat (limited to 'posix.c')
-rw-r--r--posix.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/posix.c b/posix.c
new file mode 100644
index 0000000..d2d3651
--- /dev/null
+++ b/posix.c
@@ -0,0 +1,40 @@
+/*
+ Copyright 2020 Xavier Del Campo Romero
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+int mkdir_r_port(const char *const dir)
+{
+ if (!access(dir, 0))
+ {
+ struct stat sb;
+
+ if (stat(dir, &sb))
+ return -1;
+ else if (!(sb.st_mode & S_IFDIR))
+ {
+ errno = ENOTDIR;
+ return -1;
+ }
+ }
+ else if (mkdir(dir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH))
+ return -1;
+
+ return 0;
+}