[Libguestfs] [PATCH] virt-ls: support drive letters on Windows
Richard W.M. Jones
rjones at redhat.com
Mon Mar 23 13:36:23 UTC 2015
On Tue, Mar 17, 2015 at 03:33:09PM +0100, Maros Zatko wrote:
> ---
> cat/ls.c | 31 ++++++++++++++++++++++++++++++-
> 1 file changed, 30 insertions(+), 1 deletion(-)
>
> diff --git a/cat/ls.c b/cat/ls.c
> index 9161fb6..151c11d 100644
> --- a/cat/ls.c
> +++ b/cat/ls.c
> @@ -37,6 +37,7 @@
>
> #include "options.h"
> #include "visit.h"
> +#include "windows.h"
>
> /* Currently open libguestfs handle. */
> guestfs_h *g;
> @@ -76,6 +77,8 @@ static void output_int64_uid (int64_t);
> static void output_string (const char *);
> static void output_string_link (const char *);
>
> +static char *from_maybe_windows_path (const char *);
> +
> static void __attribute__((noreturn))
> usage (int status)
> {
> @@ -374,7 +377,7 @@ main (int argc, char *argv[])
> unsigned errors = 0;
>
> while (optind < argc) {
> - const char *dir = argv[optind];
> + const char *dir = from_maybe_windows_path(argv[optind]);
>
> switch (mode) {
> case 0: /* no -l or -R option */
> @@ -401,6 +404,7 @@ main (int argc, char *argv[])
> abort (); /* can't happen */
> }
>
> + free (dir);
Use CLEANUP_FREE instead?
> optind++;
> }
>
> @@ -409,6 +413,31 @@ main (int argc, char *argv[])
> exit (errors == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
> }
>
> +static char *
> +from_maybe_windows_path (const char *dir)
> +{
> + CLEANUP_FREE_STRING_LIST char **roots = NULL;
> + char *path = NULL;
> + char *root;
> +
> + roots = guestfs_inspect_get_roots (g);
> + assert (roots);
> + assert (roots[0] != NULL);
> + assert (roots[1] == NULL);
> + root = roots[0];
> +
> + if (is_windows (g, root)) {
> + path = windows_path (g, root, dir, 1 /* readonly */ );
> + if (path == NULL) {
> + guestfs_close (g);
> + exit (EXIT_FAILURE);
> + }
> + return path;
> + }
> +
> + return safe_strdup (g, dir);
> +}
Hmmm.
This isn't very similar to what cat/cat.c does. In cat/cat.c we do
the inspection once only (inspection is expensive), and then we call
windows_path conditionally based on that result. See:
https://github.com/libguestfs/libguestfs/blob/master/cat/cat.c#L283-L301
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine. Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/
More information about the Libguestfs
mailing list