now working on OSX
While this seems to work fine when used in a simple program, when I load it in ghci, it segfaults about half the time. Don't know why, and seems ghci specific, but if I get reports of crashes, I'll need to look into that.
This commit is contained in:
parent
f768cddf3a
commit
4bcc92abd7
2 changed files with 10 additions and 18 deletions
|
@ -34,6 +34,9 @@
|
||||||
|
|
||||||
#include "libmounts.h"
|
#include "libmounts.h"
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#ifdef GETMNTENT
|
#ifdef GETMNTENT
|
||||||
/* direct passthrough the getmntent */
|
/* direct passthrough the getmntent */
|
||||||
FILE *mounts_start (void) {
|
FILE *mounts_start (void) {
|
||||||
|
@ -47,7 +50,7 @@ struct mntent *mounts_next (FILE *fp) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef GETMNTINFOCALL
|
#ifdef GETMNTINFO
|
||||||
/* getmntent emulation using getmntinfo */
|
/* getmntent emulation using getmntinfo */
|
||||||
FILE *mounts_start (void) {
|
FILE *mounts_start (void) {
|
||||||
return ((FILE *)0x1); /* dummy non-NULL FILE pointer, not used */
|
return ((FILE *)0x1); /* dummy non-NULL FILE pointer, not used */
|
||||||
|
@ -58,7 +61,7 @@ int mounts_end (FILE *fp) {
|
||||||
|
|
||||||
static struct mntent _mntent;
|
static struct mntent _mntent;
|
||||||
|
|
||||||
static struct mntent *statfs_to_mntent (struct MNTINFOSTRUCT *mntbuf) {
|
static struct mntent *statfs_to_mntent (struct statfs *mntbuf) {
|
||||||
_mntent.mnt_fsname = mntbuf->f_mntfromname;
|
_mntent.mnt_fsname = mntbuf->f_mntfromname;
|
||||||
_mntent.mnt_dir = mntbuf->f_mntonname;
|
_mntent.mnt_dir = mntbuf->f_mntonname;
|
||||||
_mntent.mnt_type = mntbuf->f_fstypename;
|
_mntent.mnt_type = mntbuf->f_fstypename;
|
||||||
|
@ -72,15 +75,16 @@ static struct mntent *statfs_to_mntent (struct MNTINFOSTRUCT *mntbuf) {
|
||||||
|
|
||||||
static int pos = -1;
|
static int pos = -1;
|
||||||
static int mntsize = -1;
|
static int mntsize = -1;
|
||||||
|
struct statfs *mntbuf = NULL;
|
||||||
|
|
||||||
struct mntent *mounts_next (FILE *fp) {
|
struct mntent *mounts_next (FILE *fp) {
|
||||||
struct MNTINFOSTRUCT *mntbuf;
|
|
||||||
|
|
||||||
if (pos == -1 || mntsize == -1)
|
if (pos == -1 || mntsize == -1)
|
||||||
mntsize = GETMNTINFOCALL(&mntbuf, MNT_NOWAIT);
|
mntsize = getmntinfo(&mntbuf, MNT_NOWAIT);
|
||||||
++pos;
|
++pos;
|
||||||
if (pos == mntsize) {
|
if (pos == mntsize) {
|
||||||
pos = mntsize = -1;
|
pos = mntsize = -1;
|
||||||
|
mntbuf = NULL;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,9 @@
|
||||||
/* Include appropriate headers for the OS, and define what will be used. */
|
/* Include appropriate headers for the OS, and define what will be used. */
|
||||||
#if defined(__APPLE__)
|
#if defined (__FreeBSD__) || defined (__APPLE__)
|
||||||
# include <sys/param.h>
|
# include <sys/param.h>
|
||||||
# include <sys/ucred.h>
|
# include <sys/ucred.h>
|
||||||
# include <sys/mount.h>
|
# include <sys/mount.h>
|
||||||
/* In newer OSX versions, statfs64 is deprecated, in favor of statfs,
|
# define GETMNTINFO
|
||||||
* 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
|
#else
|
||||||
#if defined (__linux__) || defined (__FreeBSD_kernel__)
|
#if defined (__linux__) || defined (__FreeBSD_kernel__)
|
||||||
/* Linux or Debian kFreeBSD */
|
/* Linux or Debian kFreeBSD */
|
||||||
|
@ -25,7 +14,6 @@
|
||||||
# define UNKNOWN
|
# define UNKNOWN
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue