/* 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
}
/* 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);
fprintf (stdlis, _("Renaming %s to %s\n"),
quote_n (0, before_backup_name),
quote_n (1, after_backup_name));
- return 1;
+ return true;
}
else
{
quotearg_colon (before_backup_name),
quote_n (1, after_backup_name)));
assign_string (&after_backup_name, 0);
- return 0;
+ return false;
}
}
}
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
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)
{
(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)
{
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)
{
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)
{
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)
{
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)
{
}
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,
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));
+ size),
+ name, (unsigned long int) status, (unsigned long int) size));
}
void