From 7612446a59b8a6cab79c4c6ddba9611259dd3423 Mon Sep 17 00:00:00 2001 From: Shpoike Date: Tue, 27 Apr 2021 17:58:22 +0100 Subject: [PATCH] Fix up blackslashes in zips on load, so FSZIP_FLocate won't fail because of it. --- engine/common/fs_zip.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/engine/common/fs_zip.c b/engine/common/fs_zip.c index e9814255..5d0e8892 100644 --- a/engine/common/fs_zip.c +++ b/engine/common/fs_zip.c @@ -1830,7 +1830,7 @@ unsigned short ibmtounicode[256] = 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, //0x20(ascii) 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, //0x30(ascii) 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, //0x40(ascii) - 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, //0x50(ascii) + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005A,0x005B, '/',0x005D,0x005E,0x005F, //0x50(ascii) 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, //0x60(ascii) 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x2302, //0x70(mostly ascii, one display-only) 0x00C7,0x00FC,0x00E9,0x00E2,0x00E4,0x00E0,0x00E5,0x00E7,0x00EA,0x00EB,0x00E8,0x00EF,0x00EE,0x00EC,0x00C4,0x00C5, //0x80(non-ascii, printable) @@ -1871,9 +1871,11 @@ static qboolean FSZIP_EnumerateCentralDirectory(zipfile_t *zip, struct zipinfo * //copy out the filename and lowercase it if (entry.gflags & (1u<<11)) { //already utf-8 encoding + unsigned short i; if (entry.fnane_len > sizeof(f->name)-1) entry.fnane_len = sizeof(f->name)-1; - memcpy(f->name, entry.fname, entry.fnane_len); + for (i = 0; i < entry.fnane_len; i++) + f->name[i] = (entry.fname[i]=='\\')?'/':entry.fname[i]; f->name[entry.fnane_len] = 0; } else @@ -1889,7 +1891,6 @@ static qboolean FSZIP_EnumerateCentralDirectory(zipfile_t *zip, struct zipinfo * nlen += cl; } f->name[nlen] = 0; - } if (prefix && *prefix)