]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
fgetflags.c, fgetversion.c, fsetflags.c, fsetversion.c: Apply
authorTheodore Ts'o <tytso@mit.edu>
Sun, 1 Feb 2004 02:16:35 +0000 (21:16 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 1 Feb 2004 02:16:35 +0000 (21:16 -0500)
patch from Brian Bergstrand to support ext2_ioctl() in
Darwin.  This is implemented via the fsctl system call.

lib/e2p/ChangeLog
lib/e2p/fgetflags.c
lib/e2p/fgetversion.c
lib/e2p/fsetflags.c
lib/e2p/fsetversion.c

index 388e4c81df23fed4b1f913e3cfbbf3d7484585ba..da9b5c0c088a8bee85c14340d991b9e23c2bcb6a 100644 (file)
@@ -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.
index 9459f062d4961ec8107d4dffea2ad0624caaea7c..0aed6c82b133a36ee20f285d86c83b6e463d04ff 100644 (file)
@@ -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:
index 404258a8c52cb33d9e27c17aedcaf63b099e67cb..fe05f12df863685df492461b1fcfc72fa6314242 100644 (file)
@@ -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;
index 183f7822b1a47a0bc605ae128512c213b9ab33b9..8b2eed4c1e5263b2890986ee1a0d6a5da3dc9906 100644 (file)
@@ -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
index 0ba41dc5da17b1aff019420c1795efd428594c3c..17bd09546e21b09e953b05fdbb49e896e0517acb 100644 (file)
@@ -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;