}
-void escputs1(char *strbuf, int nbsp)
+/*
+ * Copy a string, escaping characters which have meaning in HTML. If
+ * nbsp is nonzero, spaces are converted to non-breaking spaces.
+ */
+void stresc(char *target, char *strbuf, int nbsp)
{
int a;
+ strcpy(target, "");
for (a = 0; a < strlen(strbuf); ++a) {
if (strbuf[a] == '<')
- wprintf("<");
+ strcat(target, "<");
else if (strbuf[a] == '>')
- wprintf(">");
+ strcat(target, ">");
else if (strbuf[a] == '&')
- wprintf("&");
+ strcat(target, "&");
else if (strbuf[a] == '\"')
- wprintf(""");
+ strcat(target, """);
else if (strbuf[a] == '\'')
- wprintf("'");
+ strcat(target, "'");
else if (strbuf[a] == LB)
- wprintf("<");
+ strcat(target, "<");
else if (strbuf[a] == RB)
- wprintf(">");
+ strcat(target, ">");
else if (strbuf[a] == QU)
- wprintf("\"");
+ strcat(target, "\"");
else if ((strbuf[a] == 32) && (nbsp == 1)) {
- wprintf(" ");
+ strcat(target, " ");
} else {
- wprintf("%c", strbuf[a]);
+ strncat(target, &strbuf[a], 1);
}
}
}
+void escputs1(char *strbuf, int nbsp)
+{
+ char buf[1024];
+ stresc(buf, strbuf, nbsp);
+ wprintf("%s", buf);
+}
+
void escputs(char *strbuf)
{
escputs1(strbuf, 0);
}
-
-
+/*
+ * Escape a string for feeding out as a URL.
+ * FIXME this is not threadsafe!
+ */
char *urlesc(char *strbuf)
{
int a, b, c;
char *ec = " #&;`'|*?-~<>^()[]{}$\\";
- static char outbuf[512];
+ static char outbuf[1024];
strcpy(outbuf, "");