summaryrefslogtreecommitdiff
path: root/src/windows/ascii.c
blob: 0122e4c349cf16e27fa518c7a2b8837201004d71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <windows.h>

HANDLE WINAPI FindFirstFileA(LPCSTR path, LPWIN32_FIND_DATAA data)
{
    WCHAR wbuffer[MAX_PATH];
    HANDLE ret;
    WIN32_FIND_DATAW wdata;

    if (!MultiByteToWideChar(CP_ACP, 0, path, -1, wbuffer, MAX_PATH)) {
        return INVALID_HANDLE_VALUE;
    }

    ret = FindFirstFileW(wbuffer, &wdata);
    if (ret != INVALID_HANDLE_VALUE) {
        memcpy(data, &wdata, FIELD_OFFSET(WIN32_FIND_DATAA, cFileName));
        WideCharToMultiByte(CP_ACP, 0, wdata.cFileName, -1, data->cFileName, MAX_PATH, NULL, NULL);
    }

    return ret;
}

BOOL WINAPI FindNextFileA(HANDLE handle, LPWIN32_FIND_DATAA data)
{
    BOOL ret;
    WIN32_FIND_DATAW wdata;

    ret = FindNextFileW(handle, &wdata);
    if (ret != FALSE) {
        memcpy(data, &wdata, FIELD_OFFSET(WIN32_FIND_DATAA, cFileName));
        WideCharToMultiByte(CP_ACP, 0, wdata.cFileName, -1, data->cFileName, MAX_PATH, NULL, NULL);
    }

    return ret;
}

HINSTANCE WINAPI LoadLibraryA(LPCSTR path)
{
    WCHAR wbuffer[MAX_PATH];

    if (!MultiByteToWideChar(CP_ACP, 0, path, -1, wbuffer, MAX_PATH)) {
        return NULL;
    }

    return LoadLibraryW(wbuffer);
}

int WINAPI MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)
{
    WCHAR wText[4096];
    WCHAR wCaption[256];

    if (!MultiByteToWideChar(CP_ACP, 0, lpText, -1, wText, 4096)) {
        return 0;
    }
    if (!MultiByteToWideChar(CP_ACP, 0, lpCaption, -1, wCaption, 256)) {
        return 0;
    }

    return MessageBoxW(hWnd, wText, wCaption, uType);
}

BOOL WINAPI CreateDirectoryA(LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
{
    WCHAR wbuffer[MAX_PATH];

    if (!MultiByteToWideChar(CP_ACP, 0, lpPathName, -1, wbuffer, MAX_PATH)) {
        return FALSE;
    }

    return CreateDirectoryW(wbuffer, lpSecurityAttributes);
}

BOOL WINAPI GetFileAttributesExA(LPCSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation)
{
    WCHAR wbuffer[MAX_PATH];

    if (!MultiByteToWideChar(CP_ACP, 0, lpFileName, -1, wbuffer, MAX_PATH)) {
        return FALSE;
    }

    return GetFileAttributesExW(wbuffer, fInfoLevelId, lpFileInformation);
}

DWORD WINAPI GetModuleFileNameA(HMODULE hModule, LPSTR lpFileName, DWORD nSize)
{
    WCHAR wbuffer[MAX_PATH];
    DWORD ret;

    if (nSize > MAX_PATH) {
        nSize = MAX_PATH;
    }

    ret = GetModuleFileNameW(hModule, wbuffer, nSize);
    if (ret) {
        if (!WideCharToMultiByte(CP_ACP, 0, wbuffer, ret, lpFileName, ret, NULL, NULL)) {
            return 0;
        }
    }

    return ret;
}