mirror of https://github.com/LIJI32/SameBoy.git
52 lines
1.2 KiB
C
Executable File
52 lines
1.2 KiB
C
Executable File
#include <windows.h>
|
|
#include <stdio.h>
|
|
#include <winnls.h>
|
|
#include <io.h>
|
|
#include "dirent.h"
|
|
|
|
DIR *opendir(const char *filename)
|
|
{
|
|
wchar_t w_filename[MAX_PATH + 3] = {0,};
|
|
unsigned length = MultiByteToWideChar(CP_UTF8, 0, filename, -1, w_filename, MAX_PATH);
|
|
if (length) {
|
|
w_filename[length - 1] = L'/';
|
|
w_filename[length] = L'*';
|
|
w_filename[length + 1] = 0;
|
|
}
|
|
DIR *ret = malloc(sizeof(*ret));
|
|
ret->handle = FindFirstFileW(w_filename, &ret->entry);
|
|
if (ret->handle == INVALID_HANDLE_VALUE) {
|
|
free(ret);
|
|
return NULL;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
int closedir(DIR *dir)
|
|
{
|
|
if (dir->handle != INVALID_HANDLE_VALUE) {
|
|
FindClose(dir->handle);
|
|
}
|
|
free(dir);
|
|
return 0;
|
|
}
|
|
|
|
struct dirent *readdir(DIR *dir)
|
|
{
|
|
if (dir->handle == INVALID_HANDLE_VALUE) {
|
|
return NULL;
|
|
}
|
|
|
|
WideCharToMultiByte(CP_UTF8, 0, dir->entry.cFileName, -1,
|
|
dir->out_entry.d_name, sizeof(dir->out_entry.d_name),
|
|
NULL, NULL);
|
|
|
|
if (!FindNextFileW(dir->handle, &dir->entry)) {
|
|
FindClose(dir->handle);
|
|
dir->handle = INVALID_HANDLE_VALUE;
|
|
}
|
|
|
|
return &dir->out_entry;
|
|
}
|