aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-11-29 01:37:46 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2009-11-29 01:37:46 +0100
commit76bc2d6deb8ae6e0b55663e18ff55b225ae54bb2 (patch)
tree10691c12bb126b371c554adb92ad48b7fab9e72b /shell
parent0337e038a9354706f4bcfd9954c0219b0b8faba0 (diff)
downloadbusybox-w32-76bc2d6deb8ae6e0b55663e18ff55b225ae54bb2.tar.gz
busybox-w32-76bc2d6deb8ae6e0b55663e18ff55b225ae54bb2.tar.bz2
busybox-w32-76bc2d6deb8ae6e0b55663e18ff55b225ae54bb2.zip
ash: remove last "signed char"; make SIT() clearer. -12 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rw-r--r--shell/ash.c135
1 files changed, 54 insertions, 81 deletions
diff --git a/shell/ash.c b/shell/ash.c
index dac73182e..b1fc304fe 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -2621,50 +2621,54 @@ pwdcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
2621#endif 2621#endif
2622 2622
2623#if ENABLE_SH_MATH_SUPPORT 2623#if ENABLE_SH_MATH_SUPPORT
2624static const uint8_t S_I_T[][4] = { 2624# define SIT_ITEM(a,b,c,d) (a | (b << 4) | (c << 8) | (d << 12))
2625# if ENABLE_ASH_ALIAS 2625static const uint16_t S_I_T[] =
2626 { CSPCL, CIGN, CIGN, CIGN }, /* 0, PEOA */
2627# endif
2628 { CSPCL, CWORD, CWORD, CWORD }, /* 1, ' ' */
2629 { CNL, CNL, CNL, CNL }, /* 2, \n */
2630 { CWORD, CCTL, CCTL, CWORD }, /* 3, !*-/:=?[]~ */
2631 { CDQUOTE, CENDQUOTE, CWORD, CWORD }, /* 4, '"' */
2632 { CVAR, CVAR, CWORD, CVAR }, /* 5, $ */
2633 { CSQUOTE, CWORD, CENDQUOTE, CWORD }, /* 6, "'" */
2634 { CSPCL, CWORD, CWORD, CLP }, /* 7, ( */
2635 { CSPCL, CWORD, CWORD, CRP }, /* 8, ) */
2636 { CBACK, CBACK, CCTL, CBACK }, /* 9, \ */
2637 { CBQUOTE, CBQUOTE, CWORD, CBQUOTE }, /* 10, ` */
2638 { CENDVAR, CENDVAR, CWORD, CENDVAR }, /* 11, } */
2639# ifndef USE_SIT_FUNCTION
2640 { CENDFILE, CENDFILE, CENDFILE, CENDFILE }, /* 12, PEOF */
2641 { CWORD, CWORD, CWORD, CWORD }, /* 13, 0-9A-Za-z */
2642 { CCTL, CCTL, CCTL, CCTL } /* 14, CTLESC ... */
2643# endif
2644};
2645#else 2626#else
2646static const uint8_t S_I_T[][3] = { 2627# define SIT_ITEM(a,b,c,d) (a | (b << 4) | (c << 8))
2647# if ENABLE_ASH_ALIAS 2628static const uint16_t S_I_T[] =
2648 { CSPCL, CIGN, CIGN }, /* 0, PEOA */ 2629#endif
2649# endif 2630{
2650 { CSPCL, CWORD, CWORD }, /* 1, ' ' */ 2631#if ENABLE_ASH_ALIAS
2651 { CNL, CNL, CNL }, /* 2, \n */ 2632 SIT_ITEM(CSPCL , CIGN , CIGN , CIGN ), /* 0, PEOA */
2652 { CWORD, CCTL, CCTL }, /* 3, !*-/:=?[]~ */ 2633#endif
2653 { CDQUOTE, CENDQUOTE, CWORD }, /* 4, '"' */ 2634 SIT_ITEM(CSPCL , CWORD , CWORD, CWORD ), /* 1, ' ' */
2654 { CVAR, CVAR, CWORD }, /* 5, $ */ 2635 SIT_ITEM(CNL , CNL , CNL , CNL ), /* 2, \n */
2655 { CSQUOTE, CWORD, CENDQUOTE }, /* 6, "'" */ 2636 SIT_ITEM(CWORD , CCTL , CCTL , CWORD ), /* 3, !*-/:=?[]~ */
2656 { CSPCL, CWORD, CWORD }, /* 7, ( */ 2637 SIT_ITEM(CDQUOTE , CENDQUOTE, CWORD, CWORD ), /* 4, '"' */
2657 { CSPCL, CWORD, CWORD }, /* 8, ) */ 2638 SIT_ITEM(CVAR , CVAR , CWORD, CVAR ), /* 5, $ */
2658 { CBACK, CBACK, CCTL }, /* 9, \ */ 2639 SIT_ITEM(CSQUOTE , CWORD , CENDQUOTE, CWORD), /* 6, "'" */
2659 { CBQUOTE, CBQUOTE, CWORD }, /* 10, ` */ 2640 SIT_ITEM(CSPCL , CWORD , CWORD, CLP ), /* 7, ( */
2660 { CENDVAR, CENDVAR, CWORD }, /* 11, } */ 2641 SIT_ITEM(CSPCL , CWORD , CWORD, CRP ), /* 8, ) */
2661# ifndef USE_SIT_FUNCTION 2642 SIT_ITEM(CBACK , CBACK , CCTL , CBACK ), /* 9, \ */
2662 { CENDFILE, CENDFILE, CENDFILE }, /* 12, PEOF */ 2643 SIT_ITEM(CBQUOTE , CBQUOTE , CWORD, CBQUOTE), /* 10, ` */
2663 { CWORD, CWORD, CWORD }, /* 13, 0-9A-Za-z */ 2644 SIT_ITEM(CENDVAR , CENDVAR , CWORD, CENDVAR), /* 11, } */
2664 { CCTL, CCTL, CCTL } /* 14, CTLESC ... */ 2645#ifndef USE_SIT_FUNCTION
2665# endif 2646 SIT_ITEM(CENDFILE, CENDFILE , CENDFILE, CENDFILE),/* 12, PEOF */
2647 SIT_ITEM(CWORD , CWORD , CWORD, CWORD ), /* 13, 0-9A-Za-z */
2648 SIT_ITEM(CCTL , CCTL , CCTL , CCTL ) /* 14, CTLESC ... */
2649#endif
2650#undef SIT_ITEM
2651};
2652/* Constants below must match table above */
2653enum {
2654#if ENABLE_ASH_ALIAS
2655 CSPCL_CIGN_CIGN_CIGN , /* 0 */
2656#endif
2657 CSPCL_CWORD_CWORD_CWORD , /* 1 */
2658 CNL_CNL_CNL_CNL , /* 2 */
2659 CWORD_CCTL_CCTL_CWORD , /* 3 */
2660 CDQUOTE_CENDQUOTE_CWORD_CWORD , /* 4 */
2661 CVAR_CVAR_CWORD_CVAR , /* 5 */
2662 CSQUOTE_CWORD_CENDQUOTE_CWORD , /* 6 */
2663 CSPCL_CWORD_CWORD_CLP , /* 7 */
2664 CSPCL_CWORD_CWORD_CRP , /* 8 */
2665 CBACK_CBACK_CCTL_CBACK , /* 9 */
2666 CBQUOTE_CBQUOTE_CWORD_CBQUOTE , /* 10 */
2667 CENDVAR_CENDVAR_CWORD_CENDVAR , /* 11 */
2668 CENDFILE_CENDFILE_CENDFILE_CENDFILE, /* 12 */
2669 CWORD_CWORD_CWORD_CWORD , /* 13 */
2670 CCTL_CCTL_CCTL_CCTL , /* 14 */
2666}; 2671};
2667#endif /* SH_MATH_SUPPORT */
2668 2672
2669/* c in SIT(c, syntax) must be an *unsigned char* or PEOA or PEOF, 2673/* c in SIT(c, syntax) must be an *unsigned char* or PEOA or PEOF,
2670 * caller must ensure proper cast on it if c is *char_ptr! 2674 * caller must ensure proper cast on it if c is *char_ptr!
@@ -2714,45 +2718,12 @@ SIT(int c, int syntax)
2714 } 2718 }
2715 indx = syntax_index_table[s - spec_symbls]; 2719 indx = syntax_index_table[s - spec_symbls];
2716 } 2720 }
2717 return S_I_T[indx][syntax]; 2721 return (S_I_T[indx] >> (syntax*4)) & 0xf;
2718} 2722}
2719 2723
2720#else /* !USE_SIT_FUNCTION */ 2724#else /* !USE_SIT_FUNCTION */
2721 2725
2722# if ENABLE_ASH_ALIAS 2726static const uint8_t syntax_index_table[] = {
2723# define CSPCL_CIGN_CIGN_CIGN 0
2724# define CSPCL_CWORD_CWORD_CWORD 1
2725# define CNL_CNL_CNL_CNL 2
2726# define CWORD_CCTL_CCTL_CWORD 3
2727# define CDQUOTE_CENDQUOTE_CWORD_CWORD 4
2728# define CVAR_CVAR_CWORD_CVAR 5
2729# define CSQUOTE_CWORD_CENDQUOTE_CWORD 6
2730# define CSPCL_CWORD_CWORD_CLP 7
2731# define CSPCL_CWORD_CWORD_CRP 8
2732# define CBACK_CBACK_CCTL_CBACK 9
2733# define CBQUOTE_CBQUOTE_CWORD_CBQUOTE 10
2734# define CENDVAR_CENDVAR_CWORD_CENDVAR 11
2735# define CENDFILE_CENDFILE_CENDFILE_CENDFILE 12
2736# define CWORD_CWORD_CWORD_CWORD 13
2737# define CCTL_CCTL_CCTL_CCTL 14
2738# else
2739# define CSPCL_CWORD_CWORD_CWORD 0
2740# define CNL_CNL_CNL_CNL 1
2741# define CWORD_CCTL_CCTL_CWORD 2
2742# define CDQUOTE_CENDQUOTE_CWORD_CWORD 3
2743# define CVAR_CVAR_CWORD_CVAR 4
2744# define CSQUOTE_CWORD_CENDQUOTE_CWORD 5
2745# define CSPCL_CWORD_CWORD_CLP 6
2746# define CSPCL_CWORD_CWORD_CRP 7
2747# define CBACK_CBACK_CCTL_CBACK 8
2748# define CBQUOTE_CBQUOTE_CWORD_CBQUOTE 9
2749# define CENDVAR_CENDVAR_CWORD_CENDVAR 10
2750# define CENDFILE_CENDFILE_CENDFILE_CENDFILE 11
2751# define CWORD_CWORD_CWORD_CWORD 12
2752# define CCTL_CCTL_CCTL_CCTL 13
2753# endif
2754
2755static const uint8_t syntax_index_table[258] = {
2756 /* BASESYNTAX_DQSYNTAX_SQSYNTAX_ARISYNTAX */ 2727 /* BASESYNTAX_DQSYNTAX_SQSYNTAX_ARISYNTAX */
2757 /* 0 */ CWORD_CWORD_CWORD_CWORD, 2728 /* 0 */ CWORD_CWORD_CWORD_CWORD,
2758 /* 1 */ CWORD_CWORD_CWORD_CWORD, 2729 /* 1 */ CWORD_CWORD_CWORD_CWORD,
@@ -3016,9 +2987,9 @@ static const uint8_t syntax_index_table[258] = {
3016 /* PEOF */ CENDFILE_CENDFILE_CENDFILE_CENDFILE, 2987 /* PEOF */ CENDFILE_CENDFILE_CENDFILE_CENDFILE,
3017}; 2988};
3018 2989
3019# define SIT(c, syntax) (S_I_T[syntax_index_table[c]][syntax]) 2990# define SIT(c, syntax) ((S_I_T[syntax_index_table[c]] >> (syntax*4)) & 0xf)
3020 2991
3021#endif /* USE_SIT_FUNCTION */ 2992#endif /* !USE_SIT_FUNCTION */
3022 2993
3023 2994
3024/* ============ Alias handling */ 2995/* ============ Alias handling */
@@ -10437,7 +10408,7 @@ noexpand(const char *text)
10437 continue; 10408 continue;
10438 if (c == CTLESC) 10409 if (c == CTLESC)
10439 text++; 10410 text++;
10440 else if (SIT((signed char)c, BASESYNTAX) == CCTL) 10411 else if (SIT(c, BASESYNTAX) == CCTL)
10441 return 0; 10412 return 0;
10442 } 10413 }
10443 return 1; 10414 return 1;
@@ -11398,8 +11369,10 @@ parsebackq: {
11398 continue; 11369 continue;
11399 } 11370 }
11400 if (pc != '\\' && pc != '`' && pc != '$' 11371 if (pc != '\\' && pc != '`' && pc != '$'
11401 && (!dblquote || pc != '"')) 11372 && (!dblquote || pc != '"')
11373 ) {
11402 STPUTC('\\', pout); 11374 STPUTC('\\', pout);
11375 }
11403 if (pc <= 255 /* not PEOA or PEOF */) { 11376 if (pc <= 255 /* not PEOA or PEOF */) {
11404 break; 11377 break;
11405 } 11378 }