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 #include -#ifdef HAVE_STDINT_H -# include -#endif +#include #include #include #include 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 #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); } }