[libvirt] [PATCH] esx: Improve VMX file name parsing and formatting
Matthias Bolte
matthias.bolte at googlemail.com
Sat Aug 7 19:54:34 UTC 2010
2010/8/7 Matthias Bolte <matthias.bolte at 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
More information about the libvir-list
mailing list