summaryrefslogtreecommitdiff
path: root/source/win_ascii.c
blob: d23dcd4e3e46801bda6f5f952f96bbec5ff7a4d3 (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
#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;
}