aboutsummaryrefslogtreecommitdiffstats
path: root/libparc/parc/algol/parc_File.c
diff options
context:
space:
mode:
authorAngelo Mantellini <manangel@cisco.com>2019-02-05 08:50:26 +0100
committerAngelo Mantellini <manangel@cisco.com>2019-02-06 16:23:04 +0100
commit9f68541e0f55495d61dd9e583bec38740a247597 (patch)
tree55519e34159ac1eb691e080e4c1eab5b0e4847bd /libparc/parc/algol/parc_File.c
parentb77148ddc3def71e6c412c3afb5f1c20be2d77cd (diff)
[HICN-26] Windows compatibilty for libparc
Change-Id: I6ebff82a81a2bf42fa3bf210ff0e6e530ce21915 Signed-off-by: Angelo Mantellini <manangel@cisco.com>
Diffstat (limited to 'libparc/parc/algol/parc_File.c')
-rw-r--r--libparc/parc/algol/parc_File.c36
1 files changed, 25 insertions, 11 deletions
diff --git a/libparc/parc/algol/parc_File.c b/libparc/parc/algol/parc_File.c
index 353ffcca..f39a31af 100644
--- a/libparc/parc/algol/parc_File.c
+++ b/libparc/parc/algol/parc_File.c
@@ -25,20 +25,21 @@
#define __USE_XOPEN_EXTENDED
#endif //__USE_XOPEN_EXTENDED
-#include <stdio.h>
+#ifndef _WIN32
#include <unistd.h>
+#include <ftw.h>
+#endif
+
+#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
-
-#include <ftw.h>
#include <inttypes.h>
#include <pthread.h>
#include <string.h>
#include <errno.h>
#include <parc/assert/parc_Assert.h>
-
#include <parc/algol/parc_Object.h>
#include <parc/algol/parc_PathName.h>
#include <parc/algol/parc_File.h>
@@ -134,7 +135,13 @@ parcFile_Mkdir(const PARCFile *file)
parcFile_OptionalAssertValid(file);
char *string = parcPathName_ToString(file->pathName);
+
+#ifndef _WIN32
bool result = (mkdir(string, 0777) == 0);
+#else
+ bool result = (CreateDirectory(string, NULL) == 0);
+#endif
+
parcMemory_Deallocate((void **) &string);
return result;
@@ -167,6 +174,7 @@ parcFile_IsDirectory(const PARCFile *file)
return result;
}
+#ifndef _WIN32
static int
_deleteNode(const char *path, const struct stat *stat, int flag, struct FTW *ftwbuf)
{
@@ -179,6 +187,7 @@ _deleteNode(const char *path, const struct stat *stat, int flag, struct FTW *ftw
}
return result;
}
+#endif
/**
* @function parcFile_Delete
@@ -201,16 +210,21 @@ parcFile_Delete(const PARCFile *file)
bool result = false;
if (parcFile_IsDirectory(file)) {
- // depth first, dont't follow symlinks, do not cross mount points.
- int flags = FTW_DEPTH | FTW_PHYS | FTW_MOUNT;
- // maximum 20 fds open at a time
- int maximumFileDescriptors = 20;
+#ifndef _WIN32
+ // depth first, dont't follow symlinks, do not cross mount points.
+ int flags = FTW_DEPTH | FTW_PHYS | FTW_MOUNT;
+ // maximum 20 fds open at a time
+ int maximumFileDescriptors = 20;
+
+ int failure = nftw(string, _deleteNode, maximumFileDescriptors, flags);
+ parcAssertFalse(failure, "Error on recursive delete: (%d) %s", errno, strerror(errno));
- int failure = nftw(string, _deleteNode, maximumFileDescriptors, flags);
- parcAssertFalse(failure, "Error on recursive delete: (%d) %s", errno, strerror(errno));
+ result = failure == false;
+#else
+ result = RemoveDirectoryA(string);
+#endif
- result = failure == false;
} else {
result = (unlink(string) == 0);
}