提交 d42b749a 编写于 作者: S Scott Moser 提交者: Eric Blake

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)
上级 0ac385bd
...@@ -179,6 +179,7 @@ Patches have also been contributed by: ...@@ -179,6 +179,7 @@ Patches have also been contributed by:
Daniel Gollub <gollub@b1-systems.de> Daniel Gollub <gollub@b1-systems.de>
David S. Wang <dwang2@cisco.com> David S. Wang <dwang2@cisco.com>
Ruben Kerkhof <ruben@rubenkerkhof.com> Ruben Kerkhof <ruben@rubenkerkhof.com>
Scott Moser <smoser@ubuntu.com>
[....send patches to get your name here....] [....send patches to get your name here....]
......
...@@ -1598,16 +1598,16 @@ virParseNumber(const char **str) ...@@ -1598,16 +1598,16 @@ virParseNumber(const char **str)
int int
virParseVersionString(const char *str, unsigned long *version) virParseVersionString(const char *str, unsigned long *version)
{ {
unsigned int major, minor, micro; unsigned int major, minor = 0, micro = 0;
char *tmp; char *tmp;
if (virStrToLong_ui(str, &tmp, 10, &major) < 0 || *tmp != '.') if (virStrToLong_ui(str, &tmp, 10, &major) < 0)
return -1; return -1;
if (virStrToLong_ui(tmp + 1, &tmp, 10, &minor) < 0 || *tmp != '.') if ((*tmp == '.') && virStrToLong_ui(tmp + 1, &tmp, 10, &minor) < 0)
return -1; return -1;
if (virStrToLong_ui(tmp + 1, &tmp, 10, &micro) < 0) if ((*tmp == '.') && virStrToLong_ui(tmp + 1, &tmp, 10, &micro) < 0)
return -1; return -1;
*version = 1000000 * major + 1000 * minor + micro; *version = 1000000 * major + 1000 * minor + micro;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册