/* libguestfs - the guestfsd daemon
- * Copyright (C) 2009 Red Hat Inc.
+ * Copyright (C) 2009 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
FILE *fp;
char **res = NULL;
int size = 0, alloc = 0;
- char sysrootdir[PATH_MAX];
+ char *sysrootdir;
char str[PATH_MAX];
NEED_ROOT (NULL);
ABS_PATH (dir, NULL);
- snprintf (sysrootdir, sizeof sysrootdir, "/sysroot%s", dir);
+ sysrootdir = sysroot_path (dir);
+ if (!sysrootdir) {
+ reply_with_perror ("malloc");
+ return NULL;
+ }
r = stat (sysrootdir, &statbuf);
if (r == -1) {
reply_with_perror ("%s", dir);
+ free (sysrootdir);
return NULL;
}
if (!S_ISDIR (statbuf.st_mode)) {
reply_with_error ("%s: not a directory", dir);
+ free (sysrootdir);
return NULL;
}
sysrootdirlen = strlen (sysrootdir);
/* Assemble the external find command. */
- len = 2 * sysrootdirlen + 32;
- cmd = malloc (len);
- if (!cmd) {
+ if (asprintf_nowarn (&cmd, "find %Q -print0", sysrootdir) == -1) {
reply_with_perror ("malloc");
+ free (sysrootdir);
return NULL;
}
- strcpy (cmd, "find ");
- shell_quote (cmd+5, len-5, sysrootdir);
- strcat (cmd, " -print0");
-
if (verbose)
- printf ("%s\n", cmd);
+ fprintf (stderr, "%s\n", cmd);
fp = popen (cmd, "r");
if (fp == NULL) {
return NULL;
}
}
- if (pclose (fp) == -1) {
+ if (pclose (fp) != 0) {
reply_with_perror ("pclose: find");
free_stringslen (res, size);
return NULL;