From 5ed33e549e322fa6ebca07263c78263ed7514063 Mon Sep 17 00:00:00 2001 From: Darkvater Date: Sat, 13 Jan 2007 13:47:57 +0000 Subject: [PATCH] (svn r8093) -Codechange: Add a function to get a string representation of an MD5SUM and use it. --- src/newgrf_config.cpp | 5 +---- src/newgrf_gui.cpp | 9 ++------- src/string.cpp | 18 ++++++++++++++++++ src/string.h | 2 ++ 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index 1c49bd2075..3d711fcd5c 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -205,12 +205,9 @@ bool IsGoodGRFConfigList(void) 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; diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index d5934a4338..6884f043f4 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -41,9 +41,7 @@ static int parse_intlist(const char *p, int *items, int maxitems) 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 @@ static void ShowNewGRFInfo(const GRFConfig *c, uint x, uint y, uint w, bool show 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); diff --git a/src/string.cpp b/src/string.cpp index 872b6e08f4..d55d9a70e1 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -177,6 +177,24 @@ int CDECL vsnprintf(char *str, size_t size, const char *format, va_list ap) #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 */ diff --git a/src/string.h b/src/string.h index 2dbc06eee0..c3bc45280f 100644 --- a/src/string.h +++ b/src/string.h @@ -55,6 +55,8 @@ static inline int ttd_strnlen(const char *str, int maxlen) 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;