Jim's xstrtol convenience function simplified the use of strtol, but only support the 'int' variant. For the storage drivers I need a similar function that will always be at minimum 64-bit since we may have files > 2 GB even on 32-bit. So this adds a variant of the xstrtol functions which use a long long / unsigned long long type Regards, Dan. diff -r 83e80c558f4d src/internal.h --- a/src/internal.h Wed Jan 16 09:28:01 2008 -0500 +++ b/src/internal.h Wed Jan 16 09:28:05 2008 -0500 @@ -304,6 +304,42 @@ xstrtol_ui(char const *s, char **end_ptr 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 */ Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list