diff options
author | Angelo Mantellini <manangel@cisco.com> | 2019-02-05 08:50:26 +0100 |
---|---|---|
committer | Angelo Mantellini <manangel@cisco.com> | 2019-02-06 16:23:04 +0100 |
commit | 9f68541e0f55495d61dd9e583bec38740a247597 (patch) | |
tree | 55519e34159ac1eb691e080e4c1eab5b0e4847bd /libparc/parc/algol/parc_File.c | |
parent | b77148ddc3def71e6c412c3afb5f1c20be2d77cd (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.c | 36 |
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); } |