mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-27 11:55:06 +00:00
sh: Improve internal-representation-to-text code to avoid binary output.
The code to translate the internal representation to text did not know about various additions to the internal representation since the original ash and therefore wrote binary stuff to the terminal. The code is used in the jobs command and similar output. Note that the output is far from complete and mostly serves for recognition purposes.
This commit is contained in:
parent
21866e59c2
commit
c67712a089
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=216246
@ -1314,13 +1314,46 @@ cmdputs(const char *s)
|
||||
if (--cmdnleft > 0)
|
||||
*q++ = '{';
|
||||
subtype = *p++;
|
||||
if ((subtype & VSTYPE) == VSLENGTH && --cmdnleft > 0)
|
||||
*q++ = '#';
|
||||
} else if (c == '=' && subtype != 0) {
|
||||
*q++ = "}-+?="[(subtype & VSTYPE) - VSNORMAL];
|
||||
*q = "}-+?=##%%\0X"[(subtype & VSTYPE) - VSNORMAL];
|
||||
if (*q)
|
||||
q++;
|
||||
else
|
||||
cmdnleft++;
|
||||
if (((subtype & VSTYPE) == VSTRIMLEFTMAX ||
|
||||
(subtype & VSTYPE) == VSTRIMRIGHTMAX) &&
|
||||
--cmdnleft > 0)
|
||||
*q = q[-1], q++;
|
||||
subtype = 0;
|
||||
} else if (c == CTLENDVAR) {
|
||||
*q++ = '}';
|
||||
} else if (c == CTLBACKQ || c == CTLBACKQ+CTLQUOTE)
|
||||
cmdnleft++; /* ignore it */
|
||||
} else if (c == CTLBACKQ || c == CTLBACKQ+CTLQUOTE) {
|
||||
cmdnleft -= 5;
|
||||
if (cmdnleft > 0) {
|
||||
*q++ = '$';
|
||||
*q++ = '(';
|
||||
*q++ = '.';
|
||||
*q++ = '.';
|
||||
*q++ = '.';
|
||||
*q++ = ')';
|
||||
}
|
||||
} else if (c == CTLARI) {
|
||||
cmdnleft -= 2;
|
||||
if (cmdnleft > 0) {
|
||||
*q++ = '$';
|
||||
*q++ = '(';
|
||||
*q++ = '(';
|
||||
}
|
||||
p++;
|
||||
} else if (c == CTLENDARI) {
|
||||
if (--cmdnleft > 0) {
|
||||
*q++ = ')';
|
||||
*q++ = ')';
|
||||
}
|
||||
} else if (c == CTLQUOTEMARK || c == CTLQUOTEEND)
|
||||
cmdnleft++; /* ignore */
|
||||
else
|
||||
*q++ = c;
|
||||
if (--cmdnleft <= 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user