TLS calls on WinRT replaced on variables with C++11 "thread" attribute.

This commit is contained in:
Alexander Smorkalov
2013-07-23 06:44:57 -07:00
parent 6257df1c4b
commit 62b85a41da
4 changed files with 101 additions and 24 deletions

View File

@@ -16,10 +16,23 @@ namespace cv
list.clear();
std::string path_f = path + "/" + exten;
#ifdef WIN32
#if HAVE_WINRT
WIN32_FIND_DATAW FindFileData;
#else
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
#endif
HANDLE hFind;
hFind = FindFirstFile((LPCSTR)path_f.c_str(), &FindFileData);
#ifdef HAVE_WINRT
size_t size = mbstowcs(NULL, path_f.c_str(), path_f.size());
wchar_t* wpath = (wchar_t*)malloc((size+1)*sizeof(wchar_t));
wpath[size] = 0;
mbstowcs(wpath, path_f.c_str(), path_f.size());
hFind = FindFirstFileW(wpath, &FindFileData);
free(wpath);
#else
hFind = FindFirstFileA((LPCSTR)path_f.c_str(), &FindFileData);
#endif
if (hFind == INVALID_HANDLE_VALUE)
{
return list;
@@ -34,13 +47,29 @@ namespace cv
FindFileData.dwFileAttributes == FILE_ATTRIBUTE_SYSTEM ||
FindFileData.dwFileAttributes == FILE_ATTRIBUTE_READONLY)
{
char* fname;
#ifdef HAVE_WINRT
size_t asize = wcstombs(NULL, FindFileData.cFileName, 0);
char* fname = (char*)malloc((asize+1)*sizeof(char));
fname[asize] = 0;
wcstombs(fname, FindFileData.cFileName, asize);
#else
fname = FindFileData.cFileName;
#endif
if (addPath)
list.push_back(path + "/" + FindFileData.cFileName);
list.push_back(path + "/" + fname);
else
list.push_back(FindFileData.cFileName);
list.push_back(fname);
#ifdef HAVE_WINRT
free(fname);
#endif
}
}
while(FindNextFile(hFind, &FindFileData));
#ifdef HAVE_WINRT
while(FindNextFileW(hFind, &FindFileData));
#else
while(FindNextFileA(hFind, &FindFileData));
#endif
FindClose(hFind);
}
#else
@@ -75,10 +104,23 @@ namespace cv
std::string path_f = path + "/" + exten;
list.clear();
#ifdef WIN32
#if HAVE_WINRT
WIN32_FIND_DATAW FindFileData;
#else
WIN32_FIND_DATA FindFileData;
#endif
HANDLE hFind;
hFind = FindFirstFile((LPCSTR)path_f.c_str(), &FindFileData);
#ifdef HAVE_WINRT
size_t size = mbstowcs(NULL, path_f.c_str(), path_f.size());
wchar_t* wpath = (wchar_t*)malloc((size+1)*sizeof(wchar_t));
wpath[size] = 0;
mbstowcs(wpath, path_f.c_str(), path_f.size());
hFind = FindFirstFileW(wpath, &FindFileData);
free(wpath);
#else
hFind = FindFirstFileA((LPCSTR)path_f.c_str(), &FindFileData);
#endif
if (hFind == INVALID_HANDLE_VALUE)
{
return list;
@@ -91,13 +133,27 @@ namespace cv
strcmp(FindFileData.cFileName, ".") != 0 &&
strcmp(FindFileData.cFileName, "..") != 0)
{
char* fname;
#ifdef HAVE_WINRT
size_t asize = wcstombs(NULL, FindFileData.cFileName, 0);
char* fname = (char*)malloc((asize+1)*sizeof(char));
fname[asize] = 0;
wcstombs(fname, FindFileData.cFileName, asize);
#else
fname = FindFileData.cFileName;
#endif
if (addPath)
list.push_back(path + "/" + FindFileData.cFileName);
list.push_back(path + "/" + fname);
else
list.push_back(FindFileData.cFileName);
list.push_back(fname);
}
}
while(FindNextFile(hFind, &FindFileData));
#ifdef HAVE_WINRT
while(FindNextFileW(hFind, &FindFileData));
#else
while(FindNextFileA(hFind, &FindFileData));
#endif
FindClose(hFind);
}