From 2954af09f143ed1e484f7ca520e0d2611101e248 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Tue, 30 Jan 2024 20:07:59 +0200 Subject: [PATCH] chflags(1): obey siginfo request on chflagsat(2) failure Note that the error diagnostic can now be printed both to stderr due to the absence of the -f flag and to stdout due to SIGINFO simultaneously. Noted and reviewed by: jrtc27 Sponsored by: The FreeBSD Foundation MFC after: 1 week --- bin/chflags/chflags.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bin/chflags/chflags.c b/bin/chflags/chflags.c index 0972240558d..a78ebbfd471 100644 --- a/bin/chflags/chflags.c +++ b/bin/chflags/chflags.c @@ -61,7 +61,7 @@ main(int argc, char *argv[]) u_long clear, newflags, set; long val; int Hflag, Lflag, Rflag, fflag, hflag, vflag, xflag; - int ch, fts_options, oct, rval; + int ch, e, fts_options, oct, rval; char *flags, *ep; Hflag = Lflag = Rflag = fflag = hflag = vflag = xflag = 0; @@ -183,10 +183,16 @@ main(int argc, char *argv[]) continue; if (chflagsat(AT_FDCWD, p->fts_accpath, newflags, atflag) == -1) { + e = errno; if (!fflag) { - warn("%s", p->fts_path); + warnc(e, "%s", p->fts_path); rval = 1; } + if (siginfo) { + (void)printf("%s: %s\n", p->fts_path, + strerror(e)); + siginfo = 0; + } } else if (vflag || siginfo) { (void)printf("%s", p->fts_path); if (vflag > 1 || siginfo) -- 2.45.0