(svn r3379) -Fix: protect showhelp against any possible overflow
authortruelight
Fri, 06 Jan 2006 22:52:31 +0000
changeset 2831 510c08cd43d2
parent 2830 873da5589c15
child 2832 acf08469a0c6
(svn r3379) -Fix: protect showhelp against any possible overflow
-Add: [ FS#15 ] Added revision / version at top of help (./openttd -h)
driver.c
driver.h
openttd.c
--- a/driver.c	Fri Jan 06 22:49:00 2006 +0000
+++ b/driver.c	Fri Jan 06 22:52:31 2006 +0000
@@ -206,16 +206,23 @@
 }
 
 
-void GetDriverList(char* p)
+int GetDriverList(char* p, int size)
 {
 	const DriverClass* dc;
+	int pos;
 
 	for (dc = _driver_classes; dc != endof(_driver_classes); dc++) {
 		const DriverDesc* dd;
 
-		p += sprintf(p, "List of %s drivers:\n", dc->name);
+		pos = snprintf(p, size, "List of %s drivers:\n", dc->name);
+		p += pos; size -= pos;
 		for (dd = dc->descs; dd->name != NULL; dd++) {
-			p += sprintf(p, "%10s: %s\n", dd->name, dd->longname);
+			pos = snprintf(p, size, "%10s: %s\n", dd->name, dd->longname);
+			p += pos; size -= pos;
 		}
+		pos = snprintf(p, size, "\n");
+		p += pos; size -= pos;
 	}
+
+	return size;
 }
--- a/driver.h	Fri Jan 06 22:49:00 2006 +0000
+++ b/driver.h	Fri Jan 06 22:52:31 2006 +0000
@@ -8,6 +8,6 @@
 bool GetDriverParamBool(const char* const* parm, const char* name);
 int GetDriverParamInt(const char* const* parm, const char* name, int def);
 
-void GetDriverList(char* p);
+int GetDriverList(char* p, int size);
 
 #endif /* DRIVER_H */
--- a/openttd.c	Fri Jan 06 22:49:00 2006 +0000
+++ b/openttd.c	Fri Jan 06 22:52:31 2006 +0000
@@ -115,11 +115,21 @@
 	return mem;
 }
 
+extern const char _openttd_revision[];
+
 static void showhelp(void)
 {
 	char buf[4096], *p;
+	int size, pos;
 
-	p = strecpy(buf,
+	p    = buf;
+	size = sizeof(buf);
+
+	pos = snprintf(p, size, "OpenTTD %s\n", _openttd_revision);
+	p += pos; size -= pos;
+	pos = snprintf(p, size,
+		"\n"
+		"\n"
 		"Command line options:\n"
 		"  -v drv              = Set video driver (see below)\n"
 		"  -s drv              = Set sound driver (see below)\n"
@@ -136,13 +146,14 @@
 		#if !defined(__MORPHOS__) && !defined(__AMIGA__)
 		"  -f                  = Fork into the background (dedicated only)\n"
 		#endif
-		"  -i                  = Force to use the DOS palette (use this if you see a lot of pink)\n"
-		"  -p #player          = Player as #player (deprecated) (network only)\n"
-		"  -c config_file      = Use 'config_file' instead of 'openttd.cfg'\n",
-		lastof(buf)
+		"  -i                  = Force to use the DOS palette\n"
+		"                          (use this if you see a lot of pink)\n"
+		"  -c config_file      = Use 'config_file' instead of 'openttd.cfg'\n"
+		"\n"
 	);
+	p += pos; size -= pos;
 
-	GetDriverList(p);
+	size = GetDriverList(p, size);
 
 	ShowInfo(buf);
 }