Zandronum Chat @ irc.zandronum.com
#zandronum
Get the latest version: 3.0
Source Code

View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0003706Doomseeker[All Projects] Bugpublic2019-08-28 17:582019-09-02 16:19
ReporterZalewa 
Assigned ToZalewa 
PrioritylowSeveritymajorReproducibilityalways
Statusneeds testingResolutionopen 
PlatformMicrosoftOSWindowsOS VersionXP/Vista/7
Product Version1.3 
Target Version1.4Fixed in Version 
Summary0003706: Non-ASCII characters in path prevent the plugins from being loaded on Windows
DescriptionPlugins from the /engines/ directory are not being loaded correctly on Windows when Doomseeker is in a path with non-ASCII characters.

Doomseeker properly detects the presence of the DLL files but it appears that the LoadLibrary() WinAPI function has problem with actually opening the DLL.
Steps To Reproduce1. Put Doomseeker in a path with non-ASCII characters in it, such as C:\ąść\doomseeker\
2. Run C:\ąść\doomseeker\doomseeker.exe
3. Discard the failure to load the plugins error (if any) and inspect logs.
Attached Files

- Relationships

-  Notes
User avatar (0021014)
Zalewa (developer)
2019-08-30 16:39

This has turned out to be an easy fix, just needed to change LoadLibrary() to LoadLibraryW():https://bitbucket.org/Doomseeker/doomseeker/commits/66e3062320b4dc6d52525dcd4f964228f07657d1 [^]

Update with this fix is available on the beta auto-update channel.
User avatar (0021015)
Blzut3 (administrator)
2019-09-02 07:36

While that fix is probably just fine, is there a chance that we should be adding some flag to compile Doomseeker in Unicode mode?
User avatar (0021016)
Zalewa (developer)
2019-09-02 16:18
edited on: 2019-09-02 16:19

From what I see the `A` variant of LoadLibrary() can also work if the string is converted to a local 8-bit string rather than to UTF-8:

// Both work
d->library = LoadLibraryW(nativeFilePath.toStdWString().c_str());
d->library = LoadLibraryA(nativeFilePath.toLocal8Bit().constData());


In regards to your question, from what I can discern the "Character Set" compiler flag in the MSVC actually controls only whether a `#define _UNICODE` is implicitly added. This #define, in turn, controls whether the various WinAPI #defines resolve to the `A` or the `W` variant. In this case: `LoadLibrary` is a preprocessor macro that can either resolve to `LoadLibraryA` or `LoadLibraryW`. If you pass to it a TCHAR string (another macro that expands to char or wchat_t) you can control the ANSI or widestring variants with a compiler flag. In Doomseeker I simply explicitly chose to use the widestring variant.

Nevertheless, I missed an important remark in MSDN that states that backslashes should be used in the path instead of forward slashes. So, adjustment for that is here:https://bitbucket.org/Doomseeker/doomseeker/commits/a4dfeee1abefddfcec79aee55f0405c92866adff [^]

Moreover, this exists:https://doc.qt.io/qt-5/qlibrary.html [^]
Unless QLibrary will bring back 0003401, we should consider using that instead of the native API functions.


Issue Community Support
Only registered users can voice their support. Click here to register, or here to log in.
Supporters: No one explicitly supports this issue yet.
Opponents: No one explicitly opposes this issue yet.

- Issue History
Date Modified Username Field Change
2019-08-28 17:58 Zalewa New Issue
2019-08-29 19:23 WubTheCaptain Status new => acknowledged
2019-08-30 16:20 Zalewa Assigned To => Zalewa
2019-08-30 16:20 Zalewa Status acknowledged => assigned
2019-08-30 16:39 Zalewa Note Added: 0021014
2019-08-30 16:39 Zalewa Status assigned => needs testing
2019-09-02 07:36 Blzut3 Note Added: 0021015
2019-09-02 16:18 Zalewa Note Added: 0021016
2019-09-02 16:19 Zalewa Note Edited: 0021016 View Revisions






Questions or other issues? Contact Us.

Links


Copyright © 2000 - 2019 MantisBT Team
Powered by Mantis Bugtracker