Skip to content

Commit e55dd95

Browse files
authored
for Windows NT 5.x
1 parent 01b7a89 commit e55dd95

File tree

3 files changed

+102
-16
lines changed

3 files changed

+102
-16
lines changed

src/lfn.h

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,76 @@
1919
#define FILE_LONG 2
2020

2121
#define ERROR_OOM 8
22+
#ifndef SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE
23+
#define SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE 0x2
24+
#endif
25+
typedef int(__stdcall* GetLocaleInfoEx_)(LPCWSTR lpLocaleName, LCTYPE LCType, LPWSTR lpLCData, int cchData);
26+
typedef LCID(__stdcall* LocaleNameToLCID_)(LPCWSTR lpName, DWORD dwFlags);
27+
28+
#ifndef IO_REPARSE_TAG_CLOUD
29+
#define IO_REPARSE_TAG_CLOUD (0x9000001AL)
30+
#endif // IO_REPARSE_TAG_CLOUD
31+
32+
#ifndef IO_REPARSE_TAG_CLOUD_1
33+
#define IO_REPARSE_TAG_CLOUD_1 (0x9000101AL)
34+
#endif // IO_REPARSE_TAG_CLOUD_1
35+
36+
#ifndef IO_REPARSE_TAG_CLOUD_2
37+
#define IO_REPARSE_TAG_CLOUD_2 (0x9000201AL)
38+
#endif // IO_REPARSE_TAG_CLOUD_2
39+
40+
#ifndef IO_REPARSE_TAG_CLOUD_3
41+
#define IO_REPARSE_TAG_CLOUD_3 (0x9000301AL)
42+
#endif // IO_REPARSE_TAG_CLOUD_3
43+
44+
#ifndef IO_REPARSE_TAG_CLOUD_4
45+
#define IO_REPARSE_TAG_CLOUD_4 (0x9000401AL)
46+
#endif // IO_REPARSE_TAG_CLOUD_4
47+
48+
#ifndef IO_REPARSE_TAG_CLOUD_5
49+
#define IO_REPARSE_TAG_CLOUD_5 (0x9000501AL)
50+
#endif // IO_REPARSE_TAG_CLOUD_5
51+
52+
#ifndef IO_REPARSE_TAG_CLOUD_6
53+
#define IO_REPARSE_TAG_CLOUD_6 (0x9000601AL)
54+
#endif // IO_REPARSE_TAG_CLOUD_6
55+
56+
#ifndef IO_REPARSE_TAG_CLOUD_7
57+
#define IO_REPARSE_TAG_CLOUD_7 (0x9000701AL)
58+
#endif // IO_REPARSE_TAG_CLOUD_7
59+
60+
#ifndef IO_REPARSE_TAG_CLOUD_8
61+
#define IO_REPARSE_TAG_CLOUD_8 (0x9000801AL)
62+
#endif // IO_REPARSE_TAG_CLOUD_8
63+
64+
#ifndef IO_REPARSE_TAG_CLOUD_9
65+
#define IO_REPARSE_TAG_CLOUD_9 (0x9000901AL)
66+
#endif // IO_REPARSE_TAG_CLOUD_9
67+
68+
#ifndef IO_REPARSE_TAG_CLOUD_A
69+
#define IO_REPARSE_TAG_CLOUD_A (0x9000A01AL)
70+
#endif // IO_REPARSE_TAG_CLOUD_A
71+
72+
#ifndef IO_REPARSE_TAG_CLOUD_B
73+
#define IO_REPARSE_TAG_CLOUD_B (0x9000B01AL)
74+
#endif // IO_REPARSE_TAG_CLOUD_B
75+
76+
#ifndef IO_REPARSE_TAG_CLOUD_C
77+
#define IO_REPARSE_TAG_CLOUD_C (0x9000C01AL)
78+
#endif // IO_REPARSE_TAG_CLOUD_C
79+
80+
#ifndef IO_REPARSE_TAG_CLOUD_D
81+
#define IO_REPARSE_TAG_CLOUD_D (0x9000D01AL)
82+
#endif // IO_REPARSE_TAG_CLOUD_D
83+
84+
#ifndef IO_REPARSE_TAG_CLOUD_E
85+
#define IO_REPARSE_TAG_CLOUD_E (0x9000E01AL)
86+
#endif // IO_REPARSE_TAG_CLOUD_E
87+
88+
#ifndef IO_REPARSE_TAG_CLOUD_F
89+
#define IO_REPARSE_TAG_CLOUD_F (0x9000F01AL)
90+
#endif // IO_REPARSE_TAG_CLOUD_F
91+
2292

2393
// we need to add an extra field to distinguish DOS vs. LFNs
2494

src/wfinit.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
#include <ole2.h>
1919
#include <shlobj.h>
20-
#include "resize.h"
2120

2221
#include "dbg.h"
2322

@@ -1018,7 +1017,13 @@ InitFileManager(
10181017
GetPrivateProfileString(szSettings, szUILanguage, szNULL, szTemp, COUNTOF(szTemp), szTheINIFile);
10191018
if (szTemp[0])
10201019
{
1021-
LCID lcidUI = LocaleNameToLCID(szTemp, 0);
1020+
HINSTANCE hDll = GetModuleHandleA("kernel32.dll");
1021+
LocaleNameToLCID_ lnlc;
1022+
LCID lcidUI = LOCALE_USER_DEFAULT; //LocaleNameToLCID_(szTemp, 0);
1023+
lnlc=(LocaleNameToLCID_)GetProcAddress(hDll,"LocaleNameToLCID");
1024+
if (lnlc != NULL) {
1025+
lcidUI = lnlc(szTemp, 0);
1026+
}
10221027
if (lcidUI != 0)
10231028
{
10241029
SetThreadUILanguage((LANGID)lcidUI);
@@ -1274,10 +1279,6 @@ JAPANEND
12741279
}
12751280
#endif
12761281

1277-
if (!ResizeDialogInitialize(hInstance)) {
1278-
return FALSE;
1279-
}
1280-
12811282
if (!LoadString(hInstance, IDS_WINFILE, szTitle, COUNTOF(szTitle))) {
12821283
return FALSE;
12831284
}

src/wfloc.c

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Licensed under the MIT License.
99
1010
********************************************************************/
1111
#include "winfile.h"
12-
12+
#include "lfn.h"
1313
/*
1414
The Language names are sorted like this because CBS_SORT Flag for comboboxes causes bugs.
1515
cf. https://msdn.microsoft.com/en-us/library/cc233982.aspx
@@ -27,15 +27,30 @@ LPCTSTR szLCIDs[] = {
2727
VOID InitLangList(HWND hCBox)
2828
{
2929
// Propogate the list
30-
for (UINT i = 0; i <= (COUNTOF(szLCIDs) - 1); i++)
31-
{
32-
TCHAR szLangName[MAXPATHLEN] = { 0 };
33-
LCID lcidTemp = LocaleNameToLCID(szLCIDs[i], 0);
34-
35-
// TODO: need to test this on pre-Vista and on/after Win XP 64
36-
if (GetLocaleInfoEx(szLCIDs[i], LOCALE_SLOCALIZEDDISPLAYNAME, szLangName, COUNTOF(szLangName)) == 0)
37-
lstrcpy(szLangName, TEXT("BUGBUG"));
38-
30+
for (UINT i = 0; i <= (COUNTOF(szLCIDs) - 1); i++)
31+
{
32+
TCHAR szLangName[MAXPATHLEN] = { 0 };
33+
LCID lcidTemp = LOCALE_USER_DEFAULT;// LocaleNameToLCID_(szLCIDs[i], 0);
34+
HINSTANCE hDll = GetModuleHandleA("kernel32.dll");
35+
LocaleNameToLCID_ lnlc;
36+
LCID lcidUI = LOCALE_USER_DEFAULT; //LocaleNameToLCID_(szTemp, 0);
37+
lnlc = (LocaleNameToLCID_)GetProcAddress(hDll, "LocaleNameToLCID");
38+
if (lnlc != NULL) {
39+
lcidUI = lnlc(szLCIDs[i], 0);
40+
}
41+
42+
43+
GetLocaleInfoEx_ glie;
44+
glie = (GetLocaleInfoEx_)GetProcAddress(hDll, "GetLocaleInfoEx");
45+
if (glie != NULL) {
46+
// TODO: need to test this on pre-Vista and on/after Win XP 64
47+
if (glie(szLCIDs[i], LOCALE_SLOCALIZEDDISPLAYNAME, szLangName, COUNTOF(szLangName)) == 0)
48+
lstrcpy(szLangName, TEXT("BUGBUG"));
49+
}
50+
else {
51+
if (GetLocaleInfo(lcidUI, LOCALE_SLOCALIZEDDISPLAYNAME, szLangName, COUNTOF(szLangName)) == 0)
52+
lstrcpy(szLangName, TEXT("BUGBUG"));
53+
}
3954
// every entry in the array above needs to be addd to the list box;
4055
// SaveLang() below depends on each index in the listbox being valid.
4156
SendMessage(hCBox, CB_ADDSTRING, 0, (LPARAM)szLangName);

0 commit comments

Comments
 (0)