Pino Toscano
2016-Jul-25 16:19 UTC
[Libguestfs] [PATCH] osinfo: parse also single-digit version numbers
Switch to guestfs_int_version_from_x_y_or_x to parse version numbers -- although, restrict the parsing to what could look like a valid version number, to discard quickly version strings like "unknown". This makes sure that Debian, Fedora, Mageia, and SLED ISOs have the right version number. --- src/osinfo.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/osinfo.c b/src/osinfo.c index 0caacfa..907580e 100644 --- a/src/osinfo.c +++ b/src/osinfo.c @@ -62,6 +62,7 @@ #include "ignore-value.h" #include "glthread/lock.h" +#include "c-ctype.h" #include "guestfs.h" #include "guestfs-internal.h" @@ -548,9 +549,12 @@ parse_version (guestfs_h *g, xmlNodePtr node, struct osinfo *osinfo) CLEANUP_FREE char *content = NULL; content = (char *) xmlNodeGetContent (node); - if (content) { + /* We parse either "X.Y" or "X" as version strings, so try to parse + * only if the first character is a digit. + */ + if (content && c_isdigit (content[0])) { struct version version; - int res = guestfs_int_version_from_x_y (g, &version, content); + int res = guestfs_int_version_from_x_y_or_x (g, &version, content); if (res < 0) return -1; else if (res > 0) { -- 2.7.4
Richard W.M. Jones
2016-Jul-26 10:16 UTC
Re: [Libguestfs] [PATCH] osinfo: parse also single-digit version numbers
On Mon, Jul 25, 2016 at 06:19:03PM +0200, Pino Toscano wrote:> Switch to guestfs_int_version_from_x_y_or_x to parse version numbers -- > although, restrict the parsing to what could look like a valid version > number, to discard quickly version strings like "unknown". > > This makes sure that Debian, Fedora, Mageia, and SLED ISOs have the > right version number. > --- > src/osinfo.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/src/osinfo.c b/src/osinfo.c > index 0caacfa..907580e 100644 > --- a/src/osinfo.c > +++ b/src/osinfo.c > @@ -62,6 +62,7 @@ > > #include "ignore-value.h" > #include "glthread/lock.h" > +#include "c-ctype.h" > > #include "guestfs.h" > #include "guestfs-internal.h" > @@ -548,9 +549,12 @@ parse_version (guestfs_h *g, xmlNodePtr node, struct osinfo *osinfo) > CLEANUP_FREE char *content = NULL; > > content = (char *) xmlNodeGetContent (node); > - if (content) { > + /* We parse either "X.Y" or "X" as version strings, so try to parse > + * only if the first character is a digit. > + */ > + if (content && c_isdigit (content[0])) { > struct version version; > - int res = guestfs_int_version_from_x_y (g, &version, content); > + int res = guestfs_int_version_from_x_y_or_x (g, &version, content);This is 'const int' since I pushed some const correctness changes this morning.> if (res < 0) > return -1; > else if (res > 0) {ACK. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 100 libraries supported. http://fedoraproject.org/wiki/MinGW
Apparently Analagous Threads
- [PATCH] osinfo: use guestfs_int_version_from_x_y to parse the os version
- [PATCH v4 2/9] lib: extract osinfo DB traversing API
- [PATCH v3 05/10] lib: extract osinfo DB traversing API
- [PATCH v7 2/9] lib: extract osinfo DB traversing API
- [PATCH v6 02/10] lib: extract osinfo DB traversing API