From 3c203cb6831fdfe096bae7ce60c594725f70f47d Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Sat, 31 Jan 2004 21:16:35 -0500 Subject: [PATCH] fgetflags.c, fgetversion.c, fsetflags.c, fsetversion.c: Apply patch from Brian Bergstrand to support ext2_ioctl() in Darwin. This is implemented via the fsctl system call. --- lib/e2p/ChangeLog | 6 ++++++ lib/e2p/fgetflags.c | 9 ++++++++- lib/e2p/fgetversion.c | 7 +++++++ lib/e2p/fsetflags.c | 7 ++++++- lib/e2p/fsetversion.c | 5 +++++ 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/lib/e2p/ChangeLog b/lib/e2p/ChangeLog index 388e4c8..da9b5c0 100644 --- a/lib/e2p/ChangeLog +++ b/lib/e2p/ChangeLog @@ -1,3 +1,9 @@ +2004-01-31 Theodore Ts'o + + * fgetflags.c, fgetversion.c, fsetflags.c, fsetversion.c: Apply + patch from Brian Bergstrand to support ext2_ioctl() in + Darwin. This is implemented via the fsctl system call. + 2003-08-20 Theodore Ts'o * ls.c (list_super2): Display the journal backup type. diff --git a/lib/e2p/fgetflags.c b/lib/e2p/fgetflags.c index 9459f06..0aed6c8 100644 --- a/lib/e2p/fgetflags.c +++ b/lib/e2p/fgetflags.c @@ -41,7 +41,7 @@ int fgetflags (const char * name, unsigned long * flags) { struct stat buf; -#if HAVE_STAT_FLAGS +#if HAVE_STAT_FLAGS && !(APPLE_DARWIN && HAVE_EXT2_IOCTLS) if (stat (name, &buf) == -1) return -1; @@ -69,6 +69,7 @@ int fgetflags (const char * name, unsigned long * flags) !S_ISREG(buf.st_mode) && !S_ISDIR(buf.st_mode)) { goto notsupp; } +#if !APPLE_DARWIN fd = open (name, OPEN_FLAGS); if (fd == -1) return -1; @@ -80,6 +81,12 @@ int fgetflags (const char * name, unsigned long * flags) if (save_errno) errno = save_errno; return r; +#else + f = -1; + save_errno = syscall(SYS_fsctl, name, EXT2_IOC_GETFLAGS, &f, 0); + *flags = f; + return (save_errno); +#endif #endif /* HAVE_EXT2_IOCTLS */ #endif notsupp: diff --git a/lib/e2p/fgetversion.c b/lib/e2p/fgetversion.c index 404258a..fe05f12 100644 --- a/lib/e2p/fgetversion.c +++ b/lib/e2p/fgetversion.c @@ -37,6 +37,7 @@ int fgetversion (const char * name, unsigned long * version) { #if HAVE_EXT2_IOCTLS +#if !APPLE_DARWIN int fd, r, ver, save_errno = 0; fd = open (name, OPEN_FLAGS); @@ -50,6 +51,12 @@ int fgetversion (const char * name, unsigned long * version) if (save_errno) errno = save_errno; return r; +#else + int ver=-1, err; + err = syscall(SYS_fsctl, name, EXT2_IOC_GETVERSION, &ver, 0); + *version = ver; + return(err); +#endif #else /* ! HAVE_EXT2_IOCTLS */ extern int errno; errno = EOPNOTSUPP; diff --git a/lib/e2p/fsetflags.c b/lib/e2p/fsetflags.c index 183f782..8b2eed4 100644 --- a/lib/e2p/fsetflags.c +++ b/lib/e2p/fsetflags.c @@ -41,7 +41,7 @@ int fsetflags (const char * name, unsigned long flags) { struct stat buf; -#if HAVE_CHFLAGS +#if HAVE_CHFLAGS && !(APPLE_DARWIN && HAVE_EXT2_IOCTLS) unsigned long bsd_flags = 0; #ifdef UF_IMMUTABLE @@ -66,6 +66,7 @@ int fsetflags (const char * name, unsigned long flags) !S_ISREG(buf.st_mode) && !S_ISDIR(buf.st_mode)) { goto notsupp; } +#if !APPLE_DARWIN fd = open (name, OPEN_FLAGS); if (fd == -1) return -1; @@ -76,6 +77,10 @@ int fsetflags (const char * name, unsigned long flags) close (fd); if (save_errno) errno = save_errno; +#else + f = (int) flags; + return syscall(SYS_fsctl, name, EXT2_IOC_SETFLAGS, &f, 0); +#endif return r; #endif /* HAVE_EXT2_IOCTLS */ #endif diff --git a/lib/e2p/fsetversion.c b/lib/e2p/fsetversion.c index 0ba41dc..17bd095 100644 --- a/lib/e2p/fsetversion.c +++ b/lib/e2p/fsetversion.c @@ -37,6 +37,7 @@ int fsetversion (const char * name, unsigned long version) { #if HAVE_EXT2_IOCTLS +#if !APPLE_DARWIN int fd, r, ver, save_errno = 0; fd = open (name, OPEN_FLAGS); @@ -50,6 +51,10 @@ int fsetversion (const char * name, unsigned long version) if (save_errno) errno = save_errno; return r; +#else + int ver = (int)version; + return syscall(SYS_fsctl, name, EXT2_IOC_SETVERSION, &ver, 0); +#endif #else /* ! HAVE_EXT2_IOCTLS */ extern int errno; errno = EOPNOTSUPP; -- 1.8.3.1