Date: Fri, 30 Sep 2005 14:35:39 GMT From: soc-chenk <soc-chenk@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 84554 for review Message-ID: <200509301435.j8UEZdSg053892@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=84554 Change 84554 by soc-chenk@soc-chenk_leavemealone on 2005/09/30 14:34:56 update kernel api and userspace (rename pending) Submitted by: soc-chenk Affected files ... .. //depot/projects/soc2005/fuse4bsd2/Changelog#12 edit .. //depot/projects/soc2005/fuse4bsd2/IMPLEMENTATION_NOTES#8 edit .. //depot/projects/soc2005/fuse4bsd2/README.html#7 edit .. //depot/projects/soc2005/fuse4bsd2/fuse_module/Makefile-5.4#2 delete .. //depot/projects/soc2005/fuse4bsd2/fuse_module/fuse.c#10 edit .. //depot/projects/soc2005/fuse4bsd2/fuselib/fuselib-2.4.0-pre2.diff#3 edit Differences ... ==== //depot/projects/soc2005/fuse4bsd2/Changelog#12 (text+ko) ==== @@ -1,3 +1,13 @@ +Fri Sep 30 15:23:08 CEST 2005 at node: creo.hu, nick: csaba + * update kernel api and userspace + - userspace patch updated to 2.4.0-rc1 + - bug in FreeBSD's mknod of example filesystems fixed + - module adjusted to new clone event handler API + - README.html updated to reflect above changes and + more info on access control was added + - Info on access control in IMPLEMENTATION_NOTES made + more exact + Wed Sep 21 20:05:27 CEST 2005 at node: creo.hu, nick: csaba tagged 0.2.11 ==== //depot/projects/soc2005/fuse4bsd2/IMPLEMENTATION_NOTES#8 (text+ko) ==== @@ -200,35 +200,35 @@ denying access to the device for everyone else than root makes no problem. -However, in FreeBSD daemons or the mount utilily open fuse -devices directly, and no setuid dispatcher is present, so here it's a -valid question: who should be able to use fuse devices? +However, in FreeBSD daemons or the mount utilily open fuse devices +directly, and no setuid dispatcher is present, so here it is a valid +question: who should be able to use fuse devices? + +In FreeBSD, mount access is controlled by two mechanisms. One is the +above mentioned vfs.usermount sysctl. The other comes into play if +the filesystem is backed by a device. In that case, only those can mount +the filesystem who have read/write access to the device to be mounted +(or read access for a read only mount). + +Both of these regard to Fuse, too: despite its somewhat synthetic +charater, Fuse is a device backed filesystem. There is though one subtle +difference between Fuse and traditonal device (disk) backed filesystems +in this respect: with traditional filesystems, permissions of the device +are used also for providing access control for the device file as such, +which is a valid entity on its own and can be used for performing raw I/O +on the appropriate hardware. -In fact, mounting privileges (as discussed above) is the real beef -- -the device files themselves don't need special protection (I guess, in -Linux neither, the root-only access policy is established only on a -"it's better to show up as one who prefers to play on the safe side" -base). The kernel is not willing to interact with a reader/writer of the -file until the VFS layer pushes messages onto it, which doesn't happen -until the device file gets mounted. As it seems to be a bad idea to -introduce non-orthogonal access policies in parallell, we tend to be -liberal in respect of fuse devices. Yet we also have to make our -commitment to the "it's better to show up as one who prefers to play on -the safe side" idea. +On the contrary, fuse devices has no use without being mounted (the +kernel is not willing to interact with a reader/writer of the device +file until the VFS layer pushes messages onto it). Hence permission +settings of fuse devices are to be directly interpreted as permissions +for mounting Fuse filesystems. So this is the tool by which a +fine-grained control on mounting Fuse filesystems can be set up. -As a compromise, fuse devices are set to be readable/writable for -members of the operator group (the same group which is usually used for -controlling access to devices like sound cards ands optical drives). One -might argue that it's nonsense that mounting a Fuse filesystem is harder -than mounting a traditional, disk based file system, as the latter -requires only vfs.usermount == 1, while the former requires membership -in operator, too. Well, the conscious admin who takes the effort to set -vfs.usermount to 1, can as well take the effort to adjust devfs(8) rules -so that fuse devices become world usable -("devfs rule add path 'fuse*' mode 666"). Hey, conscious admins, -hear my word, I hereby claim thou shalt not fear to do so. And, -concerning paranoiac admins, these defaults save them from a heart -attack upon seeing world writable entries under /dev. +By default, fuse devices can be used by members of the operator group +(that's used for controlling access to, eg., usb devices). One can set +permissions of fuse devives directly, by chmod, or generally, via +devfs(8) rules. * 1c -- dealing with the "allow other" misery ==== //depot/projects/soc2005/fuse4bsd2/README.html#7 (text+ko) ==== @@ -32,7 +32,7 @@ The main part of Fuse for FreeBSD is a kernel module which provides a kernel messaging interface to the Fuse library in userspace which is compatible with that of the Linux module. The userspace part is pretty portable. A lightweight patch is enough to get that compile and work. </p> <p> -The module was written for and tested with CURRENT, aka FreeBSD-7.0. I'd guess it will work fine with RELENG 6 too, but currently it's not usable with 5.x (or lower) versions. +The module was written for and tested with CURRENT, aka FreeBSD-7.0. I'd guess it will work fine with RELENG 6 too, but currently it's not usable with 5.x (or lower) versions. The module will work with 7.0-CURRENT snapshots from not earlier than 8th of August and RELENG_6 snapshots from not earlier than 13th of August (desperate types can try with older CURRENT/RELENG_6 snapshots if they set the <tt>-DUSE_OLD_CLONEHANDLER_API</tt> flag for <tt>cc</tt>). </p> <p> What can be considered as a public homepage for the project is <a class="external" href="http://wikitest.freebsd.org/moin.cgi/FuseFilesystem"><img src="/classic/img/moin-www.png" alt="[WWW]" height="11" width="11">http://wikitest.freebsd.org/moin.cgi/FuseFilesystem</a>; for updates, further info go there. Get in contact with me via the <tt>soc-chenk</tt> email addrees of the FreeBSD organization (<tt>freebsd.org</tt>). @@ -50,18 +50,18 @@ <li> <p> - Fuse itself. Get Fuse 2.4.0-pre2 from their <a class="external" href="http://sourceforge.net/projects/fuse"><img src="/classic/img/moin-www.png" alt="[WWW]" height="11" width="11">Sourceforge project page</a>. + Fuse itself. Get Fuse 2.4.0-rc1 from their <a class="external" href="http://sourceforge.net/projects/fuse"><img src="/classic/img/moin-www.png" alt="[WWW]" height="11" width="11">Sourceforge project page</a>. If this is not availabe there (because a newer (pre)release has taken its place), you can either try to adopt these instructions to the newer (pre)release, or fetch it from my download directory, <a class="external" href="http://creo.hu/~csaba/projects/fuse4bsd/downloads/"><img src="/classic/img/moin-www.png" alt="[WWW]" height="11" width="11">http://creo.hu/~csaba/projects/fuse4bsd/downloads/</a>. </p> </li> <li> <p> - The FreeBSD module. Source tarballs are provided at <a class="external" href="http://creo.hu/~csaba/projects/fuse4bsd/downloads/"><img src="/classic/img/moin-www.png" alt="[WWW]" height="11" width="11">http://creo.hu/~csaba/projects/fuse4bsd/downloads/</a> under the name <tt>fuse4bsd-</tt><em><version></em><tt>.tar.*</tt> (latest release is <strong>0.2.11</strong>, date of release: <strong>21th Sep 2005</strong>). The current code is available via Darcs, you can fetch it by + The FreeBSD module. Source tarballs are provided at <a class="external" href="http://creo.hu/~csaba/projects/fuse4bsd/downloads/"><img src="/classic/img/moin-www.png" alt="[WWW]" height="11" width="11">http://creo.hu/~csaba/projects/fuse4bsd/downloads/</a> under the name <tt>fuse4bsd-</tt><em><version></em><tt>.tar.*</tt> (latest release is <strong>0.2.11</strong>, date of release: <strong>21th Sep 2005</strong>). The current code is available via <a class="external" href="http://www.freshports.org/devel/darcs"><img src="/classic/img/moin-www.png" alt="[WWW]" height="11" width="11">Darcs</a>, you can fetch it by <pre> darcs get http://creo.hu/~csaba/darcs-repos/fuse4bsd</pre> command, or via <a class="external" href="http://perforce.freebsd.org/depotTreeBrowser.cgi?FSPC=/depot/projects/soc2005/fuse4bsd2"><img src="/classic/img/moin-www.png" alt="[WWW]" height="11" width="11">Perforce</a> (you can use this latter link for online source code browsing). </p> </li> <li> <p> - Fuse sshfs. The latest release (1.2) will do, fetch the sshfs-fuse package also from the <a class="external" href="http://sourceforge.net/projects/fuse"><img src="/classic/img/moin-www.png" alt="[WWW]" height="11" width="11">Fuse SF project page</a>. + Fuse sshfs. The latest release (1.2 as of writing this) should do, fetch the sshfs-fuse package also from the <a class="external" href="http://sourceforge.net/projects/fuse"><img src="/classic/img/moin-www.png" alt="[WWW]" height="11" width="11">Fuse SF project page</a>. </p> </li> @@ -82,7 +82,7 @@ </li> <li> <p> - Type <tt>make</tt>. If you want normal quantity of debug output, use <tt>DEBUG2G=1</tt>, if you want tons of debug output, use <tt>DEBUG=1</tt>. + Type <tt>make</tt>. If you want normal quantity of debug output, use the make flag <tt>-DDEBUG2G</tt>, if you want tons of debug output, use <tt>-DDEBUG</tt>. </p> </li> @@ -98,7 +98,7 @@ <li> <p> Apply the patch with -<pre> patch -Np1 < ../fuse4bsd/fuselib/fuselib-2.4.0-pre2.diff</pre> +<pre> patch -Np1 < ../fuse4bsd/fuselib/fuselib-2.4.0-rc1.diff</pre> </p> </li> <li> @@ -110,13 +110,20 @@ </li> <li> <p> - We will do a non-privileged install (I'd say that's easier than set up a jail), I'll use <tt>~/meta/fuse-2.4.0-pre2</tt> as the prefix. Type the following commands: + We will do a non-privileged install (I'd say that's easier than set up a jail), I'll use <tt>~/meta/fuse-2.4.0-rc1</tt> as the prefix. Type the following commands: <pre> mkdir junk && - ./configure --prefix=$HOME/meta/fuse-2.4.0-pre2 --bindir=`pwd`/junk --disable-kernel-module MOUNT_FUSE_PATH=`pwd`/junk && - make && ln -s /usr/bin/true junk/chown && ln -s /usr/bin/true junk/mknod && - env PATH=`pwd`/junk:$PATH make install</pre> + echo '#!/bin/sh + echo "$1" | grep -q /etc/udev || /bin/mkdir "$@"' > junk/mkdir && + chmod a+x junk/mkdir && + echo '#!/bin/sh + echo "$@" | grep -q udev || /usr/bin/install "$@"' > junk/install && + chmod a+x junk/install && + (export PATH=`pwd`/junk:$PATH && + ./configure --prefix=$HOME/meta/fuse-2.4.0-rc1 --bindir=`pwd`/junk --disable-kernel-module MOUNT_FUSE_PATH=`pwd`/junk && + make && + make install)</pre> </p> </li> @@ -137,7 +144,7 @@ <li> <p> Type -<pre> env PKG_CONFIG_PATH=~/meta/fuse-2.4.0-pre2/lib/pkgconfig/ ./configure && make</pre> +<pre> env PKG_CONFIG_PATH=~/meta/fuse-2.4.0-rc1/lib/pkgconfig/ ./configure && make</pre> </p> </li> @@ -149,18 +156,27 @@ </p> <h4 id="head-601a98fa8a4a12123f319c97f1efaedb5013a642">Using the Fuse based ssh filesystem</h4> <p> -In the following, you'll need to act as superuser, or enable the <tt>vfs.usermount</tt> sysctl. +Here we will show how to setup Fuse so that non-privileged users can use it, too. +</p> +<p> +As the superuser, do +<pre>kldload use_module/fuse.ko +sysctl vfs.usermount=1</pre> +</p> +<p> +Now you'll have to act as a user belonging to the <tt>operator</tt> group or you can as well delete all barriers by +<pre>devfs rule add path 'fuse*' mode 666</pre>(opening and doing I/O on fuse devices will have no effect until they get mounted). </p> <p> -First, of course, load <tt>fuse_module/fuse.ko</tt> (for this you definitely need to be a superuser). +Proceed on with the user you chose (we will assume you use the same user as the one who did the installation). </p> <p> -Then pick your favourite ssh accessible account (though maybe you'd better stick to servers running OpenSSH -- I've seen commits in sshfs' CVS for better interoperability with other servers, which show there might occur problems with them), say, it's <tt>foo@bar.baz</tt>. +Pick your favourite ssh accessible account (though maybe you'd better stick to servers running OpenSSH -- I've seen commits in sshfs' CVS for better interoperability with other servers, which show there might occur problems with them), say, it's <tt>foo@bar.baz</tt>. </p> <p> Go to sshfs' directory. First prepare the mount: <pre>mkdir -p ~/fuse && -export LD_LIBRARY_PATH=~/meta/fuse-2.4.0-pre2/lib/</pre>and also make sure that <tt>mount_fusefs</tt> (of FreeBSD Fuse) is in your path. Then do: +export LD_LIBRARY_PATH=~/meta/fuse-2.4.0-rc1/lib/</pre>and also make sure that <tt>mount_fusefs</tt> (of FreeBSD Fuse) is in your path. Then do: <pre>mount_fusefs auto ~/fuse ./sshfs foo@bar.baz:</pre> </p> <p> @@ -174,6 +190,10 @@ <p> For more details, see the man page (<tt>mount_fusefs(8)</tt>). </p> +<h3 id="head-5f2cbd107037ed23248e5058a7a64cd6bae05468">Miscellaneous</h3> +<p> +You can get more info on Fuse based filesystems under FreeBSD at the Fuse wiki, <a class="external" href="http://fuse.sourceforge.net/wiki/index.php/FileSystemsOnFreeBSD"><img src="/classic/img/moin-www.png" alt="[WWW]" height="11" width="11">http://fuse.sourceforge.net/wiki/index.php/FileSystemsOnFreeBSD</a>. Feel encouraged to add your experiences. +</p> <h3 id="head-c8eea1b80ba437eb2c7d9d8e4a7a1c0c36ddce4e">Bugs</h3> <p> See the respective section of <tt>mount_fusefs(8)</tt>. @@ -184,11 +204,6 @@ <li> <p> - Backport to 5.x, if it can be done without a major rewrite -</p> -</li> - <li> -<p> Implement attr/name caching (with timeouts) </p> </li> ==== //depot/projects/soc2005/fuse4bsd2/fuse_module/fuse.c#10 (text+ko) ==== @@ -90,7 +90,11 @@ }; +#if USE_OLD_CLONEHANDLER_API static void fusedev_clone(void *arg, char *name, int namelen, struct cdev **dev); +#else +static void fusedev_clone(void *arg, struct ucred *cred, char *name, int namelen, struct cdev **dev); +#endif static void fuse_bringdown(eventhandler_tag eh_tag); static int fuse_loader(struct module *m, int what, void *arg); @@ -1521,11 +1525,7 @@ /* static vfs_vget_t fuse_vget; */ static int fuse_vget_i(struct mount *mp, struct thread *td, uint64_t nodeid, enum vtype vtyp, struct vnode **vpp); static __inline void fat2vat(struct mount *mp, struct fuse_attr *fat, struct vattr *vap); -#if __FreeBSD_version >= 600000 static vop_getattr_t fuse_getattr; -#else -static int fuse_getattr(struct vop_getattr_args *ap); -#endif static __inline int fuse_recyc_backend(struct vnode *vp, struct thread *td); static fuse_metrics_t release_filehandle; static void fuse_filehandle_gc(struct vnode *vp, struct thread *td, struct ucred *cred); @@ -1583,7 +1583,6 @@ .vfs_sync = vfs_stdsync, */ }; -#if __FreeBSD_version >= 600000 static struct vop_vector fuse_vnops = { .vop_default = &default_vnodeops, .vop_inactive = fuse_inactive, @@ -1610,15 +1609,6 @@ .vop_bmap = fuse_bmap, .vop_print = fuse_print, }; -#else -vop_t **fuse_vnodeop_p; -static struct vnodeopv_entry_desc fuse_vnops[] = { - { &vop_getattr_desc, (vop_t *)fuse_getattr }, -}; -static struct vnodeopv_desc fuse_vnodeop_opv_desc = - { &fuse_vnodeop_p, fuse_vnops }; -VNODEOP_SET(fuse_vnodeop_opv_desc); -#endif static struct fileops fuse_fileops; @@ -1857,11 +1847,7 @@ MALLOC(fvdat, struct fuse_vnode_data *, sizeof(*fvdat), M_FUSEFS, M_WAITOK | M_ZERO); -#if __FreeBSD_version >= 600000 err = getnewvnode("fuse", mp, &fuse_vnops, &rvp); -#else - err = getnewvnode("fuse", mp, fuse_vnodeop_p, &rvp); -#endif if (err) { fdata_kick_set(data); @@ -2034,12 +2020,7 @@ /* stolen from portalfs */ static int -fuse_root(struct mount *mp, -#if __FreeBSD_version >= 600000 - int flags, -#endif - struct vnode **vpp, - struct thread *td) +fuse_root(struct mount *mp, int flags, struct vnode **vpp, struct thread *td) { /* * Return locked reference to root. @@ -2162,11 +2143,7 @@ MALLOC(fvdat, struct fuse_vnode_data *, sizeof(*fvdat), M_FUSEFS, M_WAITOK | M_ZERO); -#if __FreeBSD_version >= 600000 err = getnewvnode("fuse", mp, &fuse_vnops, vpp); -#else - err = getnewvnode("fuse", mp, fuse_vnodeop_p, vpp); -#endif #if _DEBUG DEBUG2G("allocated new vnode:\n"); vn_printf(*vpp, " * "); @@ -5154,8 +5131,14 @@ /* Modeled after tunclone() of net/if_tun.c */ +#if USE_OLD_CLONEHANDLER_API static void fusedev_clone(void *arg, char *name, int namelen, struct cdev **dev) +#else +static void +fusedev_clone(void *arg, struct ucred *cred, char *name, int namelen, + struct cdev **dev) +#endif { /* * Why cloning? We do need per-open info, but we could as well put our ==== //depot/projects/soc2005/fuse4bsd2/fuselib/fuselib-2.4.0-pre2.diff#3 (text+ko) ==== @@ -1,6 +1,6 @@ diff -Naur linuxfuse/example/fusexmp.c bsdfuse/example/fusexmp.c ---- linuxfuse/example/fusexmp.c Thu Apr 7 17:35:10 2005 -+++ bsdfuse/example/fusexmp.c Tue Sep 13 16:47:54 2005 +--- linuxfuse/example/fusexmp.c Tue Sep 13 21:26:12 2005 ++++ bsdfuse/example/fusexmp.c Fri Sep 30 11:34:16 2005 @@ -20,7 +20,12 @@ #include <fcntl.h> #include <dirent.h> @@ -14,24 +14,27 @@ #ifdef HAVE_SETXATTR #include <sys/xattr.h> #endif -@@ -79,7 +84,13 @@ +@@ -79,7 +84,17 @@ { int res; -- res = mknod(path, mode, rdev); ++#ifndef __FreeBSD__ + res = mknod(path, mode, rdev); ++#else + if (rdev) + res = mknod(path, mode, rdev); + else if (mode & S_IFIFO) + res = mkfifo(path, mode); + else -+ creat(path, mode); ++ res = open(path, O_CREAT | O_TRUNC | O_WRONLY, mode); ++#endif + if(res == -1) return -errno; diff -Naur linuxfuse/example/fusexmp_fh.c bsdfuse/example/fusexmp_fh.c ---- linuxfuse/example/fusexmp_fh.c Thu Sep 8 17:16:48 2005 -+++ bsdfuse/example/fusexmp_fh.c Tue Sep 13 16:47:55 2005 +--- linuxfuse/example/fusexmp_fh.c Tue Sep 13 21:26:12 2005 ++++ bsdfuse/example/fusexmp_fh.c Fri Sep 30 11:34:00 2005 @@ -17,7 +17,12 @@ #include <fcntl.h> #include <dirent.h> @@ -57,22 +60,25 @@ break; } -@@ -87,7 +96,13 @@ +@@ -87,7 +96,17 @@ { int res; -- res = mknod(path, mode, rdev); ++#ifndef __FreeBSD__ + res = mknod(path, mode, rdev); ++#else + if (rdev) + res = mknod(path, mode, rdev); + else if (mode & S_IFIFO) + res = mkfifo(path, mode); + else -+ creat(path, mode); ++ res = open(path, O_CREAT | O_TRUNC | O_WRONLY, mode); ++#endif + if(res == -1) return -errno; -@@ -268,9 +283,11 @@ +@@ -268,9 +287,11 @@ int res; (void) path; @@ -86,7 +92,7 @@ return -errno; diff -Naur linuxfuse/include/fuse.h bsdfuse/include/fuse.h --- linuxfuse/include/fuse.h Thu Sep 8 17:16:48 2005 -+++ bsdfuse/include/fuse.h Tue Sep 13 16:47:55 2005 ++++ bsdfuse/include/fuse.h Fri Sep 30 11:29:31 2005 @@ -20,7 +20,12 @@ #include <sys/types.h> @@ -101,8 +107,8 @@ #ifdef __cplusplus diff -Naur linuxfuse/include/fuse_lowlevel.h bsdfuse/include/fuse_lowlevel.h ---- linuxfuse/include/fuse_lowlevel.h Thu Sep 8 17:16:48 2005 -+++ bsdfuse/include/fuse_lowlevel.h Tue Sep 13 16:47:55 2005 +--- linuxfuse/include/fuse_lowlevel.h Thu Sep 15 13:26:16 2005 ++++ bsdfuse/include/fuse_lowlevel.h Fri Sep 30 11:29:31 2005 @@ -18,7 +18,12 @@ #include <utime.h> #include <sys/types.h> @@ -118,7 +124,7 @@ #ifdef __cplusplus diff -Naur linuxfuse/lib/fuse.c bsdfuse/lib/fuse.c --- linuxfuse/lib/fuse.c Thu Sep 8 17:16:49 2005 -+++ bsdfuse/lib/fuse.c Sat Sep 17 22:36:48 2005 ++++ bsdfuse/lib/fuse.c Fri Sep 30 11:29:31 2005 @@ -1414,7 +1414,12 @@ static int default_statfs(struct statfs *buf) @@ -174,7 +180,7 @@ diff -Naur linuxfuse/lib/fuse_lowlevel.c bsdfuse/lib/fuse_lowlevel.c --- linuxfuse/lib/fuse_lowlevel.c Thu Sep 8 17:16:49 2005 -+++ bsdfuse/lib/fuse_lowlevel.c Tue Sep 13 16:47:55 2005 ++++ bsdfuse/lib/fuse_lowlevel.c Fri Sep 30 11:29:31 2005 @@ -194,7 +194,11 @@ kstatfs->bavail = stbuf->f_bavail; kstatfs->files = stbuf->f_files; @@ -201,7 +207,7 @@ in->opcode != FUSE_WRITE && in->opcode != FUSE_FSYNC && diff -Naur linuxfuse/lib/helper.c bsdfuse/lib/helper.c --- linuxfuse/lib/helper.c Mon Aug 15 16:03:59 2005 -+++ bsdfuse/lib/helper.c Sat Sep 17 22:44:02 2005 ++++ bsdfuse/lib/helper.c Fri Sep 30 11:29:31 2005 @@ -22,7 +22,11 @@ { if (progname) @@ -265,7 +271,7 @@ diff -Naur linuxfuse/lib/mount.c bsdfuse/lib/mount.c --- linuxfuse/lib/mount.c Wed Aug 3 12:22:32 2005 -+++ bsdfuse/lib/mount.c Sat Sep 17 22:44:57 2005 ++++ bsdfuse/lib/mount.c Fri Sep 30 11:29:31 2005 @@ -21,7 +21,7 @@ #define FUSERMOUNT_PROG "fusermount" #define FUSE_COMMFD_ENV "_FUSE_COMMFD" @@ -383,14 +389,14 @@ int fuse_mount_compat1(const char *mountpoint, const char *args[]) diff -Naur linuxfuse/util/fusermount.c bsdfuse/util/fusermount.c ---- linuxfuse/util/fusermount.c Fri Aug 5 12:24:55 2005 -+++ bsdfuse/util/fusermount.c Tue Sep 13 16:47:55 2005 +--- linuxfuse/util/fusermount.c Mon Sep 26 13:18:07 2005 ++++ bsdfuse/util/fusermount.c Fri Sep 30 11:29:31 2005 @@ -1,3 +1,4 @@ +#ifndef __FreeBSD__ /* FUSE: Filesystem in Userspace Copyright (C) 2001-2005 Miklos Szeredi <miklos@szeredi.hu> -@@ -1125,3 +1126,12 @@ +@@ -1108,3 +1109,12 @@ return 0; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200509301435.j8UEZdSg053892>