summaryrefslogtreecommitdiff
path: root/Utility/libmounts.h
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-07-19 20:38:58 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-07-19 20:38:58 -0400
commit107a7b9388077a2b7fe9ce107da3a4a5fa396e2e (patch)
tree687326521de2b4da5b38ef9d3facae9f5aa63ab2 /Utility/libmounts.h
parentd5051ec088a443d0fbc0979d0421e62c60ec13f8 (diff)
try to make Utility.Mounts portable
This is an unholy mashup, but it just might work. It works on Linux, that's all I've tested. :)
Diffstat (limited to 'Utility/libmounts.h')
-rw-r--r--Utility/libmounts.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/Utility/libmounts.h b/Utility/libmounts.h
new file mode 100644
index 000000000..0bd52e323
--- /dev/null
+++ b/Utility/libmounts.h
@@ -0,0 +1,48 @@
+/* Include appropriate headers for the OS, and define what will be used. */
+#if defined(__APPLE__)
+# include <sys/param.h>
+# include <sys/ucred.h>
+# include <sys/mount.h>
+/* In newer OSX versions, statfs64 is deprecated, in favor of statfs,
+ * which is 64 bit only with a build option -- but statfs64 still works,
+ * and this keeps older OSX also supported. */
+# define GETMNTINFOCALL getmntinfo64
+# define MNTINFOSTRUCT statfs64
+#else
+#if defined (__FreeBSD__)
+# include <sys/param.h>
+# include <sys/ucred.h>
+# include <sys/mount.h>
+# define GETMNTINFOCALL getmntinfo64
+# define MNTINFOSTRUCT statfs64
+#else
+#if defined (__linux__) || defined (__FreeBSD_kernel__)
+/* Linux or Debian kFreeBSD */
+#include <mntent.h>
+# define GETMNTENT
+#else
+# warning mounts listing code not available for this OS
+# define UNKNOWN
+#endif
+#endif
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#ifndef GETMNTENT
+#warning "boo"
+struct mntent {
+ char *mnt_fsname;
+ char *mnt_dir;
+ char *mnt_type;
+ char *mnt_opts; /* not filled in */
+ int mnt_freq; /* not filled in */
+ int mnt_passno; /* not filled in */
+};
+#endif
+
+FILE *mounts_start (void);
+int mounts_end (FILE *fp);
+struct mntent *mounts_next (FILE *fp);