/* System-dependent calls for tar.
- Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, 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 the
- Free Software Foundation; either version 2, or (at your option) any later
+ Free Software Foundation; either version 3, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
#include <system.h>
+#include <getline.h>
+#include <setenv.h>
#include "common.h"
#include <rmt.h>
if (archive < 0)
{
int saved_errno = errno;
-
+
if (backup_option)
undo_last_backup ();
errno = saved_errno;
char *argv[4];
char uintbuf[UINTMAX_STRSIZE_BOUND];
int p[2];
-
+
xpipe (p);
pipe_handler = signal (SIGPIPE, SIG_IGN);
char *buf;
size_t size = 0;
FILE *fp;
-
+
xclose (p[PWRITE]);
fp = fdopen (p[PREAD], "r");
rc = getline (&buf, &size, fp);
if (rc > 0 && buf[rc-1] == '\n')
buf[--rc] = 0;
-
+
while (waitpid (pid, &status, 0) == -1)
if (errno != EINTR)
{
waitpid_error (info_script_option);
return -1;
}
-
+
if (WIFEXITED (status))
{
if (WEXITSTATUS (status) == 0 && rc > 0)
free (buf);
return WEXITSTATUS (status);
}
-
+
free (buf);
return -1;
}
setenv ("TAR_FORMAT",
archive_format_string (current_format == DEFAULT_FORMAT ?
archive_format : current_format), 1);
+ setenv ("TAR_FD", STRINGIFY_BIGINT (p[PWRITE], uintbuf), 1);
xclose (p[PREAD]);
- xdup2 (p[PWRITE], 3);
argv[0] = "/bin/sh";
argv[1] = "-c";