2010/8/7 Matthias Bolte <matthias.bo...@googlemail.com>:
> For parsing try to match by datastore mount path first, if that
> fails fallback to /vmfs/volumes/<datastore>/<path> parsing. This
> also fixes problems with GSX on Windows. Because GSX on Windows
> doesn't use /vmfs/volumes/ style file names.
>
> For formatting use the datastore mount path too, instead of using
> /vmfs/volumes/<datastore>/<path> as fixed format.
> ---
>  src/esx/esx_driver.c |  372 +++++++++++++++++++++++++++++++------------------
>  1 files changed, 235 insertions(+), 137 deletions(-)
>

> +
> +    /* Strip trailing separators */
> +    length = strlen(hostMount->mountInfo->path);
> +
> +    if (length > 0) {
> +        tmp = hostMount->mountInfo->path + length - 1;
> +
> +        while (*tmp == separator && tmp > hostMount->mountInfo->path) {
> +            --tmp;
>         }

[skip removed code]

> +        length = tmp - hostMount->mountInfo->path;
> +    }
> +
> +    /* Format as <mount>[/<directory>]/<file> */
> +    virBufferAdd(&buffer, hostMount->mountInfo->path, length);
> +

The trailing separators stripping it totally broken :(

This incremental diff fixes that:


diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index 322c588..4fb357b 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -286,14 +286,8 @@ esxFormatVMXFileName(const char *datastorePath,
void *opaque)
     /* Strip trailing separators */
     length = strlen(hostMount->mountInfo->path);

-    if (length > 0) {
-        tmp = hostMount->mountInfo->path + length - 1;
-
-        while (*tmp == separator && tmp > hostMount->mountInfo->path) {
-            --tmp;
-        }
-
-        length = tmp - hostMount->mountInfo->path;
+    while (length > 0 && hostMount->mountInfo->path[length - 1] == separator) {
+        --length;
     }

     /* Format as <mount>[/<directory>]/<file> */


Matthias

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to