summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2004-01-31 21:16:35 -0500
committerTheodore Ts'o <tytso@mit.edu>2004-01-31 21:16:35 -0500
commit3c203cb6831fdfe096bae7ce60c594725f70f47d (patch)
tree9b778d0ba7d5e33a0b0b85f5276339e424e24982
parent2e5a1b9e6e2af21be33ff9871bff34772c7ca7f8 (diff)
downloade2fsprogs-3c203cb6831fdfe096bae7ce60c594725f70f47d.tar.gz
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.
-rw-r--r--lib/e2p/ChangeLog6
-rw-r--r--lib/e2p/fgetflags.c9
-rw-r--r--lib/e2p/fgetversion.c7
-rw-r--r--lib/e2p/fsetflags.c7
-rw-r--r--lib/e2p/fsetversion.c5
5 files changed, 32 insertions, 2 deletions
diff --git a/lib/e2p/ChangeLog b/lib/e2p/ChangeLog
index 388e4c81..da9b5c0c 100644
--- a/lib/e2p/ChangeLog
+++ b/lib/e2p/ChangeLog
@@ -1,3 +1,9 @@
+2004-01-31 Theodore Ts'o <tytso@mit.edu>
+
+ * 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 <tytso@mit.edu>
* ls.c (list_super2): Display the journal backup type.
diff --git a/lib/e2p/fgetflags.c b/lib/e2p/fgetflags.c
index 9459f062..0aed6c82 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 404258a8..fe05f12d 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 183f7822..8b2eed4c 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 0ba41dc5..17bd0954 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;