From: Daniel P. Berrange Date: Sun, 20 Jan 2008 16:11:25 +0000 (+0000) Subject: Added xstrtol_ll and xstrtol_ull convenience functions X-Git-Tag: LIBVIRT_0_4_1~126 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d56aff5255d83620c91f4d6b7c5e6568345e3d4e;p=thirdparty%2Flibvirt.git Added xstrtol_ll and xstrtol_ull convenience functions --- diff --git a/ChangeLog b/ChangeLog index d333abe730..504e991cce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sun Jan 20 11:01:22 EST 2008 Daniel P. Berrange + + * src/internal.h: Add xstrtol_ull, xstrtol_ll convenience + functions + Sun Jan 20 10:54:22 EST 2008 Daniel P. Berrange * src/xend_internal.c: Fix nodeinfo compat with Xen 3.2.0 and diff --git a/src/internal.h b/src/internal.h index b30b874126..0082022c95 100644 --- a/src/internal.h +++ b/src/internal.h @@ -308,6 +308,42 @@ xstrtol_ui(char const *s, char **end_ptr, int base, unsigned int *result) return 0; } +static inline int +xstrtol_ll(char const *s, char **end_ptr, int base, long long *result) +{ + long long val; + char *p; + int err; + + errno = 0; + val = strtoll(s, &p, base); + err = (errno || (!end_ptr && *p) || p == s || (long long) val != val); + if (end_ptr) + *end_ptr = p; + if (err) + return -1; + *result = val; + return 0; +} + +/* Just like xstrtol_i, above, but produce an "unsigned long long" value. */ +static inline int +xstrtol_ull(char const *s, char **end_ptr, int base, unsigned long long *result) +{ + unsigned long long val; + char *p; + int err; + + errno = 0; + val = strtoull(s, &p, base); + err = (errno || (!end_ptr && *p) || p == s || (unsigned long long) val != val); + if (end_ptr) + *end_ptr = p; + if (err) + return -1; + *result = val; + return 0; +} #ifdef __cplusplus } #endif /* __cplusplus */