void print_for_mkdir (char *pathname, int length, int mode) { char modes[11]; char *name; if (verbose_option > 1) { /* File type and modes. */ modes[0] = 'd'; decode_mode ((unsigned) mode, modes + 1); if (block_number_option) fprintf (stdlis, _("block %10ld: "), current_block_ordinal ()); name = quote_copy_string (pathname); if (name) { fprintf (stdlis, "%s %*s %.*s\n", modes, ugswidth + DATEWIDTH, _("Creating directory:"), length, name); free (name); } else fprintf (stdlis, "%s %*s %.*s\n", modes, ugswidth + DATEWIDTH, _("Creating directory:"), length, pathname); } }
void print_for_mkdir (char *pathname, int length, mode_t mode) { char modes[11]; char *name; if (verbose_option_count > 1) { /* File type and modes. */ modes[0] = 'd'; decode_mode (mode, modes + 1); if (checkpoint_option) flush_progress_dots (); if (block_number_option) fprintf (stdlis, _("block %10lu: "), (unsigned long) current_block_ordinal ()); if (name = quote_copy_string (pathname), name) { fprintf (stdlis, "%s %*s %.*s\n", modes, ugswidth + DATEWIDTH, _("Creating directory:"), length, name); free (name); } else fprintf (stdlis, "%s %*s %.*s\n", modes, ugswidth + DATEWIDTH, _("Creating directory:"), length, pathname); } }
void chmod_error_details (char const *name, mode_t mode) { int e = errno; char buf[10]; decode_mode (mode, buf); ERROR ((0, e, _("%s: Cannot change mode to %s"), quotearg_colon (name), buf)); }
void print_header (void) { char modes[11]; char *timestamp; char uform[11], gform[11]; /* these hold formatted ints */ char *user, *group; char size[24]; /* holds a formatted long or maj, min */ time_t longie; /* to make ctime() call portable */ int pad; char *name; if (block_number_option) fprintf (stdlis, _("block %10ld: "), current_block_ordinal ()); if (verbose_option <= 1) { /* Just the fax, mam. */ char *quoted_name = quote_copy_string (current_file_name); if (quoted_name) { fprintf (stdlis, "%s\n", quoted_name); free (quoted_name); } else fprintf (stdlis, "%s\n", current_file_name); } else { /* File type and modes. */ modes[0] = '?'; switch (current_header->header.typeflag) { case GNUTYPE_VOLHDR: modes[0] = 'V'; break; case GNUTYPE_MULTIVOL: modes[0] = 'M'; break; case GNUTYPE_NAMES: modes[0] = 'N'; break; case GNUTYPE_LONGNAME: case GNUTYPE_LONGLINK: ERROR ((0, 0, _("Visible longname error"))); break; case GNUTYPE_SPARSE: case REGTYPE: case AREGTYPE: case LNKTYPE: modes[0] = '-'; if (current_file_name[strlen (current_file_name) - 1] == '/') modes[0] = 'd'; break; case GNUTYPE_DUMPDIR: modes[0] = 'd'; break; case DIRTYPE: modes[0] = 'd'; break; case SYMTYPE: modes[0] = 'l'; break; case BLKTYPE: modes[0] = 'b'; break; case CHRTYPE: modes[0] = 'c'; break; case FIFOTYPE: modes[0] = 'p'; break; case CONTTYPE: modes[0] = 'C'; break; } decode_mode ((unsigned) current_stat.st_mode, modes + 1); /* Timestamp. */ longie = current_stat.st_mtime; #if USE_OLD_CTIME timestamp = ctime (&longie); timestamp[16] = '\0'; timestamp[24] = '\0'; #else timestamp = isotime (&longie); timestamp[16] = '\0'; #endif /* User and group names. */ if (*current_header->header.uname && current_format != V7_FORMAT) user = current_header->header.uname; else { user = uform; sprintf (uform, "%ld", from_oct (8, current_header->header.uid)); } if (*current_header->header.gname && current_format != V7_FORMAT) group = current_header->header.gname; else { group = gform; sprintf (gform, "%ld", from_oct (8, current_header->header.gid)); } /* Format the file size or major/minor device numbers. */ switch (current_header->header.typeflag) { #if defined(S_IFBLK) || defined(S_IFCHR) case CHRTYPE: case BLKTYPE: sprintf (size, "%d,%d", major (current_stat.st_rdev), minor (current_stat.st_rdev)); break; #endif case GNUTYPE_SPARSE: sprintf (size, "%lld", llfrom_oct (sizeof current_header->oldgnu_header.realsize, current_header->oldgnu_header.realsize)); break; default: sprintf (size, "%lld", (long long) current_stat.st_size); } /* Figure out padding and print the whole line. */ pad = strlen (user) + strlen (group) + strlen (size) + 1; if (pad > ugswidth) ugswidth = pad; #if USE_OLD_CTIME fprintf (stdlis, "%s %s/%s %*s%s %s %s", modes, user, group, ugswidth - pad, "", size, timestamp + 4, timestamp + 20); #else fprintf (stdlis, "%s %s/%s %*s%s %s", modes, user, group, ugswidth - pad, "", size, timestamp); #endif name = quote_copy_string (current_file_name); if (name) { fprintf (stdlis, " %s", name); free (name); } else fprintf (stdlis, " %s", current_file_name); switch (current_header->header.typeflag) { case SYMTYPE: name = quote_copy_string (current_link_name); if (name) { fprintf (stdlis, " -> %s\n", name); free (name); } else fprintf (stdlis, " -> %s\n", current_link_name); break; case LNKTYPE: name = quote_copy_string (current_link_name); if (name) { fprintf (stdlis, _(" link to %s\n"), name); free (name); } else fprintf (stdlis, _(" link to %s\n"), current_link_name); break; default: fprintf (stdlis, _(" unknown file type `%c'\n"), current_header->header.typeflag); break; case AREGTYPE: case REGTYPE: case GNUTYPE_SPARSE: case CHRTYPE: case BLKTYPE: case DIRTYPE: case FIFOTYPE: case CONTTYPE: case GNUTYPE_DUMPDIR: putc ('\n', stdlis); break; case GNUTYPE_VOLHDR: fprintf (stdlis, _("--Volume Header--\n")); break; case GNUTYPE_MULTIVOL: fprintf (stdlis, _("--Continued at byte %ld--\n"), from_oct (1 + 12, current_header->oldgnu_header.offset)); break; case GNUTYPE_NAMES: fprintf (stdlis, _("--Mangled file names--\n")); break; } } fflush (stdlis); }
void print_header (struct tar_entry *entry) { char modes[11]; char *timestamp; char uform[11], gform[11]; /* these hold formatted ints */ char *user, *group; char size[24]; /* holds a formatted long or maj, min */ time_t longie; /* to make ctime() call portable */ int pad; char *name; if (checkpoint_option) flush_progress_dots (); if (block_number_option) fprintf (stdlis, _("block %10lu: "), (unsigned long) current_block_ordinal ()); if (verbose_option_count <= 1) if (null_option) { fputs (entry->name, stdlis); putc ('\0', stdlis); } else { char *quoted_name = quote_copy_string (entry->name); if (quoted_name) { fputs (quoted_name, stdlis); free (quoted_name); } else fputs (entry->name, stdlis); putc ('\n', stdlis); } else { /* File type and modes. */ modes[0] = '?'; switch (entry->block->header.typeflag) { case GNUTAR_VOLHDR: modes[0] = 'V'; break; case GNUTAR_MULTIVOL: modes[0] = 'M'; break; case GNUTAR_NAMES: modes[0] = 'N'; break; case GNUTAR_LONGNAME: case GNUTAR_LONGLINK: ERROR ((0, 0, _("Long name has no introducing header"))); break; case GNUTAR_SPARSE: case REGTYPE: case AREGTYPE: case LNKTYPE: modes[0] = '-'; if (entry->name[strlen (entry->name) - 1] == '/') modes[0] = 'd'; break; case GNUTAR_DUMPDIR: modes[0] = 'd'; break; case DIRTYPE: modes[0] = 'd'; break; case SYMTYPE: modes[0] = 'l'; break; case BLKTYPE: modes[0] = 'b'; break; case CHRTYPE: modes[0] = 'c'; break; case FIFOTYPE: modes[0] = 'p'; break; case CONTTYPE: modes[0] = 'C'; break; } decode_mode (entry->stat.st_mode, modes + 1); /* Timestamp. */ longie = entry->stat.st_mtime; #if USE_OLD_CTIME timestamp = ctime (&longie); timestamp[16] = '\0'; timestamp[24] = '\0'; #else timestamp = isotime (&longie); timestamp[16] = '\0'; #endif /* User and group names. */ if (*entry->block->header.uname && entry->format != V7_FORMAT) user = entry->block->header.uname; else { user = uform; sprintf (uform, "%lu", (unsigned long) get_header_uid (entry->block)); } if (*entry->block->header.gname && entry->format != V7_FORMAT) group = entry->block->header.gname; else { group = gform; sprintf (gform, "%ld", (unsigned long) get_header_gid (entry->block)); } /* Format the file size or major/minor device numbers. */ switch (entry->block->header.typeflag) { #if defined(S_IFBLK) || defined(S_IFCHR) case CHRTYPE: case BLKTYPE: sprintf (size, "%lu,%lu", (unsigned long) major (entry->stat.st_rdev), (unsigned long) minor (entry->stat.st_rdev)); break; #endif case GNUTAR_SPARSE: sprintf (size, "%lu", (unsigned long) get_header_realsize (entry->block)); break; default: sprintf (size, "%lu", (unsigned long) entry->stat.st_size); } /* Figure out padding and print the whole line. */ pad = strlen (user) + strlen (group) + strlen (size) + 1; if (pad > ugswidth) ugswidth = pad; #if USE_OLD_CTIME fprintf (stdlis, "%s %s/%s %*s%s %s %s", modes, user, group, ugswidth - pad, "", size, timestamp + 4, timestamp + 20); #else fprintf (stdlis, "%s %s/%s %*s%s %s", modes, user, group, ugswidth - pad, "", size, timestamp); #endif name = quote_copy_string (entry->name); if (name) { fprintf (stdlis, " %s", name); free (name); } else fprintf (stdlis, " %s", entry->name); switch (entry->block->header.typeflag) { case SYMTYPE: name = quote_copy_string (entry->linkname); if (name) { fprintf (stdlis, " -> %s\n", name); free (name); } else fprintf (stdlis, " -> %s\n", entry->linkname); break; case LNKTYPE: name = quote_copy_string (entry->linkname); if (name) { fprintf (stdlis, _(" link to %s\n"), name); free (name); } else fprintf (stdlis, _(" link to %s\n"), entry->linkname); break; default: fprintf (stdlis, _(" unknown file type `%c'\n"), entry->block->header.typeflag); break; case AREGTYPE: case REGTYPE: case GNUTAR_SPARSE: case CHRTYPE: case BLKTYPE: case DIRTYPE: case FIFOTYPE: case CONTTYPE: case GNUTAR_DUMPDIR: putc ('\n', stdlis); break; case GNUTAR_VOLHDR: fprintf (stdlis, _("--Volume Header--\n")); break; case GNUTAR_MULTIVOL: fprintf (stdlis, _("--Continued at byte %lu--\n"), (unsigned long) get_header_offset (entry->block)); break; case GNUTAR_NAMES: fprintf (stdlis, _("--Mangled file names--\n")); break; } } fflush (stdlis); }