svn commit: [25984] trunk/busybox/shell
vda at busybox.net
vda at busybox.net
Mon Apr 6 12:24:58 UTC 2009
Author: vda
Date: 2009-04-06 12:24:58 +0000 (Mon, 06 Apr 2009)
New Revision: 25984
Log:
hush: more efficient filtering of "safe" arithmetic
function old new delta
expand_variables 2170 2147 -23
Modified:
trunk/busybox/shell/hush.c
Changeset:
Modified: trunk/busybox/shell/hush.c
===================================================================
--- trunk/busybox/shell/hush.c 2009-04-06 12:09:55 UTC (rev 25983)
+++ trunk/busybox/shell/hush.c 2009-04-06 12:24:58 UTC (rev 25984)
@@ -1782,24 +1782,15 @@
debug_printf_subst("ARITH '%s' first_ch %x\n", arg, first_ch);
/* Optional: skip expansion if expr is simple ("a + 3", "i++" etc) */
- exp_str = arg;
- while (1) {
- unsigned char c = *exp_str++;
- if (c == '\0') {
- exp_str = NULL;
- goto skip_expand;
- }
- if (isdigit(c))
- continue;
- if (strchr(" \t+-*/%<>()_", c) != NULL)
- continue;
- c |= 0x20; /* tolower */
- if (c >= 'a' && c <= 'z')
- continue;
- break;
- }
- /* We need to expand. Example: "echo $(($a + 1)) $((1 + $((2)) ))" */
- {
+ exp_str = NULL;
+ if (strchr(arg, '$') != NULL
+#if ENABLE_HUSH_TICK
+ || strchr(arg, '`') != NULL
+#endif
+ ) {
+ /* We need to expand. Example:
+ * echo $(($a + `echo 1`)) $((1 + $((2)) ))
+ */
struct in_str input;
o_string dest = NULL_O_STRING;
@@ -1810,7 +1801,6 @@
//bb_error_msg("'%s' -> '%s'", dest.data, exp_str);
o_free(&dest);
}
- skip_expand:
hooks.lookupvar = get_local_var_value;
hooks.setvar = arith_set_local_var;
hooks.endofname = endofname;
More information about the busybox-cvs
mailing list