| |
| |
| #include "tfile_io.h" |
| |
| #ifdef _WIN32 |
| |
| #include <windows.h> |
| #include <assert.h> |
| |
| LPSTR AtlW2AHelper(LPSTR lpa, LPCWSTR lpw, int nChars, UINT acp) { |
| assert(lpw != NULL); |
| assert(lpa != NULL); |
| |
| |
| |
| |
| |
| lpa[0] = '\0'; |
| WideCharToMultiByte(acp, 0, lpw, -1, lpa, nChars, NULL, NULL); |
| return lpa; |
| } |
| |
| char *convertWCHAR2CHAR(const wchar_t *fname) { |
| int size = 0; |
| LPCWSTR lpw = fname; |
| char *name = NULL; |
| char *outName = 0; |
| if (lpw) { |
| LPSTR pStr = 0; |
| size = (lstrlenW(lpw) + 1) * 2; |
| pStr = (LPSTR)malloc(size * sizeof(char)); |
| name = AtlW2AHelper(pStr, lpw, size, 0); |
| } |
| return name; |
| } |
| |
| #else |
| #include <stdlib.h> |
| char *convertWCHAR2CHAR(const wchar_t *wc) { |
| int count = 0; |
| const wchar_t *ptr = wc; |
| char *c = 0; |
| char *buff; |
| while ((*ptr) != '\0') { |
| ++count; |
| ++ptr; |
| } |
| c = (char *)malloc((count + 1) * sizeof(char)); |
| buff = c; |
| ptr = wc; |
| while ((*ptr) != '\0') { |
| *c = *ptr; |
| ++c; |
| ++ptr; |
| } |
| *c = 0; |
| return buff; |
| } |
| #endif |
| |
| #if defined(MACOSX) || defined(LINUX) |
| |
| FILE *_wfopen(const wchar_t *fname, const wchar_t *mode) { |
| char *cfname = convertWCHAR2CHAR(fname); |
| char *cmode = convertWCHAR2CHAR(mode); |
| |
| FILE *f = fopen(cfname, cmode); |
| free(cfname); |
| free(cmode); |
| return f; |
| } |
| |
| |
| |
| int _wstat(const wchar_t *fname, struct stat *buf) { |
| char *cfname = convertWCHAR2CHAR(fname); |
| int rc = stat(cfname, buf); |
| |
| free(cfname); |
| return rc; |
| } |
| |
| |
| |
| int _wremove(const wchar_t *fname) { |
| char *cfname = convertWCHAR2CHAR(fname); |
| int rc = remove(cfname); |
| |
| free(cfname); |
| return rc; |
| } |
| |
| #endif |
| |