aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2025-08-08 12:40:44 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2025-08-08 12:40:44 +0200
commit5b3405594a8925d4590c21e02adeabf85d34d93e (patch)
tree287c35616892b8a3d4f72141c9fc235fd474c8f7 /shell
parent422f4ede6f6c83e1d0693c43e5da1d1b070588aa (diff)
downloadbusybox-w32-5b3405594a8925d4590c21e02adeabf85d34d93e.tar.gz
busybox-w32-5b3405594a8925d4590c21e02adeabf85d34d93e.tar.bz2
busybox-w32-5b3405594a8925d4590c21e02adeabf85d34d93e.zip
ash: reuse vstype_suffix[] in debug code, shrink it
function old new delta vstype_suffix - 39 +39 static.vstype 42 - -42 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 0/0 up/down: 39/-42) Total: -3 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rw-r--r--shell/ash.c72
1 files changed, 37 insertions, 35 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 0f8c2a66a..0752629ee 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -852,29 +852,47 @@ out2str(const char *p)
852# define CTL_LAST CTLFROMPROC 852# define CTL_LAST CTLFROMPROC
853#endif 853#endif
854 854
855/* variable substitution byte (follows CTLVAR) */ 855/* ${VAR[ops]} encoding is CTLVAR,<type_byte>,"VARNAME=",<ops_encoded(details?)>,CTLENDVAR */
856#define VSTYPE 0x0f /* type of variable substitution */ 856/* variable type byte (follows CTLVAR) */
857#define VSNUL 0x10 /* colon--treat the empty string as unset */ 857#define VSTYPE 0x0f /* type of variable substitution */
858 858#define VSNUL 0x10 /* colon: the op is one of :- :+ :? := */
859/* values of VSTYPE field */ 859/* values of VSTYPE field. The first 5 must be in this order, "}-+?=" string is used elsewhere to index into them */
860#define VSNORMAL 0x1 /* normal variable: $var or ${var} */ 860#define VSNORMAL 0x1 /* $var or ${var} */
861#define VSMINUS 0x2 /* ${var-text} */ 861#define VSMINUS 0x2 /* ${var[:]-text} */
862#define VSPLUS 0x3 /* ${var+text} */ 862#define VSPLUS 0x3 /* ${var[:]+text} */
863#define VSQUESTION 0x4 /* ${var?message} */ 863#define VSQUESTION 0x4 /* ${var[:]?message} */
864#define VSASSIGN 0x5 /* ${var=text} */ 864#define VSASSIGN 0x5 /* ${var[:]=text} */
865#define VSTRIMRIGHT 0x6 /* ${var%pattern} */ 865#define VSTRIMRIGHT 0x6 /* ${var%pattern} */
866#define VSTRIMRIGHTMAX 0x7 /* ${var%%pattern} */ 866#define VSTRIMRIGHTMAX 0x7 /* ${var%%pattern} */
867#define VSTRIMLEFT 0x8 /* ${var#pattern} */ 867#define VSTRIMLEFT 0x8 /* ${var#pattern} */
868#define VSTRIMLEFTMAX 0x9 /* ${var##pattern} */ 868#define VSTRIMLEFTMAX 0x9 /* ${var##pattern} */
869#define VSLENGTH 0xa /* ${#var} */ 869#define VSLENGTH 0xa /* ${#var} */
870// unused yet 0xb /* unused */
871#if BASH_SUBSTR 870#if BASH_SUBSTR
872#define VSSUBSTR 0xc /* ${var:position:length} */ 871#define VSSUBSTR 0xb /* ${var:position:length} */
873#endif 872#endif
874#if BASH_PATTERN_SUBST 873#if BASH_PATTERN_SUBST
875#define VSREPLACE 0xd /* ${var/pattern/replacement} */ 874#define VSREPLACE 0xc /* ${var/pattern/replacement} */
876#define VSREPLACEALL 0xe /* ${var//pattern/replacement} */ 875#define VSREPLACEALL 0xd /* ${var//pattern/replacement} */
877#endif 876#endif
877static const char vstype_suffix[][3] ALIGN1 = {
878 [VSNORMAL - VSNORMAL] = "}", // $var or ${var}
879 [VSMINUS - VSNORMAL] = "-", // ${var-text}
880 [VSPLUS - VSNORMAL] = "+", // ${var+text}
881 [VSQUESTION - VSNORMAL] = "?", // ${var?message}
882 [VSASSIGN - VSNORMAL] = "=", // ${var=text}
883 [VSTRIMRIGHT - VSNORMAL] = "%", // ${var%pattern}
884 [VSTRIMRIGHTMAX - VSNORMAL] = "%%",// ${var%%pattern}
885 [VSTRIMLEFT - VSNORMAL] = "#", // ${var#pattern}
886 [VSTRIMLEFTMAX - VSNORMAL] = "##",// ${var##pattern}
887 [VSLENGTH - VSNORMAL] = "", // ${#var}
888#if BASH_SUBSTR
889 [VSSUBSTR - VSNORMAL] = ":", // ${var:position:length}
890#endif
891#if BASH_PATTERN_SUBST
892 [VSREPLACE - VSNORMAL] = "/", // ${var/pattern/replacement}
893 [VSREPLACEALL - VSNORMAL] = "//",// ${var//pattern/replacement}
894#endif
895};
878 896
879static const char dolatstr[] ALIGN1 = { 897static const char dolatstr[] ALIGN1 = {
880 CTLQUOTEMARK, CTLVAR, VSNORMAL, '@', '=', CTLQUOTEMARK, '\0' 898 CTLQUOTEMARK, CTLVAR, VSNORMAL, '@', '=', CTLQUOTEMARK, '\0'
@@ -1248,7 +1266,9 @@ sharg(union node *arg, FILE *fp)
1248 1266
1249 if (subtype & VSNUL) 1267 if (subtype & VSNUL)
1250 putc(':', fp); 1268 putc(':', fp);
1251 1269#if 1
1270 fputs(vstype_suffix[(subtype & VSTYPE) - VSNORMAL], fp);
1271#else
1252 switch (subtype & VSTYPE) { 1272 switch (subtype & VSTYPE) {
1253 case VSNORMAL: 1273 case VSNORMAL:
1254 putc('}', fp); 1274 putc('}', fp);
@@ -1284,6 +1304,7 @@ sharg(union node *arg, FILE *fp)
1284 default: 1304 default:
1285 out1fmt("<subtype %d>", subtype); 1305 out1fmt("<subtype %d>", subtype);
1286 } 1306 }
1307#endif
1287 break; 1308 break;
1288 case CTLENDVAR: 1309 case CTLENDVAR:
1289 putc('}', fp); 1310 putc('}', fp);
@@ -4830,25 +4851,6 @@ static char *cmdnextc;
4830static void 4851static void
4831cmdputs(const char *s) 4852cmdputs(const char *s)
4832{ 4853{
4833 static const char vstype[][3] ALIGN1 = {
4834 [VSNORMAL - VSNORMAL] = "}", // $var or ${var}
4835 [VSMINUS - VSNORMAL] = "-", // ${var-text}
4836 [VSPLUS - VSNORMAL] = "+", // ${var+text}
4837 [VSQUESTION - VSNORMAL] = "?", // ${var?message}
4838 [VSASSIGN - VSNORMAL] = "=", // ${var=text}
4839 [VSTRIMRIGHT - VSNORMAL] = "%", // ${var%pattern}
4840 [VSTRIMRIGHTMAX - VSNORMAL] = "%%",// ${var%%pattern}
4841 [VSTRIMLEFT - VSNORMAL] = "#", // ${var#pattern}
4842 [VSTRIMLEFTMAX - VSNORMAL] = "##",// ${var##pattern}
4843 [VSLENGTH - VSNORMAL] = "", // ${#var}
4844#if BASH_SUBSTR
4845 [VSSUBSTR - VSNORMAL] = ":", // ${var:position:length}
4846#endif
4847#if BASH_PATTERN_SUBST
4848 [VSREPLACE - VSNORMAL] = "/", // ${var/pattern/replacement}
4849 [VSREPLACEALL - VSNORMAL] = "//",// ${var//pattern/replacement}
4850#endif
4851 };
4852 const char *p, *str; 4854 const char *p, *str;
4853 char cc[2]; 4855 char cc[2];
4854 char *nextc; 4856 char *nextc;
@@ -4914,7 +4916,7 @@ cmdputs(const char *s)
4914 /* We are in variable name */ 4916 /* We are in variable name */
4915 if ((subtype & VSTYPE) != VSNORMAL) 4917 if ((subtype & VSTYPE) != VSNORMAL)
4916 quoted <<= 1; 4918 quoted <<= 1;
4917 str = vstype[(subtype & VSTYPE) - VSNORMAL]; 4919 str = vstype_suffix[(subtype & VSTYPE) - VSNORMAL];
4918 if (!(subtype & VSNUL)) 4920 if (!(subtype & VSNUL))
4919 goto dostr; 4921 goto dostr;
4920 c = ':'; 4922 c = ':';