2010/4/1 Eric Blake <eblake@xxxxxxxxxx>: > On 03/31/2010 03:41 PM, Matthias Bolte wrote: >> virParseVersionString uses virStrToLong_ui instead of sscanf. >> >> This also fixes a bug in the UML driver, that always returned 0 >> as version number. >> >> Introduce STRSKIP to check if a string has a certain prefix and >> to skip this prefix. > >> +++ b/src/esx/esx_driver.c >> @@ -684,34 +684,17 @@ static int >> esxGetVersion(virConnectPtr conn, unsigned long *version) >> { > ... >> + if (virParseVersionString(priv->host->service->about->version, >> + version) < 0) { >> + ESX_ERROR(VIR_ERR_INTERNAL_ERROR, >> + "Could not parse version number from '%s'", >> + priv->host->service->about->version); > > String needs translation. Currently, no string in the ESX driver code is marked for translation. I'll fix that in a separate patch. >> +++ b/src/util/util.c >> @@ -2074,6 +2074,41 @@ virParseNumber(const char **str) >> return (ret); >> } >> >> + >> +/** >> + * virParseVersionString: >> + * @str: const char pointer to the version string >> + * @version: unsigned long pointer to output the version number >> + * >> + * Parse an unsigned version number from a version string. Expecting >> + * 'major.minor.micro' format, ignoring an optional suffix. >> + * >> + * The major, minor and micro numbers are encoded into a single version number: >> + * >> + * 1000000 * major + 1000 * minor + micro >> + * >> + * Returns the 0 for success, -1 for error. >> + */ >> +int >> +virParseVersionString(const char *str, unsigned long *version) >> +{ >> + unsigned int major, minor, micro; >> + char *tmp = (char *)str; > > Coreutils uses an idiom bad_cast(str) to make it obvious that we are > casting away the const, and that we have audited that the results are > still sane (virStrToLong_ui does not modify its argument), while at the > same time reducing the number of C-style casts that require you to think > why we are casting. But introducing bad_cast() into libvirt would be a > separate patch; your code is fine as-is for this round. I can just pass str to the first virStrToLong_ui, as it takes a const char pointer as input. So I can get rid of the bad char pointer cast. > > ACK with the translation markup. > As said before I defer that to a separate patch, that covers the whole ESX driver code. Matthias -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list