← Commit list

0d2e0de42

Denys Vlasenko
Denys Vlasenko
2018-07-17
SUCCESS Duration: 154s

Subject

hush: faster/smaller code to check for presense of multiple chars in string

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

shell/hush.c+18 -13
@@ -5730,14 +5730,17 @@ static char *encode_then_expand_string(const char *str)
char *exp_str;
struct in_str input;
o_string dest = NULL_O_STRING;
+ const char *cp;
- if (!strchr(str, '$')
- && !strchr(str, '\\')
+ cp = str;
+ for (;;) {
+ if (!*cp) return NULL; /* string has no special chars */
+ if (*cp == '$') break;
+ if (*cp == '\\') break;
#if ENABLE_HUSH_TICK
- && !strchr(str, '`')
+ if (*cp == '`') break;
#endif
- ) {
- return NULL;
+ cp++;
}
/* We need to expand. Example:
@@ -5768,17 +5771,19 @@ static char *encode_then_expand_vararg(const char *str, int handle_squotes, int
char *exp_str;
struct in_str input;
o_string dest = NULL_O_STRING;
+ const char *cp;
- if (!strchr(str, '$')
- && !strchr(str, '\\')
- && !strchr(str, '\'')
-//todo:better code
- && !strchr(str, '"')
+ cp = str;
+ for (;;) {
+ if (!*cp) return NULL; /* string has no special chars */
+ if (*cp == '$') break;
+ if (*cp == '\\') break;
+ if (*cp == '\'') break;
+ if (*cp == '"') break;
#if ENABLE_HUSH_TICK
- && !strchr(str, '`')
+ if (*cp == '`') break;
#endif
- ) {
- return NULL;
+ cp++;
}
/* Expanding ARG in ${var#ARG}, ${var%ARG}, or ${var/ARG/ARG}.