X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fmisc.c;h=67f70f61c2e339670246f15894e232afadd8334f;hb=3030a247b1e0d4ab25261107bed5ff4afb644b84;hp=8112ee8698dc8ba1e327aa96b94240db712b566b;hpb=31d9c7e2a4344d8f884c93dd4fb467894de69e99;p=chaz%2Ftar diff --git a/src/misc.c b/src/misc.c index 8112ee8..67f70f6 100644 --- a/src/misc.c +++ b/src/misc.c @@ -329,11 +329,11 @@ 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 +bool maybe_backup_file (const char *path, int archive) { struct stat file_stat; @@ -341,22 +341,22 @@ maybe_backup_file (const char *path, int archive) /* Check if we really need to backup the file. */ if (archive && _remdev (path)) - return 1; + 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; + return true; assign_string (&before_backup_name, path); @@ -376,7 +376,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 +386,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; } } @@ -598,6 +598,15 @@ close_warn (char const *name) call_arg_warn ("close", name); } +void +close_diag (char const *name) +{ + if (ignore_failed_read_option) + close_warn (name); + else + close_error (name); +} + void exec_fatal (char const *name) { @@ -648,6 +657,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 +678,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 +691,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 +719,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 +738,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 +759,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 +800,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 +829,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) { @@ -811,7 +880,10 @@ write_error_details (char const *name, ssize_t status, size_t size) if (status < 0) write_error (name); else - ERROR ((0, 0, _("%s: Wrote only %lu of %lu bytes"), + ERROR ((0, 0, + ngettext ("%s: Wrote only %lu of %lu byte", + "%s: Wrote only %lu of %lu bytes", + record_size), name, (unsigned long) status, (unsigned long) record_size)); }