Fix reading from stdin (me), Fix tar segfault when no arguments specified (Geoffrey...
authorGlenn L McGrath <bug1@ihug.co.nz>
Fri, 8 Nov 2002 07:09:42 +0000 (07:09 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Fri, 8 Nov 2002 07:09:42 +0000 (07:09 -0000)
archival/tar.c

index 95ef33b747ffa47b2dff0bfae068a231972ede97..01ec90c6f5116c75e28ab3d60a48c15b02027e4b 100644 (file)
@@ -611,6 +611,10 @@ int tar_main(int argc, char **argv)
        unsigned char tar_create = FALSE;
 #endif
 
+       if (argc < 2) {
+               show_usage();
+       }
+
        /* Prepend '-' to the first argument if required */
        if (argv[1][0] != '-') {
                char *tmp = xmalloc(strlen(argv[1]) + 2);
@@ -619,10 +623,6 @@ int tar_main(int argc, char **argv)
                argv[1] = tmp;
        }
 
-       if (argc < 2) {
-               show_usage();
-       }
-
        /* Initialise default values */
        tar_handle = init_handle();
        tar_handle->flags = ARCHIVE_CREATE_LEADING_DIRS;
@@ -736,13 +736,13 @@ int tar_main(int argc, char **argv)
        {
                if ((tar_filename[0] == '-') && (tar_filename[1] == '\0')) {
                        tar_handle->src_fd = fileno(stdin);
+                       tar_handle->seek = seek_by_char;
                } else {
                        tar_handle->seek = seek_by_jump;
                        tar_handle->src_fd = xopen(tar_filename, O_RDONLY);
                }
 #ifdef CONFIG_FEATURE_TAR_GZIP
                if (get_header_ptr == get_header_tar_gz) {
-                       tar_handle->seek = seek_by_char;
                        get_header_tar_gz(tar_handle);
                } else
 #endif /* CONFIG_FEATURE_TAR_GZIP */