From d2292481188c5bfdeb986a9c9f8f37b73f64cec5 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Thu, 20 Jun 2013 09:37:50 +0000 Subject: [PATCH] simpler --- Common/OS.cpp | 51 ++++++++++++++++++++------------------------------- 1 file changed, 20 insertions(+), 31 deletions(-) diff --git a/Common/OS.cpp b/Common/OS.cpp index 9120f89fc9..55fa0e06f4 100644 --- a/Common/OS.cpp +++ b/Common/OS.cpp @@ -139,25 +139,26 @@ static unsigned utf8toUtf16(const char* src, unsigned srclen, return count; } -static wchar_t *wbuf = NULL; -static wchar_t *wbuf1 = NULL; +static wchar_t *wbuf[2] = {NULL, NULL}; + +static void setwbuf(int i, const char *f) +{ + if(i != 0 || i != 1) return; + size_t l = strlen(f); + unsigned wn = utf8toUtf16(f, (unsigned) l, NULL, 0) + 1; + wbuf[i] = (wchar_t*)realloc(wbuf[i], sizeof(wchar_t)*wn); + wn = utf8toUtf16(f, (unsigned) l, (unsigned short *)wbuf[i], wn); + wbuf[i][wn] = 0; +} #endif FILE *Fopen(const char* f, const char *mode) { #if defined (WIN32) && !defined(__CYGWIN__) - size_t l = strlen(f); - unsigned wn = utf8toUtf16(f, (unsigned) l, NULL, 0) + 1; - wbuf = (wchar_t*)realloc(wbuf, sizeof(wchar_t)*wn); - wn = utf8toUtf16(f, (unsigned) l, (unsigned short *)wbuf, wn); - wbuf[wn] = 0; - l = strlen(mode); - wn = utf8toUtf16(mode, (unsigned) l, NULL, 0) + 1; - wbuf1 = (wchar_t*)realloc(wbuf1, sizeof(wchar_t)*wn); - wn = utf8toUtf16(mode, (unsigned) l, (unsigned short *)wbuf1, wn); - wbuf1[wn] = 0; - return _wfopen(wbuf, wbuf1); + setwbuf(0, f); + setwbuf(1, mode); + return _wfopen(wbuf[0], wbuf[1]); #else return fopen(f, mode); #endif @@ -288,12 +289,8 @@ std::string GetHostName() int UnlinkFile(const std::string &fileName) { #if defined(WIN32) && !defined(__CYGWIN__) - size_t l = strlen(fileName.c_str()); - unsigned wn = utf8toUtf16(fileName.c_str(), (unsigned) l, NULL, 0) + 1; - wbuf = (wchar_t*)realloc(wbuf, sizeof(wchar_t)*wn); - wn = utf8toUtf16(fileName.c_str(), (unsigned) l, (unsigned short *)wbuf, wn); - wbuf[wn] = 0; - return _wunlink(wbuf); + setwbuf(0, fileName.c_str()); + return _wunlink(wbuf[0]); #else return unlink(fileName.c_str()); #endif @@ -303,12 +300,8 @@ int StatFile(const std::string &fileName) { #if defined(WIN32) && !defined(__CYGWIN__) struct _stat buf; - size_t l = strlen(fileName.c_str()); - unsigned wn = utf8toUtf16(fileName.c_str(), (unsigned) l, NULL, 0) + 1; - wbuf = (wchar_t*)realloc(wbuf, sizeof(wchar_t)*wn); - wn = utf8toUtf16(fileName.c_str(), (unsigned) l, (unsigned short *)wbuf, wn); - wbuf[wn] = 0; - int ret = _wstat(wbuf, &buf); + setwbuf(0, fileName.c_str()); + int ret = _wstat(wbuf[0], &buf); #else struct stat buf; int ret = stat(fileName.c_str(), &buf); @@ -319,12 +312,8 @@ int StatFile(const std::string &fileName) int CreateDirectory(const std::string &dirName) { #if defined(WIN32) && !defined(__CYGWIN__) - size_t l = strlen(dirName.c_str()); - unsigned wn = utf8toUtf16(dirName.c_str(), (unsigned) l, NULL, 0) + 1; - wbuf = (wchar_t*)realloc(wbuf, sizeof(wchar_t)*wn); - wn = utf8toUtf16(dirName.c_str(), (unsigned) l, (unsigned short *)wbuf, wn); - wbuf[wn] = 0; - if(_wmkdir(wbuf)) return 0; + setwbuf(0, dirName.c_str()); + if(_wmkdir(wbuf[0])) return 0; #else if(mkdir(dirName.c_str(), 0777)) return 0; #endif -- GitLab