aboutsummaryrefslogtreecommitdiff
path: root/toys/pending/tar.c
diff options
context:
space:
mode:
Diffstat (limited to 'toys/pending/tar.c')
-rw-r--r--toys/pending/tar.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/toys/pending/tar.c b/toys/pending/tar.c
index 8b5f443e..f44465cc 100644
--- a/toys/pending/tar.c
+++ b/toys/pending/tar.c
@@ -32,6 +32,7 @@ config TAR
X File with names to exclude
T File with names to include
*/
+
#define FOR_tar
#include "toys.h"
@@ -433,7 +434,8 @@ COPY:
if (pw) u = pw->pw_uid;
if (gr) g = gr->gr_gid;
}
- chown(file_hdr->name, u, g);
+ if (chown(file_hdr->name, u, g))
+ perror_msg("chown %d:%d '%s'", u, g, file_hdr->name);;
}
if (toys.optflags & FLAG_p) // || !(toys.optflags & FLAG_no_same_permissions))
@@ -745,15 +747,10 @@ SKIP:
void tar_main(void)
{
struct archive_handler *tar_hdl;
- int fd = 0, flags = O_RDONLY;
+ int fd = 0;
struct arg_list *tmp;
char **args = toys.optargs;
- if (!toys.argv[1]) {
- toys.exithelp++;
- error_exit(NULL);
- }
-
if (!geteuid()) toys.optflags |= FLAG_p;
for (tmp = TT.exc; tmp; tmp = tmp->next)
@@ -765,16 +762,16 @@ void tar_main(void)
if (toys.optflags & FLAG_c) {
if (!TT.inc) error_exit("empty archive");
- fd = 1, flags = O_WRONLY|O_CREAT|O_TRUNC;
+ fd = 1;
}
if ((toys.optflags & FLAG_f) && strcmp(TT.fname, "-"))
- fd = xcreate(TT.fname, flags, 0666);
+ fd = xcreate(TT.fname, fd*(O_WRONLY|O_CREAT|O_TRUNC), 0666);
if (toys.optflags & FLAG_C) xchdir(TT.dir);
tar_hdl = init_handler();
tar_hdl->src_fd = fd;
- if (toys.optflags & FLAG_x || toys.optflags & FLAG_t) {
+ if ((toys.optflags & FLAG_x) || (toys.optflags & FLAG_t)) {
if (toys.optflags & FLAG_O) tar_hdl->extract_handler = extract_to_stdout;
if (toys.optflags & FLAG_to_command) {
signal(SIGPIPE, SIG_IGN); //will be using pipe between child & parent