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)
This commit is contained in:
Scott Moser 2011-07-01 06:40:21 -04:00 committed by Eric Blake
parent 0ac385bd6c
commit d42b749abf
2 changed files with 5 additions and 4 deletions

View File

@ -179,6 +179,7 @@ Patches have also been contributed by:
Daniel Gollub <gollub@b1-systems.de>
David S. Wang <dwang2@cisco.com>
Ruben Kerkhof <ruben@rubenkerkhof.com>
Scott Moser <smoser@ubuntu.com>
[....send patches to get your name here....]

View File

@ -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, &micro) < 0)
if ((*tmp == '.') && virStrToLong_ui(tmp + 1, &tmp, 10, &micro) < 0)
return -1;
*version = 1000000 * major + 1000 * minor + micro;