Whamcloud - gitweb
Update version number for e2fsprogs 1.35 release.
[tools/e2fsprogs.git] / lib / e2p / fgetversion.c
index ba4eec4..fe05f12 100644 (file)
@@ -14,6 +14,9 @@
  * 93/10/30    - Creation
  */
 
+#define _LARGEFILE_SOURCE
+#define _LARGEFILE64_SOURCE
+
 #if HAVE_ERRNO_H
 #include <errno.h>
 #endif
 #include <fcntl.h>
 #include <sys/ioctl.h>
 
-#include <linux/ext2_fs.h>
-
 #include "e2p.h"
 
+#ifdef O_LARGEFILE
+#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK|O_LARGEFILE)
+#else
+#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK)
+#endif
+
 int fgetversion (const char * name, unsigned long * version)
 {
 #if HAVE_EXT2_IOCTLS
-       int fd;
-       int r;
+#if !APPLE_DARWIN
+       int fd, r, ver, save_errno = 0;
 
-       fd = open (name, O_RDONLY|O_NONBLOCK);
+       fd = open (name, OPEN_FLAGS);
        if (fd == -1)
-               return - 1;
-       r = ioctl (fd, EXT2_IOC_GETVERSION, version);
+               return -1;
+       r = ioctl (fd, EXT2_IOC_GETVERSION, &ver);
+       if (r == -1)
+               save_errno = errno;
+       *version = ver;
        close (fd);
+       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;