diff options
author | Loïc Hoguin <[email protected]> | 2014-12-26 00:46:06 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2014-12-26 00:46:06 +0100 |
commit | 36650452b12aaf139cbb6d926f08adb9154b6b12 (patch) | |
tree | 19a2b6a802df98175f834dd0a2dfd8b624bf4f9c | |
parent | 53f68d6655bd8231d6d283cb8c45354930e081bb (diff) | |
download | cowlib-36650452b12aaf139cbb6d926f08adb9154b6b12.tar.gz cowlib-36650452b12aaf139cbb6d926f08adb9154b6b12.tar.bz2 cowlib-36650452b12aaf139cbb6d926f08adb9154b6b12.zip |
Simplify the code for parsing 1*DIGIT header values
Follow-up from the change that ensured we don't get any
extra whitespace following the value. We can now call
binary_to_integer/1 which is more efficient.
-rw-r--r-- | src/cow_http_hd.erl | 42 |
1 files changed, 8 insertions, 34 deletions
diff --git a/src/cow_http_hd.erl b/src/cow_http_hd.erl index a0a4726..48d4dbc 100644 --- a/src/cow_http_hd.erl +++ b/src/cow_http_hd.erl @@ -1271,17 +1271,10 @@ horse_parse_content_language() -> %% The value has at least one digit, and may be followed by whitespace. -spec parse_content_length(binary()) -> non_neg_integer(). -parse_content_length(<< $0 >>) -> 0; -parse_content_length(<< $0, R/bits >>) -> number(R, 0); -parse_content_length(<< $1, R/bits >>) -> number(R, 1); -parse_content_length(<< $2, R/bits >>) -> number(R, 2); -parse_content_length(<< $3, R/bits >>) -> number(R, 3); -parse_content_length(<< $4, R/bits >>) -> number(R, 4); -parse_content_length(<< $5, R/bits >>) -> number(R, 5); -parse_content_length(<< $6, R/bits >>) -> number(R, 6); -parse_content_length(<< $7, R/bits >>) -> number(R, 7); -parse_content_length(<< $8, R/bits >>) -> number(R, 8); -parse_content_length(<< $9, R/bits >>) -> number(R, 9). +parse_content_length(ContentLength) -> + I = binary_to_integer(ContentLength), + true = I >= 0, + I. -ifdef(TEST). prop_parse_content_length() -> @@ -1760,16 +1753,10 @@ parse_last_modified_test_() -> %% @doc Parse the Max-Forwards header. -spec parse_max_forwards(binary()) -> non_neg_integer(). -parse_max_forwards(<< $0, R/bits >>) -> number(R, 0); -parse_max_forwards(<< $1, R/bits >>) -> number(R, 1); -parse_max_forwards(<< $2, R/bits >>) -> number(R, 2); -parse_max_forwards(<< $3, R/bits >>) -> number(R, 3); -parse_max_forwards(<< $4, R/bits >>) -> number(R, 4); -parse_max_forwards(<< $5, R/bits >>) -> number(R, 5); -parse_max_forwards(<< $6, R/bits >>) -> number(R, 6); -parse_max_forwards(<< $7, R/bits >>) -> number(R, 7); -parse_max_forwards(<< $8, R/bits >>) -> number(R, 8); -parse_max_forwards(<< $9, R/bits >>) -> number(R, 9). +parse_max_forwards(MaxForwards) -> + I = binary_to_integer(MaxForwards), + true = I >= 0, + I. -ifdef(TEST). prop_parse_max_forwards() -> @@ -2388,19 +2375,6 @@ parse_upgrade_error_test_() -> %% Only return if the list is not empty. nonempty(L) when L =/= [] -> L. -%% Parse a number. -number(<< $0, R/bits >>, Acc) -> number(R, Acc * 10); -number(<< $1, R/bits >>, Acc) -> number(R, Acc * 10 + 1); -number(<< $2, R/bits >>, Acc) -> number(R, Acc * 10 + 2); -number(<< $3, R/bits >>, Acc) -> number(R, Acc * 10 + 3); -number(<< $4, R/bits >>, Acc) -> number(R, Acc * 10 + 4); -number(<< $5, R/bits >>, Acc) -> number(R, Acc * 10 + 5); -number(<< $6, R/bits >>, Acc) -> number(R, Acc * 10 + 6); -number(<< $7, R/bits >>, Acc) -> number(R, Acc * 10 + 7); -number(<< $8, R/bits >>, Acc) -> number(R, Acc * 10 + 8); -number(<< $9, R/bits >>, Acc) -> number(R, Acc * 10 + 9); -number(<<>>, Acc) -> Acc. - %% Parse a list of case insensitive tokens. token_ci_list(<<>>, Acc) -> lists:reverse(Acc); token_ci_list(<< $\s, R/bits >>, Acc) -> token_ci_list(R, Acc); |