diff options
| author | Denys Vlasenko <dvlasenk@redhat.com> | 2010-09-16 11:50:46 +0200 |
|---|---|---|
| committer | Denys Vlasenko <dvlasenk@redhat.com> | 2010-09-16 11:50:46 +0200 |
| commit | bed7c81ea24e9e9ba2a897e233de2abefe611e8b (patch) | |
| tree | b18a4559e60300fecd7275c0088f8942441072a2 /shell/math.h | |
| parent | 063847d6bd23e184c409f37645ba90fa4d039ada (diff) | |
| download | busybox-w32-bed7c81ea24e9e9ba2a897e233de2abefe611e8b.tar.gz busybox-w32-bed7c81ea24e9e9ba2a897e233de2abefe611e8b.tar.bz2 busybox-w32-bed7c81ea24e9e9ba2a897e233de2abefe611e8b.zip | |
shell/math: deconvolute and explain ?: handling. Give better error message
function old new delta
arith_apply 1271 1283 +12
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'shell/math.h')
| -rw-r--r-- | shell/math.h | 20 |
1 files changed, 4 insertions, 16 deletions
diff --git a/shell/math.h b/shell/math.h index 2dcab130d..2d305eb12 100644 --- a/shell/math.h +++ b/shell/math.h | |||
| @@ -9,19 +9,13 @@ | |||
| 9 | 9 | ||
| 10 | /* The math library has just one function: | 10 | /* The math library has just one function: |
| 11 | * | 11 | * |
| 12 | * arith_t arith(arith_state_t *states, const char *expr); | 12 | * arith_t arith(arith_state_t *state, const char *expr); |
| 13 | * | 13 | * |
| 14 | * The expr argument is the math string to parse. All normal expansions must | 14 | * The expr argument is the math string to parse. All normal expansions must |
| 15 | * be done already. i.e. no dollar symbols should be present. | 15 | * be done already. i.e. no dollar symbols should be present. |
| 16 | * | 16 | * |
| 17 | * The state argument is a pointer to a struct of hooks for your shell (see below), | 17 | * The state argument is a pointer to a struct of hooks for your shell (see below), |
| 18 | * and a semi-detailed error code. Currently, those values are (for | 18 | * and an error message string (NULL if no error). |
| 19 | * compatibility, you should assume all negative values are errors): | ||
| 20 | * 0 - no errors (yay!) | ||
| 21 | * -1 - unspecified problem | ||
| 22 | * -2 - divide by zero | ||
| 23 | * -3 - exponent less than 0 | ||
| 24 | * -5 - expression recursion loop detected | ||
| 25 | * | 19 | * |
| 26 | * The function returns the answer to the expression. So if you called it | 20 | * The function returns the answer to the expression. So if you called it |
| 27 | * with the expression: | 21 | * with the expression: |
| @@ -64,12 +58,6 @@ | |||
| 64 | * the regex (in C locale): ^[a-zA-Z_][a-zA-Z_0-9]* | 58 | * the regex (in C locale): ^[a-zA-Z_][a-zA-Z_0-9]* |
| 65 | */ | 59 | */ |
| 66 | 60 | ||
| 67 | /* To make your life easier when dealing with optional 64bit math support, | ||
| 68 | * rather than assume that the type is "signed long" and you can always | ||
| 69 | * use "%ld" to scan/print the value, use the arith_t helper defines. See | ||
| 70 | * below for the exact things that are available. | ||
| 71 | */ | ||
| 72 | |||
| 73 | #ifndef SHELL_MATH_H | 61 | #ifndef SHELL_MATH_H |
| 74 | #define SHELL_MATH_H 1 | 62 | #define SHELL_MATH_H 1 |
| 75 | 63 | ||
| @@ -77,11 +65,11 @@ PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN | |||
| 77 | 65 | ||
| 78 | #if ENABLE_SH_MATH_SUPPORT_64 | 66 | #if ENABLE_SH_MATH_SUPPORT_64 |
| 79 | typedef long long arith_t; | 67 | typedef long long arith_t; |
| 80 | #define arith_t_fmt "%lld" | 68 | #define ARITH_FMT "%lld" |
| 81 | #define strto_arith_t strtoull | 69 | #define strto_arith_t strtoull |
| 82 | #else | 70 | #else |
| 83 | typedef long arith_t; | 71 | typedef long arith_t; |
| 84 | #define arith_t_fmt "%ld" | 72 | #define ARITH_FMT "%ld" |
| 85 | #define strto_arith_t strtoul | 73 | #define strto_arith_t strtoul |
| 86 | #endif | 74 | #endif |
| 87 | 75 | ||
