(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.
--- 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)