Bulk import script early version + StuffIt 5 fixes.

This commit is contained in:
elasota
2021-06-30 00:45:53 -04:00
parent 66cce6bcd4
commit c27d78d329
15 changed files with 2228 additions and 156 deletions

View File

@@ -1,9 +1,11 @@
#include <string>
#include "GpUnicode.h"
#include "WindowsUnicodeToolShim.h"
#include <Windows.h>
#include <vector>
#include <direct.h>
// This library provides front-ends and shims to make tools a bit more portable by handling all path strings as UTF-8,
// and providing a "main" entry point that is also UTF-8.
@@ -121,6 +123,58 @@ void ScanDirectoryForExtension(std::vector<std::string> &outPaths, const char *p
FindClose(h);
}
struct DirectoryScanContext
{
WIN32_FIND_DATAW m_findDataW;
HANDLE m_handle;
bool m_first;
std::string m_utf8Name;
DirectoryScanEntry m_currentEntry;
};
static void ParseDirEntry(DirectoryScanContext &context)
{
context.m_utf8Name = ConvertWStringToUTF8(context.m_findDataW.cFileName);
context.m_currentEntry.m_name = context.m_utf8Name.c_str();
}
DirectoryScanContext *opendir_utf8(const char *name)
{
DirectoryScanContext *context = new DirectoryScanContext();
std::wstring dirFilter = std::wstring(L"\\\\?\\") + ConvertUTF8ToWString(name) + L"\\*";
context->m_handle = FindFirstFileW(dirFilter.c_str(), &context->m_findDataW);
if (context->m_handle == INVALID_HANDLE_VALUE)
{
delete context;
return nullptr;
}
context->m_first = true;
return context;
}
DirectoryScanEntry *readdir_utf8(DirectoryScanContext *dir)
{
if (dir->m_first)
dir->m_first = false;
else
{
if (!FindNextFileW(dir->m_handle, &dir->m_findDataW))
return nullptr;
}
ParseDirEntry(*dir);
return &dir->m_currentEntry;
}
void closedir_utf8(DirectoryScanContext *context)
{
FindClose(context->m_handle);
delete context;
}
int toolMain(int argc, const char **argv);