diff lwlink/lwlink.c @ 395:54499b799779

Q&D sanitization of symbols in map files and error messages in lwlink
author lost@l-w.ca
date Fri, 23 Jul 2010 16:40:51 -0600
parents 1c31e9005ff7
children
line wrap: on
line diff
--- a/lwlink/lwlink.c	Fri Jul 23 16:23:54 2010 -0600
+++ b/lwlink/lwlink.c	Fri Jul 23 16:40:51 2010 -0600
@@ -105,3 +105,40 @@
 	scriptls = lw_realloc(scriptls, sizeof(char *) * (nscriptls + 1));
 	scriptls[nscriptls++] = t;
 }
+
+char *sanitize_symbol(char *symbol)
+{
+	static char symbuf[2048];
+	char *sym = symbol;
+	char *tp = symbuf;
+	
+	for (; *sym; sym++)
+	{
+		int c1 = *sym;
+		if (c1 == '\\')
+		{
+			*tp++ = '\\';
+			*tp++ = '\\';
+			continue;
+		}
+		if (c1 < 32 || c1 > 126)
+		{
+			int c;
+			*tp++ = '\\';
+			c = c1 >> 4;
+			c += 48;
+			if (c > 57)
+				c += 7;
+			*tp++ = c;
+			c = c1 & 15;
+			c += 48;
+			if (c > 57)
+				c += 7;
+			*tp++ = c;
+			continue;
+		}
+		*tp++ = c1;
+	}
+	*tp = 0;
+	return symbuf;
+}