]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Cleanup error message printing in minitar example 606/head
authorPaul Barker <paul@paulbarker.me.uk>
Wed, 2 Sep 2015 09:53:15 +0000 (11:53 +0200)
committerPaul Barker <paul@paulbarker.me.uk>
Fri, 25 Sep 2015 16:28:14 +0000 (17:28 +0100)
* An error message should not be printed if EOF is reached in copy_data. However
  an error message should be printed if any other error is encountered.

* A newline should be printed in extract if an error message was printed.

* If a file name is printed in extract (verbose operation) it should be followed
  by a space incase there is an error message.

Signed-off-by: Paul Barker <paul@paulbarker.me.uk>
examples/minitar/minitar.c

index 6b8b4f194cc6345e04c2cc90df346e15f9683876..81e5e11c798537f4e04bff43b0bd51a9b4eac247 100644 (file)
@@ -367,6 +367,7 @@ extract(const char *filename, int do_extract, int flags)
                exit(r);
        }
        for (;;) {
+               int needcr = 0;
                r = archive_read_next_header(a, &entry);
                if (r == ARCHIVE_EOF)
                        break;
@@ -377,16 +378,24 @@ extract(const char *filename, int do_extract, int flags)
                }
                if (verbose && do_extract)
                        msg("x ");
-               if (verbose || !do_extract)
+               if (verbose || !do_extract) {
                        msg(archive_entry_pathname(entry));
+                       msg(" ");
+                       needcr = 1;
+               }
                if (do_extract) {
                        r = archive_write_header(ext, entry);
-                       if (r != ARCHIVE_OK)
+                       if (r != ARCHIVE_OK) {
                                errmsg(archive_error_string(a));
-                       else
-                               copy_data(a, ext);
+                               needcr = 1;
+                       }
+                       else {
+                               r = copy_data(a, ext);
+                               if (r != ARCHIVE_OK)
+                                       needcr = 1;
+                       }
                }
-               if (verbose || !do_extract)
+               if (needcr)
                        msg("\n");
        }
        archive_read_close(a);
@@ -404,12 +413,12 @@ copy_data(struct archive *ar, struct archive *aw)
 
        for (;;) {
                r = archive_read_data_block(ar, &buff, &size, &offset);
-               if (r == ARCHIVE_EOF) {
-                       errmsg(archive_error_string(ar));
+               if (r == ARCHIVE_EOF)
                        return (ARCHIVE_OK);
-               }
-               if (r != ARCHIVE_OK)
+               if (r != ARCHIVE_OK) {
+                       errmsg(archive_error_string(ar));
                        return (r);
+               }
                r = archive_write_data_block(aw, buff, size, offset);
                if (r != ARCHIVE_OK) {
                        errmsg(archive_error_string(ar));