projects
/
oweals
/
busybox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
scripts/randomtest: update things which can't be tested on uclibc
[oweals/busybox.git]
/
shell
/
match.h
diff --git
a/shell/match.h
b/shell/match.h
index 3fc4de340c7f53996bad658d6d10b97f6a0ff222..aa393ed1ab8247b803cbbb35ff11e4f167d9e472 100644
(file)
--- a/
shell/match.h
+++ b/
shell/match.h
@@
-1,26
+1,34
@@
/* match.h - interface to shell ##/%% matching code */
/* match.h - interface to shell ##/%% matching code */
+#ifndef SHELL_MATCH_H
+#define SHELL_MATCH_H 1
+
PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
-typedef char *(*scan_t)(char *string, char *match, bool zero);
+//TODO! Why ash.c still uses internal version?!
+
+enum {
+ SCAN_MOVE_FROM_LEFT = (1 << 0),
+ SCAN_MOVE_FROM_RIGHT = (1 << 1),
+ SCAN_MATCH_LEFT_HALF = (1 << 2),
+ SCAN_MATCH_RIGHT_HALF = (1 << 3),
+};
-char *scanleft(char *string, char *match, bool zero);
-char *scanright(char *string, char *match, bool zero);
+char* FAST_FUNC scan_and_match(char *string, const char *pattern, unsigned flags);
-static inline
scan_t pick_scan(char op1, char op2, bool *zero
)
+static inline
unsigned pick_scan(char op1, char op2
)
{
{
- /* # - scanleft
- * ## - scanright
- * % - scanright
- * %% - scanleft
- */
+ unsigned scan_flags;
if (op1 == '#') {
if (op1 == '#') {
- *zero = true;
-
return op1 == op2 ? scanright : scanleft
;
- } else {
- *zero = false;
-
return op1 == op2 ? scanleft : scanright
;
+ scan_flags = SCAN_MATCH_LEFT_HALF +
+
(op1 == op2 ? SCAN_MOVE_FROM_RIGHT : SCAN_MOVE_FROM_LEFT)
;
+ } else {
/* % */
+ scan_flags = SCAN_MATCH_RIGHT_HALF +
+
(op1 == op2 ? SCAN_MOVE_FROM_LEFT : SCAN_MOVE_FROM_RIGHT)
;
}
}
+ return scan_flags;
}
POP_SAVED_FUNCTION_VISIBILITY
}
POP_SAVED_FUNCTION_VISIBILITY
+
+#endif