-/* Download a guest file to a local temporary file. The file is
- * downloaded into g->tmpdir, unless it already exists in g->tmpdir.
- * The final name will be g->tmpdir + "/" + basename. Refuse to
- * download the guest file if it is larger than max_size. The caller
- * does not need to delete the temporary file after use: it will be
- * deleted when the handle is cleaned up.
- */
-int
-guestfs___download_to_tmp (guestfs_h *g, const char *filename,
- const char *basename, int64_t max_size)
-{
- int tmpdirfd, fd, r = -1;
- char buf[32];
- int64_t size;
-
- tmpdirfd = open (g->tmpdir, O_RDONLY);
- if (tmpdirfd == -1) {
- perrorf (g, _("%s: temporary directory not found"), g->tmpdir);
- return -1;
- }
-
- /* If the file has already been downloaded, return. */
- if (faccessat (tmpdirfd, basename, R_OK, 0) == 0) {
- r = 0;
- goto out;
- }
-
- /* Check size of remote file. */
- size = guestfs_filesize (g, filename);
- if (size == -1)
- /* guestfs_filesize failed and has already set error in handle */
- goto out;
- if (size > max_size) {
- error (g, _("size of %s is unreasonably large (%" PRIi64 " bytes)"),
- filename, size);
- goto out;
- }
-
- fd = openat (tmpdirfd, basename, O_WRONLY|O_CREAT|O_TRUNC|O_NOCTTY, 0600);
- if (fd == -1) {
- perrorf (g, "openat: %s/%s", g->tmpdir, basename);
- goto out;
- }
-
- snprintf (buf, sizeof buf, "/dev/fd/%d", fd);
-
- if (guestfs_download (g, filename, buf) == -1) {
- unlinkat (tmpdirfd, basename, 0);
- close (fd);
- goto out;
- }
-
- if (close (fd) == -1) {
- perrorf (g, "close: %s/%s", g->tmpdir, basename);
- unlinkat (tmpdirfd, basename, 0);
- goto out;
- }
-
- r = 0;
- out:
- if (tmpdirfd >= 0)
- close (tmpdirfd);
-
- return r;
-}
-
-struct inspect_fs *
-guestfs___search_for_root (guestfs_h *g, const char *root)
-{
- if (g->nr_fses == 0) {
- error (g, _("no inspection data: call guestfs_inspect_os first"));
- return NULL;
- }
-
- size_t i;
- struct inspect_fs *fs;
- for (i = 0; i < g->nr_fses; ++i) {
- fs = &g->fses[i];
- if (fs->is_root && STREQ (root, fs->device))
- return fs;
- }
-
- error (g, _("%s: root device not found: only call this function with a root device previously returned by guestfs_inspect_os"),
- root);
- return NULL;
-}
-
-#else /* no PCRE or hivex at compile time */