diff options
author | Theodore Ts'o <tytso@mit.edu> | 2002-08-17 14:44:56 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2002-08-17 14:44:56 -0400 |
commit | 023d111e92195624463e870146d0f386ba5c2d87 (patch) | |
tree | e29003c4e19f7785a2c94cc85e653426c1821c08 /lib/e2p/fsetflags.c | |
parent | f044b4d8a02ef9f95e27b8bdf6adc6548e5dc4a9 (diff) | |
download | e2fsprogs-023d111e92195624463e870146d0f386ba5c2d87.tar.gz |
chattr.1.in: Document the compression attribute flags E, X, and
Z, and explain that chattr can't set or set these flags.
(Addresses Debian Bug #151990)
fsetflags.c (fsetflags), fgetflags.c (fgetflags.c), setflags.c
(setflags), getflags.c (getflags): Check to make sure the
file is a regular file or a directory before attempting to
use the ext2 ioctls. Otherwise, return EOPNOTSUPP.
(Addresses Debian Bug #152029).
Diffstat (limited to 'lib/e2p/fsetflags.c')
-rw-r--r-- | lib/e2p/fsetflags.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/lib/e2p/fsetflags.c b/lib/e2p/fsetflags.c index 6942c045..f12af1c8 100644 --- a/lib/e2p/fsetflags.c +++ b/lib/e2p/fsetflags.c @@ -23,9 +23,9 @@ #if HAVE_UNISTD_H #include <unistd.h> #endif -#if HAVE_CHFLAGS -#include <sys/stat.h> /* For the flag values. */ -#else +#include <sys/types.h> +#include <sys/stat.h> +#if HAVE_EXT2_IOCTLS #include <fcntl.h> #include <sys/ioctl.h> #endif @@ -40,6 +40,7 @@ int fsetflags (const char * name, unsigned long flags) { + struct stat buf; #if HAVE_CHFLAGS unsigned long bsd_flags = 0; @@ -61,6 +62,11 @@ int fsetflags (const char * name, unsigned long flags) #if HAVE_EXT2_IOCTLS int fd, r, f, save_errno = 0; + if (!stat(name, &buf) && + !S_ISREG(buf.st_mode) && !S_ISDIR(buf.st_mode)) { + close(fd); + goto notsupp; + } fd = open (name, OPEN_FLAGS); if (fd == -1) return -1; @@ -72,10 +78,9 @@ int fsetflags (const char * name, unsigned long flags) if (save_errno) errno = save_errno; return r; -#else /* ! HAVE_EXT2_IOCTLS */ - extern int errno; +#endif /* HAVE_EXT2_IOCTLS */ +#endif +notsupp: errno = EOPNOTSUPP; return -1; -#endif /* ! HAVE_EXT2_IOCTLS */ -#endif } |