From: Theodore Ts'o Date: Sun, 14 Jul 2002 20:13:55 +0000 (-0400) Subject: fsetflags.c (fsetflags), fgetflags.c (fgetflags): Save X-Git-Tag: E2FSPROGS-1.28-WIP-0817~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a8a813ee3321f3d8986a88c83903b933f1b35e8e;p=thirdparty%2Fe2fsprogs.git fsetflags.c (fsetflags), fgetflags.c (fgetflags): Save errno if the ioctl fails, and restore it just before we return. --- diff --git a/lib/e2p/ChangeLog b/lib/e2p/ChangeLog index 3a81898c3..5dfc86d14 100644 --- a/lib/e2p/ChangeLog +++ b/lib/e2p/ChangeLog @@ -1,8 +1,9 @@ 2002-07-14 Theodore Ts'o - * fsetversion.c (fsetversion), fgetversion.c, fgetversion.c: Save - errno if the ioctl fails, and restore it just before we - return. + * fsetflags.c (fsetflags), fgetflags.c (fgetflags, + fsetversion.c (fsetversion), fgetversion.c, + fgetversion.c: Save errno if the ioctl fails, and + restore it just before we return. * iod.c (iterate_on_dir): Rewrite function to make it more portable. We now make much fewer assumptions about nature diff --git a/lib/e2p/fgetflags.c b/lib/e2p/fgetflags.c index c9b4d1eb3..ed4ade9dd 100644 --- a/lib/e2p/fgetflags.c +++ b/lib/e2p/fgetflags.c @@ -63,15 +63,18 @@ int fgetflags (const char * name, unsigned long * flags) return 0; #else #if HAVE_EXT2_IOCTLS - int fd, r, f; + int fd, r, f, save_errno = 0; fd = open (name, OPEN_FLAGS); if (fd == -1) return -1; r = ioctl (fd, EXT2_IOC_GETFLAGS, &f); + if (r == -1) + save_errno = errno; *flags = f; - close (fd); + if (save_errno) + errno = save_errno; return r; #else /* ! HAVE_EXT2_IOCTLS */ extern int errno; diff --git a/lib/e2p/fsetflags.c b/lib/e2p/fsetflags.c index 35266dcd9..6942c045a 100644 --- a/lib/e2p/fsetflags.c +++ b/lib/e2p/fsetflags.c @@ -59,14 +59,18 @@ int fsetflags (const char * name, unsigned long flags) return chflags (name, bsd_flags); #else #if HAVE_EXT2_IOCTLS - int fd, r, f; + int fd, r, f, save_errno = 0; fd = open (name, OPEN_FLAGS); if (fd == -1) return -1; f = (int) flags; r = ioctl (fd, EXT2_IOC_SETFLAGS, &f); + if (r == -1) + save_errno = errno; close (fd); + if (save_errno) + errno = save_errno; return r; #else /* ! HAVE_EXT2_IOCTLS */ extern int errno;