Do not unconditionally exit if guestfs_case_sensitive_path, but let
windows_path still return null. Make virt-edit then check for that, and
eventually exit on its own.
---
edit/edit.c | 5 ++++-
fish/windows.c | 3 +--
fish/windows.h | 3 +--
3 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/edit/edit.c b/edit/edit.c
index cd91b5f..1f5ec7b 100644
--- a/edit/edit.c
+++ b/edit/edit.c
@@ -335,9 +335,12 @@ edit (const char *filename, const char *root)
CLEANUP_FREE char *backupname = NULL;
/* Windows? Special handling is required. */
- if (root != NULL && is_windows (g, root))
+ if (root != NULL && is_windows (g, root)) {
filename = filename_to_free = windows_path (g, root, filename,
0 /* not read only */);
+ if (filename == NULL)
+ exit (EXIT_FAILURE);
+ }
/* Download the file to a temporary. */
fd = mkstemp (tmpfile);
diff --git a/fish/windows.c b/fish/windows.c
index 06dcab3..04ead2f 100644
--- a/fish/windows.c
+++ b/fish/windows.c
@@ -84,11 +84,10 @@ windows_path (guestfs_h *g, const char *root, const char *path, int
readonly)
if (ret[i] == '\\')
ret[i] = '/';
+ /* If this fails, we want to return NULL. */
char *t = guestfs_case_sensitive_path (g, ret);
free (ret);
ret = t;
- if (ret == NULL)
- exit (EXIT_FAILURE);
return ret;
}
diff --git a/fish/windows.h b/fish/windows.h
index 5543182..c543604 100644
--- a/fish/windows.h
+++ b/fish/windows.h
@@ -37,8 +37,7 @@ extern int is_windows (guestfs_h *g, const char *root);
* - relies on an already being done introspection
* - will unmount all the existing mount points and mount the Windows root
* (according to 'readonly')
- * - will exit() on memory allocation failures, and if it is not possible
- * to get the true path on case-insensitive filesystems
+ * - will exit() on memory allocation failures
*/
extern char *windows_path (guestfs_h *g, const char *root, const char *path,
int readonly);
--
1.9.3