diff options
author | Werner Koch <[email protected]> | 2016-08-11 18:46:51 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2016-08-11 19:32:55 +0000 |
commit | 0698324cde3e0cef7eeb6cfd1640c5eefdf13698 (patch) | |
tree | 36a20b69d270381daee74443a17a4108fb407090 | |
parent | common: Remove compatibility code. (diff) | |
download | gnupg-0698324cde3e0cef7eeb6cfd1640c5eefdf13698.tar.gz gnupg-0698324cde3e0cef7eeb6cfd1640c5eefdf13698.zip |
common: New function string_to_u64.
* common/stringhelp.c (string_to_u64): New.
* dirmngr/http.c (longcounter_t): Remove.
(struct cookie_s): Change content_length to uint64_t.
(parse_response): Use string_to_u64.
--
Meanwhile we allow some C99 features including stdint.h. Thus we can
simplify things now.
Signed-off-by: Werner Koch <[email protected]>
-rw-r--r-- | common/exechelp-posix.c | 4 | ||||
-rw-r--r-- | common/stringhelp.c | 20 | ||||
-rw-r--r-- | common/stringhelp.h | 2 | ||||
-rw-r--r-- | dirmngr/http.c | 13 |
4 files changed, 25 insertions, 14 deletions
diff --git a/common/exechelp-posix.c b/common/exechelp-posix.c index b1b56f30c..943f20aa5 100644 --- a/common/exechelp-posix.c +++ b/common/exechelp-posix.c @@ -36,9 +36,7 @@ #include <stdio.h> #include <stdlib.h> -#ifdef HAVE_STDINT_H -# include <stdint.h> -#endif +#include <stdint.h> #include <string.h> #include <errno.h> #include <assert.h> diff --git a/common/stringhelp.c b/common/stringhelp.c index 990fc3577..b5d9f4cf6 100644 --- a/common/stringhelp.c +++ b/common/stringhelp.c @@ -58,6 +58,7 @@ #define tohex_lower(n) ((n) < 10 ? ((n) + '0') : (((n) - 10) + 'a')) + /* Sometimes we want to avoid mixing slashes and backslashes on W32 and prefer backslashes. There is usual no problem with mixing them, however a very few W32 API calls can't grok plain slashes. @@ -660,6 +661,25 @@ compare_filenames (const char *a, const char *b) } +/* Convert a base-10 number in STRING into a 64 bit unsigned int + * value. Leading white spaces are skipped but no error checking is + * done. Thus it is similar to atoi(). */ +uint64_t +string_to_u64 (const char *string) +{ + uint64_t val = 0; + + while (spacep (string)) + string++; + for (; digitp (string); string++) + { + val *= 10; + val += *string - '0'; + } + return val; +} + + /* Convert 2 hex characters at S to a byte value. Return this value or -1 if there is an error. */ int diff --git a/common/stringhelp.h b/common/stringhelp.h index adf2f2060..79d228415 100644 --- a/common/stringhelp.h +++ b/common/stringhelp.h @@ -33,6 +33,7 @@ #ifndef GNUPG_COMMON_STRINGHELP_H #define GNUPG_COMMON_STRINGHELP_H +#include <stdint.h> #include "types.h" /*-- stringhelp.c --*/ @@ -59,6 +60,7 @@ char *make_absfilename_try (const char *first_part, ...) GPGRT_ATTR_SENTINEL(0); int compare_filenames( const char *a, const char *b ); +uint64_t string_to_u64 (const char *string); int hextobyte (const char *s); size_t utf8_charcount (const char *s, int len); diff --git a/dirmngr/http.c b/dirmngr/http.c index a512e9ad6..ac8238caf 100644 --- a/dirmngr/http.c +++ b/dirmngr/http.c @@ -130,15 +130,6 @@ "01234567890@" \ "!\"#$%&'()*+,-./:;<=>?[\\]^_{|}~" -/* A long counter type. */ -#ifdef HAVE_STRTOULL -typedef unsigned long long longcounter_t; -# define counter_strtoul(a) strtoull ((a), NULL, 10) -#else -typedef unsigned long longcounter_t; -# define counter_strtoul(a) strtoul ((a), NULL, 10) -#endif - #if HTTP_USE_NTBTLS typedef ntbtls_t tls_session_t; # define USE_TLS 1 @@ -206,7 +197,7 @@ struct cookie_s /* The remaining content length and a flag telling whether to use the content length. */ - longcounter_t content_length; + uint64_t content_length; unsigned int content_length_valid:1; }; typedef struct cookie_s *cookie_t; @@ -2170,7 +2161,7 @@ parse_response (http_t hd) if (s) { cookie->content_length_valid = 1; - cookie->content_length = counter_strtoul (s); + cookie->content_length = string_to_u64 (s); } } |