diff options
author | Harshavardhana <harsha@harshavardhana.net> | 2014-05-15 00:15:52 -0700 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2014-05-17 11:52:53 -0700 |
commit | aa85de4be3f96a140a69170330293bfdfa3d24e7 (patch) | |
tree | 8ae6a10aa4b850492aa3cd109db5150e63aa9667 /contrib | |
parent | f4a391e5a44950b0468af082255b9f5abf52b10b (diff) |
contrib: Cross platform fixes after recent commits
- provide a getment_r () version which behaves as
re-entrant with some caveats for NetBSD/OSX specific.
- some apparent warning issues fixed, always use PRI* format
specification avoid using %ld i.e not portable
Change-Id: Ib3d1a73b426e38b436b356355b97db0104a1a4a5
BUG: 1089172
Signed-off-by: Harshavardhana <harsha@harshavardhana.net>
Reviewed-on: http://review.gluster.org/7722
Reviewed-by: Emmanuel Dreyfus <manu@netbsd.org>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/mount/mntent.c | 71 | ||||
-rw-r--r-- | contrib/mount/mntent_compat.h | 6 |
2 files changed, 65 insertions, 12 deletions
diff --git a/contrib/mount/mntent.c b/contrib/mount/mntent.c index 5ab5ac19e84..991e694f1cd 100644 --- a/contrib/mount/mntent.c +++ b/contrib/mount/mntent.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. */ -#ifdef GF_DARWIN_HOST_OS +#if defined(GF_DARWIN_HOST_OS) || defined(__NetBSD__) #include <stdlib.h> #include <string.h> #include <sys/param.h> @@ -43,6 +43,12 @@ #include <sys/mount.h> #include "mntent_compat.h" +#ifdef __NetBSD__ +typedef struct statvfs gf_statfs_t; +#else +typedef struct statfs gf_statfs_t; +#endif + static int pos = -1; static int mntsize = -1; static struct mntent _mntent; @@ -102,23 +108,32 @@ flags2opts (int flags) if (flags & MNT_ASYNC) res = concatopt(res, "async"); #if !defined(GF_DARWIN_HOST_OS) if (flags & MNT_NOATIME) res = concatopt(res, "noatime"); +#if !defined(__NetBSD__) if (flags & MNT_NOCLUSTERR) res = concatopt(res, "noclusterr"); if (flags & MNT_NOCLUSTERW) res = concatopt(res, "noclusterw"); if (flags & MNT_NOSYMFOLLOW) res = concatopt(res, "nosymfollow"); if (flags & MNT_SUIDDIR) res = concatopt(res, "suiddir"); -#endif +#endif /* !__NetBSD__ */ +#endif /* !GF_DARWIN_HOS_OS */ return res; } static struct mntent * -statfs_to_mntent (struct statfs *mntbuf) +statfs_to_mntent (gf_statfs_t *mntbuf) { static char opts_buf[40], *tmp; + int f_flags; _mntent.mnt_fsname = mntbuf->f_mntfromname; _mntent.mnt_dir = mntbuf->f_mntonname; _mntent.mnt_type = mntbuf->f_fstypename; - tmp = flags2opts (mntbuf->f_flags); + +#ifdef __NetBSD__ + f_flags = mntbuf->f_flag; +#else + f_flags = mntbuf->f_flags; +#endif + tmp = flags2opts (f_flags); if (tmp) { opts_buf[sizeof(opts_buf)-1] = '\0'; strncpy (opts_buf, tmp, sizeof(opts_buf)-1); @@ -134,7 +149,10 @@ statfs_to_mntent (struct statfs *mntbuf) struct mntent * getmntent (FILE *fp) { - struct statfs *mntbuf; + gf_statfs_t *mntbuf; + + if (!fp) + return NULL; if (pos == -1 || mntsize == -1) mntsize = getmntinfo (&mntbuf, MNT_NOWAIT); @@ -148,16 +166,49 @@ getmntent (FILE *fp) return (statfs_to_mntent (&mntbuf[pos])); } -/* Dummy functions */ +/* + Careful using this function ``buffer`` and ``bufsize`` are + ignored since there is no stream with strings to populate + them on OSX or NetBSD, if one wishes to populate them then + perhaps a new function should be written in this source file + which uses 'getmntinfo()' to stringify the mntent's +*/ + +struct mntent *getmntent_r (FILE *fp, struct mntent *result, + char *buffer, int bufsize) +{ + struct mntent *ment = NULL; + + if (!fp) + return NULL; + + flockfile (fp); + ment = getmntent (fp); + memcpy (result, ment, sizeof(*ment)); + funlockfile (fp); + + return result; +} + FILE * -setmntent(const char *filename, const char *type) +setmntent (const char *filename, const char *type) { - return (FILE *)0x1; + FILE *fp = NULL; +#ifdef GF_DARWIN_HOST_OS + fp = fopen (filename, "w"); +#else + fp = fopen (filename, type); +#endif + return fp; } int endmntent (FILE *fp) { - return 1; + if (fp) + fclose (fp); + + return 1; /* endmntent() always returns 1 */ } -#endif /* GF_DARWIN_HOST_OS */ + +#endif /* GF_DARWIN_HOST_OS || __NetBSD__ */ diff --git a/contrib/mount/mntent_compat.h b/contrib/mount/mntent_compat.h index 76a75754b1c..3f9cc931266 100644 --- a/contrib/mount/mntent_compat.h +++ b/contrib/mount/mntent_compat.h @@ -11,7 +11,7 @@ #ifndef _MNTENT_H #define _MNTENT_H -#ifdef GF_DARWIN_HOST_OS +#if defined(GF_DARWIN_HOST_OS) || defined(__NetBSD__) #include <stdio.h> struct mntent { @@ -24,6 +24,8 @@ struct mntent { }; struct mntent *getmntent (FILE *fp); +struct mntent *getmntent_r (FILE *fp, struct mntent *result, + char *buffer, int bufsize); FILE *setmntent (const char *filename, const char *type); int endmntent(FILE *fp); char * hasmntopt (const struct mntent *mnt, const char *option); @@ -31,5 +33,5 @@ char * hasmntopt (const struct mntent *mnt, const char *option); /* Dummy - /etc/mtab has no meaning on OSX platform */ #define _PATH_MOUNTED "/etc/mtab" -#endif /* GF_DARWIN_HOST_OS */ +#endif /* GF_DARWIN_HOST_OS || __NetBSD__ */ #endif /* _MNTENT_H */ |