On 09/09/2015 02:53 PM, Daniel P. Berrange wrote:
On Tue, Sep 08, 2015 at 09:27:27AM +0100, Joao Martins wrote:
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index dc83083..fd952a3 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> static int
> +libxlDiskPathMatches(const char *virtpath, const char *devtype,
> + int *index_r, int max_index,
> + int *partition_r, int max_partition)
> +{
> + const char *p;
> + char *ep;
> + int tl, c;
> + long pl;
> +
> + tl = strlen(devtype);
> + if (memcmp(virtpath, devtype, tl))
> + return 0;
Nit-pick, we prefer use of STREQLEN / STRNEQLEN instead
of memcmp, whenever comparing strings.
OK, I will change that.
> +
> + /* We decode the drive letter as if it were in base 52
> + * with digits a-zA-Z, more or less */
> + *index_r = -1;
> + p = virtpath + tl;
> + for (;;) {
> + c = *p++;
> + if (c >= 'a' && c <= 'z') {
> + c -= 'a';
> + } else {
> + --p;
> + break;
> + }
> + (*index_r)++;
> + (*index_r) *= 26;
> + (*index_r) += c;
> +
> + if (*index_r > max_index)
> + return 0;
> + }
> +
> + if (!*p) {
> + *partition_r = 0;
> + return 1;
> + }
> +
> + if (*p == '0')
> + return 0; /* leading zeroes not permitted in partition number */
> +
> + if (virStrToLong_l(p, &ep, 10, &pl) < 0)
> + return 0;
> +
> + if (pl > max_partition || *ep)
> + return 0;
> +
> + *partition_r = pl;
> + return 1;
> +}
IIUC, the virDiskNameToIndex() method could do the disk part
of this, but doesn't provide the partition info. I think it
would be desirable to extend that common method to provide
partition info too, as it is conceptually useful elsewhere.
Makes sense, Perhaps adding virDiskNameToIndexPartition helper to virutil.c (and
correspondent test) and extend it there with the partition info.
Regards,
Daniel