From: Scott Moser Date: Fri, 1 Jul 2011 10:40:21 +0000 (-0400) Subject: fix virParseVersionString with linux 3.0 X-Git-Tag: v0.9.3~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d42b749abfc147b6503ce71f773ffa2742d5ea66;p=thirdparty%2Flibvirt.git fix virParseVersionString with linux 3.0 linux 3.0 has no micro version number, and that is causing problems for virParseVersionString. The patch below should allow for: major major.minor major.minor.micro If major or minor are not present they just default to zero. We found this in Ubuntu (https://bugs.launchpad.net/bugs/802977) --- diff --git a/AUTHORS b/AUTHORS index 172648e515..074dace720 100644 --- a/AUTHORS +++ b/AUTHORS @@ -179,6 +179,7 @@ Patches have also been contributed by: Daniel Gollub David S. Wang Ruben Kerkhof + Scott Moser [....send patches to get your name here....] diff --git a/src/util/util.c b/src/util/util.c index 463d2b8eaa..da2485998a 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -1598,16 +1598,16 @@ virParseNumber(const char **str) int virParseVersionString(const char *str, unsigned long *version) { - unsigned int major, minor, micro; + unsigned int major, minor = 0, micro = 0; char *tmp; - if (virStrToLong_ui(str, &tmp, 10, &major) < 0 || *tmp != '.') + if (virStrToLong_ui(str, &tmp, 10, &major) < 0) return -1; - if (virStrToLong_ui(tmp + 1, &tmp, 10, &minor) < 0 || *tmp != '.') + if ((*tmp == '.') && virStrToLong_ui(tmp + 1, &tmp, 10, &minor) < 0) return -1; - if (virStrToLong_ui(tmp + 1, &tmp, 10, µ) < 0) + if ((*tmp == '.') && virStrToLong_ui(tmp + 1, &tmp, 10, µ) < 0) return -1; *version = 1000000 * major + 1000 * minor + micro;