(svn r1616) Introduce ttd_strlcat() and use it to de-uglify some piece of code in misc_cmd.
authortron
Sun, 23 Jan 2005 15:16:47 +0000
changeset 1115 55b99683ce51
parent 1114 74e602e41692
child 1116 242ddc1401b5
(svn r1616) Introduce ttd_strlcat() and use it to de-uglify some piece of code in misc_cmd.
While here rename the len parameter of ttd_strlcpy() to size, because it is a buffer size and not a string length.
Also add -Wwrite-strings to the Makefile, because the above mentioned piece of code was the only part which triggered this warning.
Makefile
functions.h
misc_cmd.c
ttd.c
--- a/Makefile	Sun Jan 23 14:15:42 2005 +0000
+++ b/Makefile	Sun Jan 23 15:16:47 2005 +0000
@@ -300,6 +300,7 @@
 # this is a workaround to test for >=
 ifeq ($(shell if test $(CC_VERSION) -ge 29; then echo true; fi), true)
   CFLAGS += -O -Wall -Wno-multichar -Wsign-compare -Wstrict-prototypes
+  CFLAGS += -Wwrite-strings
 endif
 ifeq ($(shell if test $(CC_VERSION) -ge 30; then echo true; fi), true)
   CFLAGS += -W -Wno-unused-parameter
--- a/functions.h	Sun Jan 23 14:15:42 2005 +0000
+++ b/functions.h	Sun Jan 23 15:16:47 2005 +0000
@@ -271,7 +271,8 @@
 };
 void ShowSaveLoadDialog(int mode);
 
-void ttd_strlcpy(char *dst, const char *src, size_t len);
+void ttd_strlcpy(char *dst, const char *src, size_t size);
+void ttd_strlcat(char *dst, const char *src, size_t size);
 
 // callback from drivers that is called if the game size changes dynamically
 void GameSizeChanged(void);
--- a/misc_cmd.c	Sun Jan 23 14:15:42 2005 +0000
+++ b/misc_cmd.c	Sun Jan 23 15:16:47 2005 +0000
@@ -158,10 +158,8 @@
 		DeleteName(old_str);
 
 		if (p->name_1 == STR_SV_UNNAMED) {
-			byte *s = " Transport";
-			byte *d = (byte*)_decode_parameters, b;
-			d--; do d++; while (*d);
-			do *d++ = b = *s++; while(d != (byte*)endof(_decode_parameters) && b != 0);
+			ttd_strlcat(
+				(char*)_decode_parameters, " Transport", sizeof(_decode_parameters));
 			DoCommandByTile(0, p1, 0, DC_EXEC, CMD_CHANGE_COMPANY_NAME);
 		}
 		MarkWholeScreenDirty();
--- a/ttd.c	Sun Jan 23 14:15:42 2005 +0000
+++ b/ttd.c	Sun Jan 23 15:16:47 2005 +0000
@@ -203,12 +203,20 @@
 	return best;
 }
 
-void ttd_strlcpy(char *dst, const char *src, size_t len)
+void ttd_strlcpy(char *dst, const char *src, size_t size)
 {
-	assert(len > 0);
-	while (--len && *src)
-		*dst++=*src++;
-	*dst = 0;
+	assert(size > 0);
+	while (--size > 0 && *src != '\0') *dst++ = *src++;
+	*dst = '\0';
+}
+
+void ttd_strlcat(char *dst, const char *src, size_t size)
+{
+	assert(size > 0);
+	for (; size > 0 && *dst != '\0'; --size, ++dst) {}
+	assert(size > 0);
+	while (--size > 0 && *src != '\0') *dst++ = *src++;
+	*dst = '\0';
 }
 
 static char *strecpy(char *dst, const char *src)