X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fmisc.c;h=bca569a5a8c11681600eaeb978ee6e8c25b9ecf7;hb=21002fe811420acc5ff49cba391e43be48f13047;hp=8112ee8698dc8ba1e327aa96b94240db712b566b;hpb=31d9c7e2a4344d8f884c93dd4fb467894de69e99;p=chaz%2Ftar diff --git a/src/misc.c b/src/misc.c index 8112ee8..bca569a 100644 --- a/src/misc.c +++ b/src/misc.c @@ -1,7 +1,7 @@ /* Miscellaneous functions, not really specific to GNU tar. Copyright (C) 1988, 1992, 1994, 1995, 1996, 1997, 1999, 2000, 2001, - 2003 Free Software Foundation, Inc. + 2003, 2004 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the @@ -329,34 +329,36 @@ remove_any_file (const char *path, enum remove_option option) } /* Check if PATH already exists and make a backup of it right now. - Return success (nonzero) only if the backup in either unneeded, or + Return success (nonzero) only if the backup is either unneeded, or successful. For now, directories are considered to never need - backup. If ARCHIVE is nonzero, this is the archive and so, we do - not have to backup block or character devices, nor remote entities. */ -int -maybe_backup_file (const char *path, int archive) + backup. If THIS_IS_THE_ARCHIVE is nonzero, this is the archive and + so, we do not have to backup block or character devices, nor remote + entities. */ +bool +maybe_backup_file (const char *path, int this_is_the_archive) { struct stat file_stat; /* Check if we really need to backup the file. */ - if (archive && _remdev (path)) - return 1; + if (this_is_the_archive && _remdev (path)) + return true; if (stat (path, &file_stat)) { if (errno == ENOENT) - return 1; + return true; stat_error (path); - return 0; + return false; } if (S_ISDIR (file_stat.st_mode)) - return 1; + return true; - if (archive && (S_ISBLK (file_stat.st_mode) || S_ISCHR (file_stat.st_mode))) - return 1; + if (this_is_the_archive + && (S_ISBLK (file_stat.st_mode) || S_ISCHR (file_stat.st_mode))) + return true; assign_string (&before_backup_name, path); @@ -376,7 +378,7 @@ maybe_backup_file (const char *path, int archive) fprintf (stdlis, _("Renaming %s to %s\n"), quote_n (0, before_backup_name), quote_n (1, after_backup_name)); - return 1; + return true; } else { @@ -386,7 +388,7 @@ maybe_backup_file (const char *path, int archive) quotearg_colon (before_backup_name), quote_n (1, after_backup_name))); assign_string (&after_backup_name, 0); - return 0; + return false; } } @@ -587,15 +589,18 @@ close_error (char const *name) } void -close_fatal (char const *name) +close_warn (char const *name) { - call_arg_fatal ("close", name); + call_arg_warn ("close", name); } void -close_warn (char const *name) +close_diag (char const *name) { - call_arg_warn ("close", name); + if (ignore_failed_read_option) + close_warn (name); + else + close_error (name); } void @@ -648,6 +653,15 @@ open_warn (char const *name) call_arg_warn ("open", name); } +void +open_diag (char const *name) +{ + if (ignore_failed_read_option) + open_warn (name); + else + open_error (name); +} + void read_error (char const *name) { @@ -660,7 +674,9 @@ read_error_details (char const *name, off_t offset, size_t size) char buf[UINTMAX_STRSIZE_BOUND]; int e = errno; ERROR ((0, e, - _("%s: Read error at byte %s, reading %lu bytes"), + ngettext ("%s: Read error at byte %s, reading %lu byte", + "%s: Read error at byte %s, reading %lu bytes", + size), quotearg_colon (name), STRINGIFY_BIGINT (offset, buf), (unsigned long) size)); } @@ -671,11 +687,22 @@ read_warn_details (char const *name, off_t offset, size_t size) char buf[UINTMAX_STRSIZE_BOUND]; int e = errno; WARN ((0, e, - _("%s: Warning: Read error at byte %s, reading %lu bytes"), + ngettext ("%s: Warning: Read error at byte %s, reading %lu byte", + "%s: Warning: Read error at byte %s, reading %lu bytes", + size), quotearg_colon (name), STRINGIFY_BIGINT (offset, buf), (unsigned long) size)); } +void +read_diag_details (char const *name, off_t offset, size_t size) +{ + if (ignore_failed_read_option) + read_warn_details (name, offset, size); + else + read_error_details (name, offset, size); +} + void read_fatal (char const *name) { @@ -688,7 +715,9 @@ read_fatal_details (char const *name, off_t offset, size_t size) char buf[UINTMAX_STRSIZE_BOUND]; int e = errno; FATAL_ERROR ((0, e, - _("%s: Read error at byte %s, reading %lu bytes"), + ngettext ("%s: Read error at byte %s, reading %lu byte", + "%s: Read error at byte %s, reading %lu bytes", + size), quotearg_colon (name), STRINGIFY_BIGINT (offset, buf), (unsigned long) size)); } @@ -705,6 +734,15 @@ readlink_warn (char const *name) call_arg_warn ("readlink", name); } +void +readlink_diag (char const *name) +{ + if (ignore_failed_read_option) + readlink_warn (name); + else + readlink_error (name); +} + void savedir_error (char const *name) { @@ -717,6 +755,15 @@ savedir_warn (char const *name) call_arg_warn ("savedir", name); } +void +savedir_diag (char const *name) +{ + if (ignore_failed_read_option) + savedir_warn (name); + else + savedir_error (name); +} + void seek_error (char const *name) { @@ -749,6 +796,15 @@ seek_warn_details (char const *name, off_t offset) STRINGIFY_BIGINT (offset, buf))); } +void +seek_diag_details (char const *name, off_t offset) +{ + if (ignore_failed_read_option) + seek_warn_details (name, offset); + else + seek_error_details (name, offset); +} + void symlink_error (char const *contents, char const *name) { @@ -769,6 +825,15 @@ stat_warn (char const *name) call_arg_warn ("stat", name); } +void +stat_diag (char const *name) +{ + if (ignore_failed_read_option) + stat_warn (name); + else + stat_error (name); +} + void truncate_error (char const *name) { @@ -806,13 +871,16 @@ write_error (char const *name) } void -write_error_details (char const *name, ssize_t status, size_t size) +write_error_details (char const *name, size_t status, size_t size) { - if (status < 0) + if (status == 0) write_error (name); else - ERROR ((0, 0, _("%s: Wrote only %lu of %lu bytes"), - name, (unsigned long) status, (unsigned long) record_size)); + ERROR ((0, 0, + ngettext ("%s: Wrote only %lu of %lu byte", + "%s: Wrote only %lu of %lu bytes", + size), + name, (unsigned long int) status, (unsigned long int) size)); } void