aboutsummaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2024-01-30 18:07:59 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2024-01-30 20:21:55 +0000
commit2954af09f143ed1e484f7ca520e0d2611101e248 (patch)
tree094e967470aa011ce1546a05bea8705d81fdb0a2 /bin
parent30c741c6e4bb66a5814c6c3783de9032e86380e6 (diff)
downloadsrc-2954af09f143ed1e484f7ca520e0d2611101e248.tar.gz
src-2954af09f143ed1e484f7ca520e0d2611101e248.zip
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
Diffstat (limited to 'bin')
-rw-r--r--bin/chflags/chflags.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/bin/chflags/chflags.c b/bin/chflags/chflags.c
index 0972240558df..a78ebbfd471d 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)