| 2020 | } |
| 2021 | |
| 2022 | static int numericConfigSet(typeData data, sds value, int update, const char **err) { |
| 2023 | long long ll, prev = 0; |
| 2024 | if (data.numeric.is_memory) { |
| 2025 | int memerr; |
| 2026 | ll = memtoll(value, &memerr); |
| 2027 | if (memerr || ll < 0) { |
| 2028 | *err = "argument must be a memory value"; |
| 2029 | return 0; |
| 2030 | } |
| 2031 | } else { |
| 2032 | if (!string2ll(value, sdslen(value),&ll)) { |
| 2033 | *err = "argument couldn't be parsed into an integer" ; |
| 2034 | return 0; |
| 2035 | } |
| 2036 | } |
| 2037 | |
| 2038 | if (!numericBoundaryCheck(data, ll, err)) |
| 2039 | return 0; |
| 2040 | |
| 2041 | if (data.numeric.is_valid_fn && !data.numeric.is_valid_fn(ll, err)) |
| 2042 | return 0; |
| 2043 | |
| 2044 | GET_NUMERIC_TYPE(prev) |
| 2045 | SET_NUMERIC_TYPE(ll) |
| 2046 | |
| 2047 | if (update && data.numeric.update_fn && !data.numeric.update_fn(ll, prev, err)) { |
| 2048 | SET_NUMERIC_TYPE(prev) |
| 2049 | return 0; |
| 2050 | } |
| 2051 | return 1; |
| 2052 | } |
| 2053 | |
| 2054 | static void numericConfigGet(client *c, typeData data) { |
| 2055 | char buf[128]; |
nothing calls this directly
no test coverage detected