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

sev- sev at scummvm.org
Tue Jun 29 18:42:50 UTC 2021


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:
c11fedb47e COMMON: Add an optional parameter to tag2str() for printing non-printables


Commit: c11fedb47e82da56b193a24222816addae13df1c
    https://github.com/scummvm/scummvm/commit/c11fedb47e82da56b193a24222816addae13df1c
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2021-06-29T20:42:40+02:00

Commit Message:
COMMON: Add an optional parameter to tag2str() for printing non-printables

Changed paths:
    common/str.cpp
    common/str.h


diff --git a/common/str.cpp b/common/str.cpp
index fbd9a03744..06876598de 100644
--- a/common/str.cpp
+++ b/common/str.cpp
@@ -689,19 +689,24 @@ void replace(Common::String &source, const Common::String &what, const Common::S
 	}
 }
 
-String tag2string(uint32 tag) {
-	char str[5];
-	str[0] = (char)(tag >> 24);
-	str[1] = (char)(tag >> 16);
-	str[2] = (char)(tag >> 8);
-	str[3] = (char)tag;
-	str[4] = '\0';
-	// Replace non-printable chars by dot
-	for (int i = 0; i < 4; ++i) {
-		if (!Common::isPrint(str[i]))
-			str[i] = '.';
+String tag2string(uint32 tag, bool nonPrintable) {
+	Common::String res;
+
+	for (int i = 3; i >= 0; i--) {
+		byte b = (tag >> (8 * i)) & 0xff;
+
+		if (!Common::isPrint(b)) {
+			if (nonPrintable) {
+				res += Common::String::format("\\%03o", b);
+			} else {
+				res += '.';
+			}
+		} else {
+			res += b;
+		}
 	}
-	return String(str);
+
+	return res;
 }
 
 #endif
diff --git a/common/str.h b/common/str.h
index 8ad41d92e1..b354919f86 100644
--- a/common/str.h
+++ b/common/str.h
@@ -349,8 +349,11 @@ void replace(Common::String &source, const Common::String &what, const Common::S
  * Take a 32 bit value and turn it into a four character string, where each of
  * the four bytes is turned into one character. Most significant byte is printed
  * first.
+ *
+ * @param tag tag value to convert
+ * @param nonPrintable indicate if non-printable characters need to be printed as octals
  */
-String tag2string(uint32 tag);
+String tag2string(uint32 tag, bool nonPrintable = false);
 
 /**
  * Copy up to size - 1 characters from src to dst and also zero terminate the
@@ -405,7 +408,7 @@ size_t strnlen(const char *src, size_t maxSize);
  * Note: It is *NOT* safe to do anything with the return value other than directly
  * copying or printing it.
  */
-#define tag2str(x)	Common::tag2string(x).c_str()
+#define tag2str(...)	Common::tag2string(__VA_ARGS__).c_str()
 
 /**
  * Converts string with all non-printable characters properly escaped




More information about the Scummvm-git-logs mailing list