diff options
author | Alan Eldridge <alane@FreeBSD.org> | 2002-09-10 09:49:31 +0000 |
---|---|---|
committer | Alan Eldridge <alane@FreeBSD.org> | 2002-09-10 09:49:31 +0000 |
commit | 7acc766abb2cb10378f2d087473071db76d2d4da (patch) | |
tree | f45df54e36ed927dc0d5aa9045d89c7beff36b06 /devel/fam | |
parent | 9e2fa484f6367e7cc4144a8803ea885137ab3bd0 (diff) | |
download | ports-7acc766abb2cb10378f2d087473071db76d2d4da.tar.gz ports-7acc766abb2cb10378f2d087473071db76d2d4da.zip |
Notes
Diffstat (limited to 'devel/fam')
-rw-r--r-- | devel/fam/Makefile | 13 | ||||
-rw-r--r-- | devel/fam/files/mntent.h | 67 | ||||
-rw-r--r-- | devel/fam/files/mntent_compat.c++ | 154 |
3 files changed, 229 insertions, 5 deletions
diff --git a/devel/fam/Makefile b/devel/fam/Makefile index f51a67ec1912..dc66903d6a83 100644 --- a/devel/fam/Makefile +++ b/devel/fam/Makefile @@ -7,7 +7,7 @@ PORTNAME= fam PORTVERSION= 2.6.9 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= devel MASTER_SITES= ftp://oss.sgi.com/projects/fam/download/ PATCH_SITES= ftp://oss.sgi.com/projects/fam/download/patches/ @@ -16,7 +16,7 @@ PATCHFILES= freebsd-mntent.patch # freebsd-build.patch MAINTAINER= ports@geeksrus.net -USE_AUTOMAKE_VER=14 +USE_AUTOMAKE_VER=15 USE_LIBTOOL= yes USE_GMAKE= yes INSTALLS_SHLIB= yes @@ -25,10 +25,13 @@ MAN1= fam.1m MAN3= fam.3x pre-configure: - ${RM} -fr ${WRKSRC}/util - ${MV} ${WRKSRC}/Makefile.am ${WRKSRC}/Makefile.am.orig - ${SED} -e s/util// -e /SUBDIRS/q \ + @${RM} -fr ${WRKSRC}/util + @${MV} ${WRKSRC}/Makefile.am ${WRKSRC}/Makefile.am.orig + @${SED} -e s/util// -e /SUBDIRS/q \ <${WRKSRC}/Makefile.am.orig >${WRKSRC}/Makefile.am + @${RM} -f ${WRKSRC}/Makefile.am.orig + ${RM} -fv ${WRKSRC}/fam/mntent* + ${CP} ${FILESDIR}/mntent* ${WRKSRC}/fam post-install: @${CAT} ${PKGMESSAGE} diff --git a/devel/fam/files/mntent.h b/devel/fam/files/mntent.h new file mode 100644 index 000000000000..24a574c8a579 --- /dev/null +++ b/devel/fam/files/mntent.h @@ -0,0 +1,67 @@ +/* -*-C++-*- + + mntent.h + + Copyright (C) 2002 Alan Eldridge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + $Id$ + + 2002/09/08 alane@geeksrus.net +*/ + +#ifdef HAVE_MNTENT_H +#include <mntent.h> +#else + +#ifndef mntent_h_ +#define mntent_h_ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/param.h> +#include <sys/ucred.h> +#include <sys/mount.h> + +#define MOUNTED "dummy" +#define MNTTYPE_NFS "nfs" + +const int MOPTSLEN (256 - (MNAMELEN * 2 + MFSNAMELEN + 2 * sizeof(int))); + +struct mntent { +public: + char mnt_fsname[ MNAMELEN ]; + char mnt_dir[ MNAMELEN ]; + char mnt_type[ MFSNAMELEN ]; + char mnt_opts[ MOPTSLEN ]; + int mnt_freq, mnt_passno; +private: + void clear(); +public: + mntent() { + clear(); + } + struct mntent *from_statfs(struct statfs *pst); +}; + +FILE *setmntent(const char *szfn, char *szrw); +struct mntent *getmntent(FILE *pf); +char *hasmntopt(const struct mntent *pmnt, const char *szopt); +int endmntent(FILE *pf); + +#endif /* mntent_h_ */ +#endif /* not HAVE_MNTENT_H */ diff --git a/devel/fam/files/mntent_compat.c++ b/devel/fam/files/mntent_compat.c++ new file mode 100644 index 000000000000..947a1ed950e7 --- /dev/null +++ b/devel/fam/files/mntent_compat.c++ @@ -0,0 +1,154 @@ +/* -*-C++-*- + + mntentemu.c++ + + Copyright (C) 2002 Alan Eldridge + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + $Id: mntent_compat.cc,v 1.3 2002/09/08 18:42:20 alane Exp $ + + 2002/09/08 alane@geeksrus.net +*/ + +#ifndef HAVE_MNTENT_H + +#include "config.h" +#include "mntent.h" + +#include <string> + +// globals (yuck, but easier for debugging) + +mntent G_mntent; +int G_mntpos; +int G_mntsize; +bool G_mntfOpen = false; +struct statfs *G_pmntstat = 0; + +// map option flags to names + +struct optmap { + int fl; + string st; +}; + +static struct optmap omap[] = { + { MNT_SYNCHRONOUS, "sync" }, + { MNT_NOEXEC, "noexec" }, + { MNT_NOSUID, "nosuid" }, + { MNT_NODEV, "nodev" }, + { MNT_UNION, "union" }, + { MNT_ASYNC, "async" }, + { MNT_NOATIME, "noatime" }, + { MNT_NOCLUSTERR, "noclusterr" }, + { MNT_NOCLUSTERW, "noclusterw" }, + { MNT_NOSYMFOLLOW, "nosymfollow" }, + { MNT_SUIDDIR, "suiddir" }, + { 0, "noop" } +}; + +// zap everything for clarity + +void +mntent::clear() +{ + memset(mnt_fsname, 0, sizeof(mnt_fsname)); + memset(mnt_dir, 0, sizeof(mnt_dir)); + memset(mnt_type, 0, sizeof(mnt_type)); + memset(mnt_opts, 0, sizeof(mnt_opts)); + mnt_freq = mnt_passno = 0; +} + +// fake it from a statfs struct + +mntent * +mntent::from_statfs(struct statfs *pst) +{ + + clear(); + strcpy(mnt_fsname, pst->f_mntfromname); + strcpy(mnt_dir, pst->f_mntonname); + strcpy(mnt_type, pst->f_fstypename); + mnt_freq = mnt_passno = 0; + + string opts; + int fl = pst->f_flags; + + opts += (fl & MNT_RDONLY) ? "ro" : "rw"; + for (optmap *pmp = omap; pmp->fl != 0; pmp++) { + if ((fl & pmp->fl) != 0) { + opts += (" " + pmp->st); + } + } + strcpy(mnt_opts, opts.c_str()); + + return this; +} + +// "rewind" the mtab file + +FILE * +setmntent(const char *, char *) +{ + if (!G_mntfOpen) { + G_mntfOpen = true; + } + + G_mntpos = 0; + G_mntsize = getmntinfo(&G_pmntstat, MNT_NOWAIT); + + return reinterpret_cast<FILE *>(1); +} + +// return ptr to opt string if present + +char * +hasmntopt(const mntent *pmnt, const char *szopt) +{ + string opt(szopt); + string mntopts(pmnt->mnt_opts); + + string::size_type pos = mntopts.find(opt); + const char *szret = (pos == string::npos) ? "" : pmnt->mnt_opts + pos; + + return const_cast<char *>(szret); +} + +// get next mntent until all gone, then return 0 + +struct mntent * +getmntent(FILE *) +{ + if (!G_mntfOpen) { + return 0; + } else if (G_mntpos < G_mntsize) { + return G_mntent.from_statfs(G_pmntstat + G_mntpos++); + } else { + G_mntfOpen = false; + return 0; + } +} + +// "close" the mtab file + +int +endmntent(FILE *) +{ + G_mntfOpen = false; + return 0; +} + +#endif /* ifndef HAVE_MNTENT_H */ |