changeset 5634:395bfe9e1f77 draft

(svn r8093) -Codechange: Add a function to get a string representation of an MD5SUM and use it.
author Darkvater <Darkvater@openttd.org>
date Sat, 13 Jan 2007 13:47:57 +0000
parents a9c31d5be476
children 9beef9076349
files src/newgrf_config.cpp src/newgrf_gui.cpp src/string.cpp src/string.h
diffstat 4 files changed, 23 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/newgrf_config.cpp
+++ b/src/newgrf_config.cpp
@@ -205,12 +205,9 @@
 		const GRFConfig *f = FindGRFConfig(c->grfid, c->md5sum);
 		if (f == NULL) {
 			char buf[512], *p = buf;
-			uint i;
 
 			p += snprintf(p, lastof(buf) - p, "Couldn't find NewGRF %08X (%s) checksum ", BSWAP32(c->grfid), c->filename);
-			for (i = 0; i < lengthof(c->md5sum); i++) {
-				p += snprintf(p, lastof(buf) - p, "%02X", c->md5sum[i]);
-			}
+			md5sumToString(p, lastof(buf), c->md5sum);
 			ShowInfo(buf);
 
 			res = false;
--- a/src/newgrf_gui.cpp
+++ b/src/newgrf_gui.cpp
@@ -41,9 +41,7 @@
 
 static void ShowNewGRFInfo(const GRFConfig *c, uint x, uint y, uint w, bool show_params)
 {
-	char buff[512];
-	char *s;
-	uint i;
+	char buff[256];
 
 	/* Draw filename or not if it is not known (GRF sent over internet) */
 	if (c->filename != NULL) {
@@ -57,10 +55,7 @@
 	y += DrawStringMultiLine(x, y, STR_NEWGRF_GRF_ID, w);
 
 	/* Prepare and draw MD5 sum */
-	s = buff;
-	for (i = 0; i < lengthof(c->md5sum); i++) {
-		s += snprintf(s, lastof(buff) - s, "%02X", c->md5sum[i]);
-	}
+	md5sumToString(buff, lastof(buff), c->md5sum);
 	SetDParamStr(0, buff);
 	y += DrawStringMultiLine(x, y, STR_NEWGRF_MD5SUM, w);
 
--- a/src/string.cpp
+++ b/src/string.cpp
@@ -177,6 +177,24 @@
 #endif /* WIN32 */
 
 
+/** Convert the md5sum to a hexadecimal string representation
+ * @param buf buffer to put the md5sum into
+ * @param last last character of buffer (usually lastof(buf))
+ * @param md5sum the md5sum itself
+ * @return a pointer to the next character after the md5sum */
+char *md5sumToString(char *buf, const char *last, const uint8 md5sum[16])
+{
+	char *p = buf;
+
+	for (uint i = 0; i < 16; i++) {
+		p += snprintf(p, last + 1 - p, "%02X", md5sum[i]);
+		if (p >= last) break;
+	}
+
+	return p;
+}
+
+
 /* UTF-8 handling routines */
 
 
--- a/src/string.h
+++ b/src/string.h
@@ -55,6 +55,8 @@
 	return t - str;
 }
 
+/** Convert the md5sum number to a 'hexadecimal' string, return next pos in buffer */
+char *md5sumToString(char *buf, const char *last, const uint8 md5sum[16]);
 
 typedef uint32 WChar;