static char path[MAXPATHLEN + 1];
-static void
+static int
string_quote(const char *instr, char *outstr, int len, int size)
{
const unsigned char *ustr = (const unsigned char *) instr;
else if (xflag) {
for (i = 0; i < size; ++i) {
c = ustr[i];
+ if (len < 0 && i == size - 2 && c != '\0')
+ ++i;
if (len < 0 && c == '\0')
break;
if (!isprint(c) && !isspace(c)) {
} else {
for (i = 0; i < size; ++i) {
c = ustr[i];
+ if (len < 0 && i == size - 2 && c != '\0')
+ ++i;
if (len < 0 && c == '\0')
break;
switch (c) {
*s++ = '\"';
*s = '\0';
+
+ /* Return nonzero if the string was unterminated. */
+ return i == size;
}
void
if (trunc)
path[n] = '\0';
- string_quote(path, outstr, -1, n);
- if (trunc)
+ if (string_quote(path, outstr, -1, n + 1) || trunc)
strcat(outstr, "...");
tprintf("%s", outstr);
}
{
static char *str = NULL;
static char *outstr;
- int size, trunc;
+ int size;
if (!addr) {
tprintf("NULL");
}
}
- trunc = size > max_strlen && str[--size] != 0;
- string_quote(str, outstr, len, size);
- if (size < len || (len < 0 && trunc))
+ if (string_quote(str, outstr, len, size))
strcat(outstr, "...");
tprintf("%s", outstr);