hardlink: use only err.h to print errors and warnings

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2021-02-04 13:56:45 +01:00
parent 06d8fe8909
commit 3c52b1c83c
1 changed files with 14 additions and 29 deletions

View File

@ -83,20 +83,12 @@ struct file {
/** /**
* enum log_level - Logging levels * enum log_level - Logging levels
* @JLOG_SYSFAT: Fatal error message with errno, will be printed to stderr
* @JLOG_FATAL: Fatal error message with errno, will be printed to stderr
* @JLOG_SYSERR: Error message with errno, will be printed to stderr
* @JLOG_ERROR: Error message, will be printed to stderr
* @JLOG_SUMMARY: Default log level * @JLOG_SUMMARY: Default log level
* @JLOG_INFO: Verbose logging (verbose == 1) * @JLOG_INFO: Verbose logging (verbose == 1)
* @JLOG_DEBUG1: Verbosity 2 * @JLOG_DEBUG1: Verbosity 2
* @JLOG_DEBUG2: Verbosity 3 * @JLOG_DEBUG2: Verbosity 3
*/ */
enum log_level { enum log_level {
JLOG_SYSFAT = -4,
JLOG_FATAL = -3,
JLOG_SYSERR = -2,
JLOG_ERROR = -1,
JLOG_SUMMARY, JLOG_SUMMARY,
JLOG_INFO, JLOG_INFO,
JLOG_DEBUG1, JLOG_DEBUG1,
@ -191,21 +183,13 @@ __attribute__ ((format(printf, 2, 3)))
static void jlog(enum log_level level, const char *format, ...) static void jlog(enum log_level level, const char *format, ...)
{ {
FILE *stream = (level >= 0) ? stdout : stderr; FILE *stream = (level >= 0) ? stdout : stderr;
int errno_ = errno;
va_list args; va_list args;
if (level <= opts.verbosity) { if (level <= (unsigned int) opts.verbosity) {
if (level <= JLOG_FATAL)
fprintf(stream, "ERROR: ");
else if (level < 0)
fprintf(stream, "WARNING: ");
va_start(args, format); va_start(args, format);
vfprintf(stream, format, args); vfprintf(stream, format, args);
va_end(args); va_end(args);
if (level == JLOG_SYSERR || level == JLOG_SYSFAT) fputc('\n', stream);
fprintf(stream, ": %s\n", strerror(errno_));
else
fputc('\n', stream);
} }
} }
@ -599,11 +583,9 @@ static int file_contents_equal(const struct file *a, const struct file *b)
return !handle_interrupt() && cmp == 0; return !handle_interrupt() && cmp == 0;
err: err:
if (fa == NULL || fb == NULL) if (fa == NULL || fb == NULL)
jlog(JLOG_SYSERR, "Cannot open %s", warn(_("cannot open %s"), fa ? b->links->path : a->links->path);
fa ? b->links->path : a->links->path);
else else
jlog(JLOG_SYSERR, "Cannot read %s", warn(_("cannot read %s"), ferror(fa) ? a->links->path : b->links->path);
ferror(fa) ? a->links->path : b->links->path);
cmp = 1; cmp = 1;
goto out; goto out;
} }
@ -689,12 +671,11 @@ static int file_link(struct file *a, struct file *b)
snprintf(new_path, len, "%s.hardlink-temporary", b->links->path); snprintf(new_path, len, "%s.hardlink-temporary", b->links->path);
if (link(a->links->path, new_path) != 0) { if (link(a->links->path, new_path) != 0) {
jlog(JLOG_SYSERR, "Cannot link %s to %s", a->links->path, new_path); warn(_("cannot link %s to %s"), a->links->path, new_path);
free(new_path); free(new_path);
return FALSE; return FALSE;
} else if (rename(new_path, b->links->path) != 0) { } else if (rename(new_path, b->links->path) != 0) {
jlog(JLOG_SYSERR, "Cannot rename %s to %s", a->links->path, warn(_("cannot rename %s to %s"), a->links->path, new_path);
new_path);
unlink(new_path); /* cleanup failed rename */ unlink(new_path); /* cleanup failed rename */
free(new_path); free(new_path);
return FALSE; return FALSE;
@ -750,7 +731,7 @@ static int inserter(const char *fpath, const struct stat *sb, int typeflag,
if (handle_interrupt()) if (handle_interrupt())
return 1; return 1;
if (typeflag == FTW_DNR || typeflag == FTW_NS) if (typeflag == FTW_DNR || typeflag == FTW_NS)
jlog(JLOG_SYSERR, "Cannot read %s", fpath); warn(_("cannot read %s"), fpath);
if (typeflag != FTW_F || !S_ISREG(sb->st_mode)) if (typeflag != FTW_F || !S_ISREG(sb->st_mode))
return 0; return 0;
@ -784,7 +765,7 @@ static int inserter(const char *fpath, const struct stat *sb, int typeflag,
node = tsearch(fil, &files_by_ino, compare_nodes_ino); node = tsearch(fil, &files_by_ino, compare_nodes_ino);
if (node == NULL) if (node == NULL)
return jlog(JLOG_SYSFAT, "Cannot continue"), 1; goto fail;
if (*node != fil) { if (*node != fil) {
/* Already known inode, add link to inode information */ /* Already known inode, add link to inode information */
@ -800,7 +781,7 @@ static int inserter(const char *fpath, const struct stat *sb, int typeflag,
node = tsearch(fil, &files, compare_nodes); node = tsearch(fil, &files, compare_nodes);
if (node == NULL) if (node == NULL)
return jlog(JLOG_SYSFAT, "Cannot continue"), 1; goto fail;
if (*node != fil) { if (*node != fil) {
struct file *l; struct file *l;
@ -823,6 +804,10 @@ static int inserter(const char *fpath, const struct stat *sb, int typeflag,
} }
return 0; return 0;
fail:
warn(_("cannot continue")); /* probably ENOMEM */
return 0;
} }
/** /**
@ -1070,7 +1055,7 @@ int main(int argc, char *argv[])
for (; optind < argc; optind++) for (; optind < argc; optind++)
if (nftw(argv[optind], inserter, 20, FTW_PHYS) == -1) if (nftw(argv[optind], inserter, 20, FTW_PHYS) == -1)
jlog(JLOG_SYSERR, "Cannot process %s", argv[optind]); warn(_("cannot process %s"), argv[optind]);
twalk(files, visitor); twalk(files, visitor);