aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2026-01-28 13:01:56 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2026-01-28 15:12:43 +0100
commit03d6d1014aad3389a67b3050aa1e5ca049d241c6 (patch)
treec2db7e104369982e4de531496606fcbf3baca1ea
parent56143ea63ffe67356e8935bc8b2dfbd57d82e973 (diff)
downloadbusybox-w32-03d6d1014aad3389a67b3050aa1e5ca049d241c6.tar.gz
busybox-w32-03d6d1014aad3389a67b3050aa1e5ca049d241c6.tar.bz2
busybox-w32-03d6d1014aad3389a67b3050aa1e5ca049d241c6.zip
ash: fix \ooo octal printout in DEBUG code
function old new delta ash_main 1624 1645 +21 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/ash.c28
1 files changed, 12 insertions, 16 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 02ed48017..2f30857d7 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -1190,7 +1190,7 @@ trace_vprintf(const char *fmt, va_list va)
1190 if (debug != 1) 1190 if (debug != 1)
1191 return; 1191 return;
1192 vfprintf(tracefile, fmt, va); 1192 vfprintf(tracefile, fmt, va);
1193 fprintf(tracefile, "\n"); 1193 putc('\n', tracefile);
1194} 1194}
1195 1195
1196static void 1196static void
@@ -1202,21 +1202,17 @@ trace_puts(const char *s)
1202} 1202}
1203 1203
1204static void 1204static void
1205trace_puts_quoted(char *s) 1205trace_puts_quoted(char *p)
1206{ 1206{
1207 char *p;
1208 char c;
1209
1210 if (debug != 1) 1207 if (debug != 1)
1211 return; 1208 return;
1212 putc('"', tracefile); 1209 putc('"', tracefile);
1213 for (p = s; *p; p++) { 1210 for (; *p; p++) {
1214 switch ((unsigned char)*p) { 1211 unsigned char c = *p;
1212 switch (c) {
1215 case '\n': c = 'n'; goto backslash; 1213 case '\n': c = 'n'; goto backslash;
1216 case '\t': c = 't'; goto backslash; 1214 case '\t': c = 't'; goto backslash;
1217 case '\r': c = 'r'; goto backslash; 1215 case '\r': c = 'r'; goto backslash;
1218 case '\"': c = '\"'; goto backslash;
1219 case '\\': c = '\\'; goto backslash;
1220 case CTLESC: c = 'e'; goto backslash; 1216 case CTLESC: c = 'e'; goto backslash;
1221 case CTLVAR: c = 'v'; goto backslash; 1217 case CTLVAR: c = 'v'; goto backslash;
1222 case CTLBACKQ: c = 'q'; goto backslash; 1218 case CTLBACKQ: c = 'q'; goto backslash;
@@ -1224,21 +1220,21 @@ trace_puts_quoted(char *s)
1224 case CTLTOPROC: c = 'p'; goto backslash; 1220 case CTLTOPROC: c = 'p'; goto backslash;
1225 case CTLFROMPROC: c = 'P'; goto backslash; 1221 case CTLFROMPROC: c = 'P'; goto backslash;
1226#endif 1222#endif
1223 case '"':
1224 case '\\':
1227 backslash: 1225 backslash:
1228 putc('\\', tracefile); 1226 putc('\\', tracefile);
1229 putc(c, tracefile);
1230 break; 1227 break;
1231 default: 1228 default:
1232 if (*p >= ' ' && *p <= '~') 1229 if (c < ' ' || c > 0x7e) {
1233 putc(*p, tracefile);
1234 else {
1235 putc('\\', tracefile); 1230 putc('\\', tracefile);
1236 putc((*p >> 6) & 03, tracefile); 1231 putc((c >> 6) + '0', tracefile);
1237 putc((*p >> 3) & 07, tracefile); 1232 putc(((c >> 3) & 07) + '0', tracefile);
1238 putc(*p & 07, tracefile); 1233 c = (c & 07) + '0';
1239 } 1234 }
1240 break; 1235 break;
1241 } 1236 }
1237 putc(c, tracefile);
1242 } 1238 }
1243 putc('"', tracefile); 1239 putc('"', tracefile);
1244} 1240}