aboutsummaryrefslogtreecommitdiff
path: root/devel/fam
diff options
context:
space:
mode:
authorAlan Eldridge <alane@FreeBSD.org>2002-09-10 09:49:31 +0000
committerAlan Eldridge <alane@FreeBSD.org>2002-09-10 09:49:31 +0000
commit7acc766abb2cb10378f2d087473071db76d2d4da (patch)
treef45df54e36ed927dc0d5aa9045d89c7beff36b06 /devel/fam
parent9e2fa484f6367e7cc4144a8803ea885137ab3bd0 (diff)
downloadports-7acc766abb2cb10378f2d087473071db76d2d4da.tar.gz
ports-7acc766abb2cb10378f2d087473071db76d2d4da.zip
Notes
Diffstat (limited to 'devel/fam')
-rw-r--r--devel/fam/Makefile13
-rw-r--r--devel/fam/files/mntent.h67
-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 */