--- indidriver.c 2013-12-26 13:56:24.759786348 +1100 +++ indidriver.c 2013-12-28 15:14:55.048482943 +1100 @@ -1358,6 +1358,40 @@ fflush (stdout); } +/* output a string expanding special characters into xml/html escape sequences */ +int fputsXmlEscaped(char *s, FILE *stream) +{ + char* t = s; + int rval = 0; + + while (*t != '\0') + { + switch (*t) + { + case '&': + rval = fputs("&", stream); + break; + case '\'': + rval = fputs("'", stream); + break; + case '"': + rval = fputs(""", stream); + break; + case '<': + rval = fputs("<", stream); + break; + case '>': + rval = fputs(">", stream); + break; + default: + rval = putc(*t, stream); + break; + } + t++; + } + return rval; +} + /* tell client to create a new switch vector property */ void IDDefSwitch (const ISwitchVectorProperty *s, const char *fmt, ...) @@ -1391,7 +1425,10 @@ ISwitch *sp = &s->sp[i]; printf (" name); - printf (" label='%s'>\n", sp->label); + printf (" label='"); + fputsXmlEscaped (sp->label, stdout); + printf ("'>\n", sp->label); printf (" %s\n", sstateStr(sp->s)); printf (" \n"); }