OSDN Git Service

header_verbose_list: stop truncating file size in listing
authorDenis Vlasenko <vda.linux@googlemail.com>
Fri, 24 Nov 2006 14:53:18 +0000 (14:53 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Fri, 24 Nov 2006 14:53:18 +0000 (14:53 -0000)
archival/libunarchive/get_header_tar.c
archival/libunarchive/header_verbose_list.c
archival/tar.c
coreutils/dd.c
coreutils/ls.c
include/libbb.h
networking/ftpgetput.c
networking/httpd.c
networking/wget.c
util-linux/fdisk.c

index b5cae9f..68f7b2b 100644 (file)
@@ -111,25 +111,6 @@ char get_header_tar(archive_handle_t *archive_handle)
                bb_error_msg_and_die("invalid tar header checksum");
        }
 
-#ifdef CONFIG_FEATURE_TAR_GNU_EXTENSIONS
-       if (longname) {
-               file_header->name = longname;
-               longname = NULL;
-       }
-       else if (linkname) {
-               file_header->name = linkname;
-               linkname = NULL;
-       } else
-#endif
-       {
-               file_header->name = xstrndup(tar.name, sizeof(tar.name));
-               if (tar.prefix[0]) {
-                       char *temp = file_header->name;
-                       file_header->name = concat_path_file(tar.prefix, temp);
-                       free(temp);
-               }
-       }
-
        /* getOctal trashes subsequent field, therefore we call it
         * on fields in reverse order */
 #define GET_OCTAL(a) getOctal((a), sizeof(a))
@@ -148,6 +129,24 @@ char get_header_tar(archive_handle_t *archive_handle)
        file_header->mode = 07777 & GET_OCTAL(tar.mode);
 #undef GET_OCTAL
 
+#ifdef CONFIG_FEATURE_TAR_GNU_EXTENSIONS
+       if (longname) {
+               file_header->name = longname;
+               longname = NULL;
+       }
+       else if (linkname) {
+               file_header->name = linkname;
+               linkname = NULL;
+       } else
+#endif
+       {       /* we trash mode[0] here, it's ok */
+               tar.name[sizeof(tar.name)] = '\0';
+               if (tar.prefix[0])
+                       file_header->name = concat_path_file(tar.prefix, tar.name);
+               else
+                       file_header->name = xstrdup(tar.name);
+       }
+
        /* Set bits 12-15 of the files mode */
        switch (tar.typeflag) {
        /* busybox identifies hard links as being regular files with 0 size and a link name */
@@ -209,10 +208,12 @@ char get_header_tar(archive_handle_t *archive_handle)
        /* Strip trailing '/' in directories */
        /* Must be done after mode is set as '/' is used to check if its a directory */
        cp = last_char_is(file_header->name, '/');
-       if (cp) *cp = '\0';
 
        if (archive_handle->filter(archive_handle) == EXIT_SUCCESS) {
                archive_handle->action_header(archive_handle->file_header);
+               /* Note that we kill the '/' only after action_header() */
+               /* (like GNU tar 1.15.1: verbose mode outputs "dir/dir/") */
+               if (cp) *cp = '\0';
                archive_handle->flags |= ARCHIVE_EXTRACT_QUIET;
                archive_handle->action_data(archive_handle);
                llist_add_to(&(archive_handle->passed), file_header->name);
index 130b6a2..7b97e52 100644 (file)
@@ -3,9 +3,6 @@
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
 #include "libbb.h"
 #include "unarchive.h"
 
@@ -13,11 +10,11 @@ void header_verbose_list(const file_header_t *file_header)
 {
        struct tm *mtime = localtime(&(file_header->mtime));
 
-       printf("%s %d/%d%10u %4u-%02u-%02u %02u:%02u:%02u %s",
+       printf("%s %d/%d %9"OFF_FMT"u %4u-%02u-%02u %02u:%02u:%02u %s",
                bb_mode_string(file_header->mode),
                file_header->uid,
                file_header->gid,
-               (unsigned int) file_header->size,
+               file_header->size,
                1900 + mtime->tm_year,
                1 + mtime->tm_mon,
                mtime->tm_mday,
index 911c2d3..6aaa422 100644 (file)
@@ -563,9 +563,9 @@ static char get_header_tar_Z(archive_handle_t *archive_handle)
        archive_handle->seek = seek_by_read;
 
        /* do the decompression, and cleanup */
-       if (xread_char(archive_handle->src_fd) != 0x1f ||
-               xread_char(archive_handle->src_fd) != 0x9d)
-       {
+       if (xread_char(archive_handle->src_fd) != 0x1f
+        || xread_char(archive_handle->src_fd) != 0x9d
+       {
                bb_error_msg_and_die("invalid magic");
        }
 
index c0df0b7..96ea32f 100644 (file)
@@ -29,8 +29,8 @@ static off_t out_full, out_part, in_full, in_part;
 
 static void dd_output_status(int ATTRIBUTE_UNUSED cur_signal)
 {
-       fprintf(stderr, "%"OFF_FMT"+%"OFF_FMT" records in\n"
-                       "%"OFF_FMT"+%"OFF_FMT" records out\n",
+       fprintf(stderr, "%"OFF_FMT"d+%"OFF_FMT"d records in\n"
+                       "%"OFF_FMT"d+%"OFF_FMT"d records out\n",
                        in_full, in_part,
                        out_full, out_part);
 }
index 909f4d5..79e47ee 100644 (file)
@@ -574,7 +574,7 @@ static int list_single(struct dnode *dn)
                        column += printf("%7ld ", (long) dn->dstat.st_ino);
                        break;
                case LIST_BLOCKS:
-                       column += printf("%4"OFF_FMT" ", (off_t) dn->dstat.st_blocks >> 1);
+                       column += printf("%4"OFF_FMT"d ", (off_t) dn->dstat.st_blocks >> 1);
                        break;
                case LIST_MODEBITS:
                        column += printf("%-10s ", (char *) bb_mode_string(dn->dstat.st_mode));
@@ -604,7 +604,7 @@ static int list_single(struct dnode *dn)
                                        column += printf("%9s ",
                                                make_human_readable_str(dn->dstat.st_size, 1, 0));
                                } else {
-                                       column += printf("%9"OFF_FMT" ", (off_t) dn->dstat.st_size);
+                                       column += printf("%9"OFF_FMT"d ", (off_t) dn->dstat.st_size);
                                }
                        }
                        break;
index 2ccb6e7..ad64bad 100644 (file)
 #  define STRTOOFF strtol
 #  define SAFE_STRTOOFF safe_strtol
 #  define XSTRTOUOFF xstrtoul
-#  define OFF_FMT "ld"
+/* usage: printf("size: %"OFF_FMT"d (%"OFF_FMT"x)\n", sz, sz); */
+#  define OFF_FMT "l"
 # else
 /* "long" is too short, need "long long" */
 #  define STRTOOFF strtoll
 #  define SAFE_STRTOOFF safe_strtoll
 #  define XSTRTOUOFF xstrtoull
-#  define OFF_FMT "lld"
+#  define OFF_FMT "ll"
 # endif
 #else
 # if 0 /* #if UINT_MAX == 0xffffffff */
 #  define STRTOOFF strtol
 #  define SAFE_STRTOOFF safe_strtoi
 #  define XSTRTOUOFF xstrtou
-#  define OFF_FMT "d"
+#  define OFF_FMT ""
 # else
 #  define STRTOOFF strtol
 #  define SAFE_STRTOOFF safe_strtol
 #  define XSTRTOUOFF xstrtoul
-#  define OFF_FMT "ld"
+#  define OFF_FMT "l"
 # endif
 #endif
 /* scary. better ideas? (but do *test* them first!) */
@@ -703,7 +704,7 @@ extern const char bb_default_login_shell[];
 #define RB_POWER_OFF   0x4321fedc
 #endif
 
-// Make sure we call functions instead of macros.
+/* Make sure we call functions instead of macros.  */
 #undef isalnum
 #undef isalpha
 #undef isascii
index 739a441..a842401 100644 (file)
@@ -149,7 +149,7 @@ int ftp_receive(ftp_host_info_t *server, FILE *control_stream,
        }
 
        if (do_continue) {
-               sprintf(buf, "REST %"OFF_FMT, beg_range);
+               sprintf(buf, "REST %"OFF_FMT"d", beg_range);
                if (ftpcmd(buf, NULL, control_stream, buf) != 350) {
                        do_continue = 0;
                } else {
index 97b04fb..0de60ba 100644 (file)
@@ -889,8 +889,8 @@ static int sendHeaders(HttpResponseNum responseNum)
 
        if (config->ContentLength != -1) {    /* file */
                strftime(timeStr, sizeof(timeStr), RFC1123FMT, gmtime(&config->last_mod));
-               len += sprintf(buf+len, "Last-Modified: %s\r\n%s %"OFF_FMT"\r\n",
-                               timeStr, "Content-length:", (off_t) config->ContentLength);
+               len += sprintf(buf+len, "Last-Modified: %s\r\n%s %"OFF_FMT"d\r\n",
+                       timeStr, "Content-length:", config->ContentLength);
        }
        strcat(buf, "\r\n");
        len += 2;
index f9a9462..5a547ce 100644 (file)
@@ -287,7 +287,7 @@ int wget_main(int argc, char **argv)
 #endif
 
                        if (beg_range)
-                               fprintf(sfp, "Range: bytes=%"OFF_FMT"-\r\n", beg_range);
+                               fprintf(sfp, "Range: bytes=%"OFF_FMT"d-\r\n", beg_range);
 #if ENABLE_FEATURE_WGET_LONG_OPTIONS
                        if (extra_headers)
                                fputs(extra_headers, sfp);
@@ -431,7 +431,7 @@ int wget_main(int argc, char **argv)
                dfp = open_socket(&s_in);
 
                if (beg_range) {
-                       sprintf(buf, "REST %"OFF_FMT, beg_range);
+                       sprintf(buf, "REST %"OFF_FMT"d", beg_range);
                        if (ftpcmd(buf, NULL, sfp, buf) == 350)
                                content_len -= beg_range;
                }
index bd2f1e8..74c7710 100644 (file)
@@ -2277,7 +2277,7 @@ add_partition(int n, int sys)
                if (start > limit)
                        break;
                if (start >= temp+units_per_sector && num_read) {
-                       printf(_("Sector %"OFF_FMT" is already allocated\n"), temp);
+                       printf(_("Sector %"OFF_FMT"d is already allocated\n"), temp);
                        temp = start;
                        num_read = 0;
                }