| author | Tomi Belan <tomi.belan@gmail.com> | 2009-11-01 23:02:27 (GMT) |
|---|---|---|
| committer | Tomi Belan <tomi.belan@gmail.com> | 2009-11-01 23:02:27 (GMT) |
| commit | c4133aceca92d2fc13f59ddb3d57eddb472a27a4 (patch) | |
| tree | 9fa4825a4b28aeb34ec81013e2d41dd0f667554c | |
| parent | 826b34378ae793d25fe661f25d9c5db4c4b16b3f (diff) | |
| download | ult-master.zip ult-master.tar.gz ult-master.tar.bz2 | |
zufaly workaround pre diakritiku v pathnamoch.master
situacia vyzera na Windows takto:
* funkcie ...W() ocakavaju vstup v UTF-16.
* funkcie ...A() ocakavaju vstup v nejakom jednobajtovom codepage nastavenom
hlboko v control paneli. argv[] je tiez v tom istom codepage, aspon v SDL.
* SDL.RWFromFile() ocakava UTF-8 argument, ktory potom prekonvertuje do UTF-16
a interne pouzije ...W() funkcie z Win API.
* lfs.*() pouziva _...() funkcie ako _mkdir a _findfirst, ktore asi funguju
rovnako ako ...A().
inymi slovami, lfs je tu prakticky nepouzitelne. kebyze zmenim lwinlib.c,
aby vracal vysledok v UTF-8 miesto v codepage, tak to bude fungovat
v SDL.RWFromFile(), ale zase nebude v lfs. a pouzivat proste vsade codepage
neprichadza do uvahy, lebo jazyky s vela znakmi (cinstina, japoncina...) tak
aj tak nie su podporovane.
| -rw-r--r-- | launcher.lua | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/launcher.lua b/launcher.lua index 7d1dca1..0d1b97c 100644 --- a/launcher.lua +++ b/launcher.lua @@ -38,6 +38,13 @@ local i = 1; while i <= #arg do end end +if _WIN32 then + -- avoid paths with multi-byte characters at all costs + -- (for example, lfs.* and SDL.RWFromFile expect args in different charsets) + userDir = userDir or './userdata' + dataDir = dataDir or './data' +end + -- find user directory if not userDir then local appdataDir = require'win'.appdata() @@ -110,8 +117,7 @@ local function protectedLauncher() if not dataDir then -- find data directory (paths are in reverse priority order) - local try = { settings.datadir, - arg[0]:gsub('[/\\*]*[^/\\]*$', '')..'/data' } + local try = { settings.datadir, arg[0]:gsub('[^/\\]*$', '')..'data' } for _,dir in ipairs(try) do if lfs.attributes(dir..'/manifest.lua') then dataDir = dir end end assert(dataDir, "can't find data files in: "..table.concat(try, ", ")) |
