- register int count = 0;
- register unsigned char c;
- if (len <= 2) return buf;
- *buf++ = '"'; count++; len--;
- for(; (count < 40) && (len > 1) && (c = *cp);
- cp++, --len, ++count) {
- if (c == '\\' || c == '"') *buf++ = '\\';
- if (isprint(c)) *buf++ = c;
- else {
- sprintf(buf, "\\%03o", c);
- buf = index(buf, '\0');
- }
+ int len = 0;
+ char *out = xmalloc(4 * strlen(cp) + 3), *op = out;
+
+ *op++ = '"';
+ len++;
+ while (*cp)
+ {
+ if (*cp == '\\' || *cp == '"')
+ {
+ *op++ = '\\';
+ len++;