diff --git a/ioutil.c b/ioutil.c index 26c6254..65bd944 100644 --- a/ioutil.c +++ b/ioutil.c @@ -2,6 +2,9 @@ #include #include "types.h" #include "ioutil.h" + +#ifndef _WIN32 + #include #include #include @@ -51,6 +54,52 @@ int closefile(FH fd) return 0; } +int createdir(const char *path,int secret) +{ + return mkdir(path,secret ? 0700 : 0777); +} + +#else + +int writeall(FH fd,const u8 *data,size_t len) +{ + DWORD wrote; + BOOL success; + while (len) { + success = WriteFile(fd,data, + len <= (DWORD)-1 ? (DWORD)len : (DWORD)-1,&wrote,0); + if (!success) + return -1; + data += wrote; + if (len >= wrote) + len -= wrote; + else + len = 0; + } + return 0; +} + +FH createfile(const char *path,int secret) +{ + // XXX no support for non-ascii chars + // XXX don't know how to handle secret argument + (void) secret; + return CreateFileA(path,GENERIC_WRITE,0,0,CREATE_ALWAYS,0,0); +} + +int closefile(FH fd) +{ + return CloseHandle(fd) ? 0 : -1; +} + +int createdir(const char *path,int secret) +{ + // XXX don't know how to handle secret argument + return CreateDirectoryA(path,0) ? 0 : -1; +} + +#endif + int writetofile(const char *path,const u8 *data,size_t len,int secret) { FH fd = createfile(path,secret); @@ -60,8 +109,3 @@ int writetofile(const char *path,const u8 *data,size_t len,int secret) return -1; return wret; } - -int createdir(const char *path,int secret) -{ - return mkdir(path,secret ? 0700 : 0777); -} diff --git a/ioutil.h b/ioutil.h index 7255a2e..c7a1dab 100644 --- a/ioutil.h +++ b/ioutil.h @@ -1,6 +1,18 @@ + +#ifndef _WIN32 + typedef int FH; #define FH_invalid -1 +#else + +#define UNICODE 1 +#include +typedef HANDLE FH; +#define FH_invalid INVALID_HANDLE_VALUE + +#endif + FH createfile(const char *path,int secret); int closefile(FH fd); int writeall(FH,const u8 *data,size_t len);