[Scummvm-git-logs] scummvm master -> f9d0da86e3b0d524453207c7dc0cd9243ba2e929

sev- noreply at scummvm.org
Sun Nov 6 22:22:43 UTC 2022


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
f9d0da86e3 GUI: Fix browsing in presence of files with \1 in names


Commit: f9d0da86e3b0d524453207c7dc0cd9243ba2e929
    https://github.com/scummvm/scummvm/commit/f9d0da86e3b0d524453207c7dc0cd9243ba2e929
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-11-06T23:22:40+01:00

Commit Message:
GUI: Fix browsing in presence of files with \1 in names

Currently file containing \1 in its name causes erroring out
with "Wrong string format".

Hades Challenge Mac partiton has such files in the root. So if they are
copied then it's impossible to select folder with Hades Challenge. Many tools
skip (as they are hidden) or rename them while saving original name in
AppleDouble or MacBinary. dumper-companion also renames them but scummvm
transparently decodes punycode back.

Changed paths:
    gui/browser.cpp
    gui/widgets/list.cpp
    gui/widgets/list.h


diff --git a/gui/browser.cpp b/gui/browser.cpp
index 110f1757d95..4ec411f9a76 100644
--- a/gui/browser.cpp
+++ b/gui/browser.cpp
@@ -242,9 +242,9 @@ void BrowserDialog::updateListing() {
 		}
 
 		if (i->isDirectory())
-			list.push_back(color + Common::U32String(i->getName() + "/"));
+			list.push_back(color + ListWidget::escapeString(Common::U32String(i->getName()) + "/"));
 		else
-			list.push_back(color + Common::U32String(i->getName()));
+			list.push_back(color + ListWidget::escapeString(Common::U32String(i->getName())));
 	}
 
 	_fileList->setList(list);
diff --git a/gui/widgets/list.cpp b/gui/widgets/list.cpp
index 9399b338e29..a0976a1f9e6 100644
--- a/gui/widgets/list.cpp
+++ b/gui/widgets/list.cpp
@@ -860,6 +860,19 @@ Common::U32String ListWidget::stripGUIformatting(const Common::U32String &str) {
 	return stripped;
 }
 
+Common::U32String ListWidget::escapeString(const Common::U32String &str) {
+	Common::U32String escaped;
+	const uint32 *s = str.u32_str();
+
+	while (*s) {
+		if (*s == '\001')
+			escaped += '\001';
+		escaped += *s++;
+	}
+
+	return escaped;
+}
+
 void ListWidget::drawFormattedText(const Common::Rect &r, const Common::U32String &str, ThemeEngine::WidgetStateInfo state,
 				Graphics::TextAlign align, ThemeEngine::TextInversionState inverted, int deltax, bool useEllipsis,
 				ThemeEngine::FontColor color) {
diff --git a/gui/widgets/list.h b/gui/widgets/list.h
index 6fa125b3aad..382ec395ee2 100644
--- a/gui/widgets/list.h
+++ b/gui/widgets/list.h
@@ -154,6 +154,7 @@ public:
 	static Common::U32String getThemeColor(ThemeEngine::FontColor color);
 	static ThemeEngine::FontColor getThemeColor(const Common::U32String &color);
 	static Common::U32String stripGUIformatting(const Common::U32String &str);
+	static Common::U32String escapeString(const Common::U32String &str);
 
 protected:
 	void drawWidget() override;




More information about the Scummvm-git-logs mailing list