summaryrefslogtreecommitdiff
path: root/package/fuse
diff options
context:
space:
mode:
authorTravis Kemen <thepeople@openwrt.org>2010-03-14 02:01:14 +0000
committerTravis Kemen <thepeople@openwrt.org>2010-03-14 02:01:14 +0000
commit63e08907773ca9b76c57ea51bae64049bdcea246 (patch)
tree95219314d4a0f2bc061b0c83040769da7c6dbcd4 /package/fuse
parent2e058c302175b1760771b2dd5f6f75a470cebfd8 (diff)
downloadmtk-20170518-63e08907773ca9b76c57ea51bae64049bdcea246.zip
mtk-20170518-63e08907773ca9b76c57ea51bae64049bdcea246.tar.gz
mtk-20170518-63e08907773ca9b76c57ea51bae64049bdcea246.tar.bz2
find attached the announced patch for fuse. changes: - latest fuse 2.8.3 - includes now the kernel module for kernel 2.4 - builds parallel - fuse-utils includes now ulockmgr_server
fuse24 should be deleted from trunk. bud SVN-Revision: 20190
Diffstat (limited to 'package/fuse')
-rw-r--r--package/fuse/Makefile176
-rw-r--r--package/fuse/patches-kernel24/101-kmod_build.patch45
-rw-r--r--package/fuse/patches-kernel24/102-no_depmod.patch14
-rw-r--r--package/fuse/patches-kernel24/112-no_break_on_mknod.patch11
-rw-r--r--package/fuse/patches-kernel24/113-DCACHE_BUG.patch73
-rw-r--r--package/fuse/patches/100-cross_compile.patch14
-rw-r--r--package/fuse/patches/102-no_depmod.patch15
-rw-r--r--package/fuse/patches/112-no_break_on_mknod.patch7
-rw-r--r--package/fuse/patches/200-disable_compat.patch613
-rw-r--r--package/fuse/patches/300-workaround-uclibc-pthread-breakage.patch7
10 files changed, 281 insertions, 694 deletions
diff --git a/package/fuse/Makefile b/package/fuse/Makefile
index 152c540..17c5269 100644
--- a/package/fuse/Makefile
+++ b/package/fuse/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (C) 2006-2009 OpenWrt.org
+# Copyright (C) 2006-2010 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
@@ -9,12 +9,22 @@ include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=fuse
-PKG_VERSION:=2.7.4
-PKG_RELEASE:=2
+PKG_VERSION:=2.8.3
+PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/$(PKG_NAME)
-PKG_MD5SUM:=4879f06570d2225667534c37fea04213
+PKG_MD5SUM:=517c8384f915e40647bda9f71579fd97
+
+PKG_INSTALL:=1
+
+# Kernel 2.4 Module
+FUSE24_VERSION=2.5.3
+FUSE24_SOURCE:=$(PKG_NAME)-$(FUSE24_VERSION).tar.gz
+FUSE24_MD5SUM:=9c7e8b6606b9f158ae20b8521ba2867c
+FUSE24_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(FUSE24_VERSION)
+FUSE24_INSTALL_DIR:=$(FUSE24_BUILD_DIR)/ipkg-install
+FUSE24_PATCH_DIR:=./patches-kernel24
include $(INCLUDE_DIR)/package.mk
@@ -38,18 +48,24 @@ endef
define Package/fuse-utils/description
$(call Package/fuse/Default/description)
- This package contains the FUSE utility 'fusermount'.
+ This package contains the FUSE utilities.
+ - fusermount
+ - ulockmgr_server
endef
define KernelPackage/fuse
-$(call Package/fuse/Default)
- SUBMENU:=Filesystems
- DEPENDS:=@LINUX_2_6
- TITLE+= (kernel module)
- KCONFIG:= CONFIG_FUSE_FS
- FILES:=$(LINUX_DIR)/fs/fuse/fuse.$(LINUX_KMOD_SUFFIX)
- AUTOLOAD:=$(call AutoLoad,80,fuse)
- VERSION:=$(LINUX_VERSION)
+ $(call Package/fuse/Default)
+ SUBMENU:=Filesystems
+ TITLE+= (kernel module)
+ ifeq ($(KERNEL),2.4)
+ FILES:=$(FUSE24_INSTALL_DIR)/lib/modules/$(LINUX_VERSION)/kernel/fs/fuse/fuse.$(LINUX_KMOD_SUFFIX)
+ VERSION:=$(LINUX_VERSION)+$(FUSE24_VERSION)-$(PKG_RELEASE)
+ else
+ KCONFIG:= CONFIG_FUSE_FS
+ FILES:=$(LINUX_DIR)/fs/fuse/fuse.$(LINUX_KMOD_SUFFIX)
+ VERSION:=$(LINUX_VERSION)-$(LINUX_RELEASE)
+ endif
+ AUTOLOAD:=$(call AutoLoad,80,fuse)
endef
define KernelPackage/fuse/description
@@ -62,76 +78,144 @@ $(call Package/fuse/Default)
SECTION:=libs
CATEGORY:=Libraries
TITLE+= (library)
- DEPENDS:=+LINUX_2_4:kmod-fuse24 +LINUX_2_6:kmod-fuse
+ DEPENDS:=kmod-fuse
SUBMENU:=Filesystem
endef
define Package/libfuse/description
$(call Package/fuse/Default/description)
- This package contains the FUSE shared library, needed by other programs.
+ This package contains the FUSE shared libraries, needed by other programs.
+ - libfuse
+ - libulockmgr
endef
-CONFIGURE_VARS += \
- kernsrcver="$(LINUX_VERSION)"
-
+# generic args
CONFIGURE_ARGS += \
--enable-shared \
--enable-static \
--disable-rpath \
- --enable-lib \
- --enable-util \
--disable-example \
- --disable-auto-modprobe \
- --with-kernel="$(LINUX_DIR)" \
--disable-mtab
-# Since kernel 2.6.14 the fuse module is officially part of the kernel.
-# Generally it is better to use the kernel's module. Because it is patched
-# against the DCACHE BUG on arm architectures (currently brcm-2.4, brcm-47xx)
-# and from fuse 2.8.0 on it will be removed from the fuse package anyway.
-#
-CONFIGURE_ARGS += --disable-kernel-module
+# kmod 2.4 args
+FUSE24_CONFIGURE_ARGS := $(CONFIGURE_ARGS) \
+ --disable-lib --disable-util \
+ --enable-kernel-module --disable-auto-modprobe \
+ --with-kernel="$(LINUX_DIR)"
+
+# generic package uses lib & utils
+CONFIGURE_ARGS += --enable-lib --enable-util
+
+####### FUSE24 - START ######
+### if we're on kernel 2.4 build a kernel 2.4 compatible fuse module from older version, see also
+### http://sourceforge.net/apps/mediawiki/fuse/index.php?title=FAQ#What_version_of_FUSE_do_I_need_to_use_FUSE_with_Linux_2.4.3F
+ifeq ($(KERNEL),2.4)
+
+define Download/fuse24
+ FILE:=$(FUSE24_SOURCE)
+ URL:=$(PKG_SOURCE_URL)
+ MD5SUM:=$(FUSE24_MD5SUM)
+endef
+$(eval $(call Download,fuse24))
+
+define Build/Prepare/fuse24
+ rm -rf $(FUSE24_BUILD_DIR)/
+ mkdir -p $(FUSE24_BUILD_DIR)/
+ $(TAR) -xzf $(DL_DIR)/$(FUSE24_SOURCE) -C $(FUSE24_BUILD_DIR)/..
+endef
+
+define Build/Patch/fuse24
+ $(call PatchDir,$(FUSE24_BUILD_DIR),$(FUSE24_PATCH_DIR),)
+endef
+
+define Build/Configure/fuse24
+ (cd $(FUSE24_BUILD_DIR); \
+ rm -rf config.{cache,status} ; \
+ $(CONFIGURE_VARS) \
+ ./configure \
+ $(FUSE24_CONFIGURE_ARGS) \
+ );
+endef
+
+define Build/Compile/fuse24
+ $(MAKE) -C $(FUSE24_BUILD_DIR)/$(MAKE_PATH) \
+ ARCH="$(LINUX_KARCH)" \
+ CROSS_COMPILE="$(TARGET_CROSS)" \
+ all;
+endef
+
+define Build/Install/fuse24
+ rm -rf $(FUSE24_INSTALL_DIR)
+ mkdir -p $(FUSE24_INSTALL_DIR)
+ $(MAKE) -C $(FUSE24_BUILD_DIR) \
+ ARCH="$(LINUX_KARCH)" \
+ CROSS_COMPILE="$(TARGET_CROSS)" \
+ DESTDIR="$(FUSE24_INSTALL_DIR)" \
+ install
+endef
+
+define Build/Prepare
+ @echo "--> Build/Prepare enter"
+ $(call Build/Prepare/fuse24)
+ $(call Build/Patch/fuse24)
+ $(call Build/Prepare/Default)
+ @echo "--> Build/Prepare leave"
+endef
define Build/Configure
- (cd $(PKG_BUILD_DIR); rm -f config.cache; \
- touch configure.in ; \
- touch aclocal.m4 ; \
- touch Makefile.in ; \
- touch include/config.h.in ; \
- touch configure ; \
- )
+ @echo "--> Build/Configure enter"
+ $(call Build/Configure/fuse24)
$(call Build/Configure/Default)
+ @echo "--> Build/Configure leave"
endef
define Build/Compile
- $(MAKE) -C $(PKG_BUILD_DIR) \
- ARCH="$(LINUX_KARCH)" \
- CROSS_COMPILE="$(TARGET_CROSS)" \
- DESTDIR="$(PKG_INSTALL_DIR)" \
- AM_CFLAGS="$(TARGET_CFLAGS) -DDISABLE_COMPAT=1" \
- EXTRA_DIST="" \
- all install
+ @echo "--> Build/Compile enter"
+ $(call Build/Compile/fuse24)
+ $(call Build/Compile/Default)
+ @echo "--> Build/Compile leave"
+endef
+
+define Build/Install
+ @echo "--> Build/Install enter"
+ $(call Build/Install/fuse24)
+ $(call Build/Install/Default)
+ @echo "--> Build/Install leave"
endef
+endif
+####### FUSE24 - END ######
+
define Build/InstallDev
+ @echo "--> Build/InstallDev enter"
mkdir -p $(1)/usr/include
- $(CP) $(PKG_INSTALL_DIR)/usr/include/fuse{,.h} $(1)/usr/include/
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/{fuse,*.h} $(1)/usr/include/
mkdir -p $(1)/usr/lib
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/libfuse.{a,so*} $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.{a,so*} $(1)/usr/lib/
mkdir -p $(1)/usr/lib/pkgconfig
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/fuse.pc $(1)/usr/lib/pkgconfig/
$(SED) 's,-I$$$${includedir}/fuse,,g' $(1)/usr/lib/pkgconfig/fuse.pc
$(SED) 's,-L$$$${libdir},,g' $(1)/usr/lib/pkgconfig/fuse.pc
+ @echo "--> Build/InstallDev leave"
endef
define Package/fuse-utils/install
+ @echo "--> Package/fuse-utils/install enter"
$(INSTALL_DIR) $(1)/usr/bin
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/fusermount $(1)/usr/bin/
+ # use cp and keep fusermount sticky bit
+ $(FIND) $(PKG_INSTALL_DIR)/usr/bin/ -type f -exec $(CP) -a {} $(1)/usr/bin/ \;
+ @echo "--> Package/fuse-utils/install leave"
endef
define Package/libfuse/install
+ @echo "--> Package/libfuse/install enter"
$(INSTALL_DIR) $(1)/usr/lib
- $(CP) $(PKG_INSTALL_DIR)/usr/lib/libfuse.so.* $(1)/usr/lib/
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so.* $(1)/usr/lib/
+ @echo "--> Package/libfuse/install leave"
+endef
+
+define Package/kmod-fuse/install
+ @echo "--> Package/kmod-fuse/install enter/leave"
endef
$(eval $(call BuildPackage,fuse-utils))
diff --git a/package/fuse/patches-kernel24/101-kmod_build.patch b/package/fuse/patches-kernel24/101-kmod_build.patch
new file mode 100644
index 0000000..08cf0a8
--- /dev/null
+++ b/package/fuse/patches-kernel24/101-kmod_build.patch
@@ -0,0 +1,45 @@
+--- a/kernel/Makefile.in
++++ b/kernel/Makefile.in
+@@ -54,23 +54,8 @@ distdir: $(DISTFILES) $(COMPATDISTFILES)
+
+ ifeq ($(majver), 2.4)
+
+-CC = gcc
+-LD = ld
+-CFLAGS = -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -pipe @KERNELCFLAGS@
+-CPPFLAGS = -I@kernelsrc@/include -I. -D__KERNEL__ -DMODULE -D_LOOSE_KERNEL_NAMES -DFUSE_VERSION=\"$(VERSION)\" @KERNELCPPFLAGS@
+-
+ fuse_objs = dev.o dir.o file.o inode.o compat/parser.o
+
+-SUFFIXES = .c .o .s
+-
+-all-spec: fuse.o
+-
+-.c.o:
+- $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
+-
+-fuse.o: $(fuse_objs)
+- $(LD) -r -o fuse.o $(fuse_objs)
+-
+ fuse_headers = fuse_i.h fuse_kernel.h
+
+ dev.o: $(fuse_headers)
+@@ -78,6 +63,18 @@ dir.o: $(fuse_headers)
+ file.o: $(fuse_headers)
+ inode.o: $(fuse_headers)
+
++EXTRA_CFLAGS += -DFUSE_VERSION=\"$(VERSION)\"
++
++O_TARGET := fuse.o
++
++obj-y := $(fuse_objs)
++obj-m := $(O_TARGET)
++
++-include $(TOPDIR)/Rules.make
++
++all-spec:
++ $(MAKE) -C @kernelsrc@ TOPDIR=@kernelsrc@ SUBDIRS=$(PWD) modules
++
+ else
+
+ EXTRA_CFLAGS += -DFUSE_VERSION=\"$(VERSION)\"
diff --git a/package/fuse/patches-kernel24/102-no_depmod.patch b/package/fuse/patches-kernel24/102-no_depmod.patch
new file mode 100644
index 0000000..e0a1449
--- /dev/null
+++ b/package/fuse/patches-kernel24/102-no_depmod.patch
@@ -0,0 +1,14 @@
+--- a/kernel/Makefile.in
++++ b/kernel/Makefile.in
+@@ -31,11 +31,9 @@ all-y: all-spec
+ install-y: all
+ $(mkdir_p) $(DESTDIR)$(fusemoduledir)
+ $(INSTALL) -m 644 $(fusemodule) $(DESTDIR)$(fusemoduledir)/$(fusemodule)
+- -/sbin/depmod -a
+
+ uninstall-y:
+ rm -f $(DESTDIR)$(fusemoduledir)/$(fusemodule)
+- -/sbin/depmod -a
+
+ clean:
+ -rm -f $(fusemodule) *.o .*.cmd *.mod.c *.ko *.s */*.o
diff --git a/package/fuse/patches-kernel24/112-no_break_on_mknod.patch b/package/fuse/patches-kernel24/112-no_break_on_mknod.patch
new file mode 100644
index 0000000..1c1e466
--- /dev/null
+++ b/package/fuse/patches-kernel24/112-no_break_on_mknod.patch
@@ -0,0 +1,11 @@
+--- a/util/Makefile.in
++++ b/util/Makefile.in
+@@ -453,7 +453,7 @@ uninstall-am: uninstall-binPROGRAMS unin
+ install-exec-hook:
+ -chown root $(DESTDIR)$(bindir)/fusermount
+ -chmod u+s $(DESTDIR)$(bindir)/fusermount
+- @if test ! -e $(DESTDIR)/dev/fuse; then \
++ -@if test ! -e $(DESTDIR)/dev/fuse; then \
+ $(mkdir_p) $(DESTDIR)/dev; \
+ echo "mknod $(DESTDIR)/dev/fuse -m 0666 c 10 229"; \
+ mknod $(DESTDIR)/dev/fuse -m 0666 c 10 229; \
diff --git a/package/fuse/patches-kernel24/113-DCACHE_BUG.patch b/package/fuse/patches-kernel24/113-DCACHE_BUG.patch
new file mode 100644
index 0000000..da0d27c
--- /dev/null
+++ b/package/fuse/patches-kernel24/113-DCACHE_BUG.patch
@@ -0,0 +1,73 @@
+--- a/kernel/dev.c
++++ b/kernel/dev.c
+@@ -512,6 +512,9 @@ static int fuse_copy_fill(struct fuse_co
+ {
+ unsigned long offset;
+ int err;
++#ifdef DCACHE_BUG
++ struct vm_area_struct *vma;
++#endif
+
+ unlock_request(cs->req);
+ fuse_copy_finish(cs);
+@@ -523,14 +526,22 @@ static int fuse_copy_fill(struct fuse_co
+ cs->nr_segs --;
+ }
+ down_read(&current->mm->mmap_sem);
++#ifndef DCACHE_BUG
+ err = get_user_pages(current, current->mm, cs->addr, 1, cs->write, 0,
+ &cs->pg, NULL);
++#else
++ err = get_user_pages(current, current->mm, cs->addr, 1, cs->write, 0,
++ &cs->pg, &vma);
++#endif
+ up_read(&current->mm->mmap_sem);
+ if (err < 0)
+ return err;
+ BUG_ON(err != 1);
+ offset = cs->addr % PAGE_SIZE;
+ cs->mapaddr = kmap_atomic(cs->pg, KM_USER0);
++#ifdef DCACHE_BUG
++ r4k_flush_cache_page(vma, cs->addr);
++#endif
+ cs->buf = cs->mapaddr + offset;
+ cs->len = min(PAGE_SIZE - offset, cs->seglen);
+ cs->seglen -= cs->len;
+@@ -545,6 +556,11 @@ static inline int fuse_copy_do(struct fu
+ {
+ unsigned ncpy = min(*size, cs->len);
+ if (val) {
++#ifdef DCACHE_BUG
++ // patch from mailing list, it is very important, otherwise,
++ // can't mount, or ls mount point will hang
++ flush_cache_all();
++#endif
+ if (cs->write)
+ memcpy(cs->buf, *val, ncpy);
+ else
+--- a/kernel/fuse_i.h
++++ b/kernel/fuse_i.h
+@@ -45,6 +45,10 @@
+ # endif
+ #endif
+
++//#if defined(__arm__) && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
++#define DCACHE_BUG
++//#endif
++
+ #include "config.h"
+ #ifndef KERNEL_2_6
+ # include <linux/config.h>
+--- a/kernel/inode.c
++++ b/kernel/inode.c
+@@ -739,6 +739,10 @@ static int __init fuse_init(void)
+ printk("fuse distribution version: %s\n", FUSE_VERSION);
+ #endif
+
++#ifdef DCACHE_BUG
++printk("fuse init: DCACHE_BUG enabled\n");
++#endif
++
+ spin_lock_init(&fuse_lock);
+ res = fuse_fs_init();
+ if (res)
diff --git a/package/fuse/patches/100-cross_compile.patch b/package/fuse/patches/100-cross_compile.patch
index 54a4d59..e69de29 100644
--- a/package/fuse/patches/100-cross_compile.patch
+++ b/package/fuse/patches/100-cross_compile.patch
@@ -1,14 +0,0 @@
-diff -Nru fuse-2.7.3.orig/kernel/configure fuse-2.7.3/kernel/configure
---- fuse-2.7.3.orig/kernel/configure 2008-02-19 15:00:19.000000000 -0500
-+++ fuse-2.7.3/kernel/configure 2008-03-17 14:10:14.000000000 -0400
-@@ -1851,7 +1851,9 @@
-
- { echo "$as_me:$LINENO: checking kernel source version" >&5
- echo $ECHO_N "checking kernel source version... $ECHO_C" >&6; }
-- if test -r $kernelbuild/include/linux/version.h && fgrep -q UTS_RELEASE $kernelbuild/include/linux/version.h; then
-+ if [ -n "$kernsrcver" ]; then
-+ echo "$kernsrcver (cached)"
-+ elif test -r $kernelbuild/include/linux/version.h && fgrep -q UTS_RELEASE $kernelbuild/include/linux/version.h; then
- kernsrcver=`(echo "#include <linux/version.h>"; echo "kernsrcver=UTS_RELEASE") | cpp -I $kernelbuild/include | grep "^kernsrcver=" | cut -d \" -f 2`
- elif test -r $kernelbuild/include/linux/utsrelease.h && fgrep -q UTS_RELEASE $kernelbuild/include/linux/utsrelease.h; then
- kernsrcver=`(echo "#include <linux/utsrelease.h>"; echo "kernsrcver=UTS_RELEASE") | cpp -I $kernelbuild/include | grep "^kernsrcver=" | cut -d \" -f 2`
diff --git a/package/fuse/patches/102-no_depmod.patch b/package/fuse/patches/102-no_depmod.patch
index ee86942..e69de29 100644
--- a/package/fuse/patches/102-no_depmod.patch
+++ b/package/fuse/patches/102-no_depmod.patch
@@ -1,15 +0,0 @@
-diff -Nru fuse-2.7.3.orig/kernel/Makefile.in fuse-2.7.3/kernel/Makefile.in
---- fuse-2.7.3.orig/kernel/Makefile.in 2006-12-09 13:51:13.000000000 -0500
-+++ fuse-2.7.3/kernel/Makefile.in 2008-03-17 14:12:32.000000000 -0400
-@@ -25,11 +25,9 @@
- install-y: all
- $(mkdir_p) $(DESTDIR)$(fusemoduledir)
- $(INSTALL) -m 644 $(fusemodule) $(DESTDIR)$(fusemoduledir)/$(fusemodule)
-- -/sbin/depmod -a
-
- uninstall-y:
- rm -f $(DESTDIR)$(fusemoduledir)/$(fusemodule)
-- -/sbin/depmod -a
-
- clean:
- -rm -f $(fusemodule) *.o .*.cmd *.mod.c *.ko *.s */*.o
diff --git a/package/fuse/patches/112-no_break_on_mknod.patch b/package/fuse/patches/112-no_break_on_mknod.patch
index 911d25c..a992d8c 100644
--- a/package/fuse/patches/112-no_break_on_mknod.patch
+++ b/package/fuse/patches/112-no_break_on_mknod.patch
@@ -1,6 +1,7 @@
---- fuse-2.7.3.orig/util/Makefile.in 2008-02-19 15:00:55.000000000 -0500
-+++ fuse-2.7.3/util/Makefile.in 2008-03-17 14:14:10.000000000 -0400
-@@ -528,7 +528,7 @@
+diff -Nurp fuse-2.8.1.orig/util/Makefile.in fuse-2.8.1/util/Makefile.in
+--- fuse-2.8.1.orig/util/Makefile.in 2009-09-11 12:50:00.000000000 +0200
++++ fuse-2.8.1/util/Makefile.in 2009-12-17 01:05:15.720554385 +0100
+@@ -543,7 +543,7 @@ uninstall-am: uninstall-binPROGRAMS unin
install-exec-hook:
-chown root $(DESTDIR)$(bindir)/fusermount
-chmod u+s $(DESTDIR)$(bindir)/fusermount
diff --git a/package/fuse/patches/200-disable_compat.patch b/package/fuse/patches/200-disable_compat.patch
index 12203d3..e69de29 100644
--- a/package/fuse/patches/200-disable_compat.patch
+++ b/package/fuse/patches/200-disable_compat.patch
@@ -1,613 +0,0 @@
-diff -Nru fuse-2.7.3.orig/include/fuse_common_compat.h fuse-2.7.3/include/fuse_common_compat.h
---- fuse-2.7.3.orig/include/fuse_common_compat.h 2008-02-19 14:51:23.000000000 -0500
-+++ fuse-2.7.3/include/fuse_common_compat.h 2008-03-17 14:55:01.000000000 -0400
-@@ -17,6 +17,7 @@
- unsigned int keep_cache : 1;
- };
-
-+#ifndef DISABLE_COMPAT
- int fuse_mount_compat25(const char *mountpoint, struct fuse_args *args);
-
- int fuse_mount_compat22(const char *mountpoint, const char *opts);
-@@ -24,3 +25,4 @@
- int fuse_mount_compat1(const char *mountpoint, const char *args[]);
-
- void fuse_unmount_compat22(const char *mountpoint);
-+#endif
-diff -Nru fuse-2.7.3.orig/lib/fuse.c fuse-2.7.3/lib/fuse.c
---- fuse-2.7.3.orig/lib/fuse.c 2008-02-19 14:51:25.000000000 -0500
-+++ fuse-2.7.3/lib/fuse.c 2008-03-17 15:04:54.000000000 -0400
-@@ -14,8 +14,6 @@
- #include "fuse_lowlevel.h"
- #include "fuse_opt.h"
- #include "fuse_misc.h"
--#include "fuse_common_compat.h"
--#include "fuse_compat.h"
-
- #include <stdio.h>
- #include <string.h>
-@@ -626,129 +624,6 @@
- fuse_do_prepare_interrupt(req, d);
- }
-
--#ifndef __FreeBSD__
--
--static int fuse_compat_open(struct fuse_fs *fs, const char *path,
-- struct fuse_file_info *fi)
--{
-- int err;
-- if (!fs->compat || fs->compat >= 25)
-- err = fs->op.open(path, fi);
-- else if (fs->compat == 22) {
-- struct fuse_file_info_compat tmp;
-- memcpy(&tmp, fi, sizeof(tmp));
-- err = ((struct fuse_operations_compat22 *) &fs->op)->open(path,
-- &tmp);
-- memcpy(fi, &tmp, sizeof(tmp));
-- fi->fh = tmp.fh;
-- } else
-- err = ((struct fuse_operations_compat2 *) &fs->op)
-- ->open(path, fi->flags);
-- return err;
--}
--
--static int fuse_compat_release(struct fuse_fs *fs, const char *path,
-- struct fuse_file_info *fi)
--{
-- if (!fs->compat || fs->compat >= 22)
-- return fs->op.release(path, fi);
-- else
-- return ((struct fuse_operations_compat2 *) &fs->op)
-- ->release(path, fi->flags);
--}
--
--static int fuse_compat_opendir(struct fuse_fs *fs, const char *path,
-- struct fuse_file_info *fi)
--{
-- if (!fs->compat || fs->compat >= 25)
-- return fs->op.opendir(path, fi);
-- else {
-- int err;
-- struct fuse_file_info_compat tmp;
-- memcpy(&tmp, fi, sizeof(tmp));
-- err = ((struct fuse_operations_compat22 *) &fs->op)
-- ->opendir(path, &tmp);
-- memcpy(fi, &tmp, sizeof(tmp));
-- fi->fh = tmp.fh;
-- return err;
-- }
--}
--
--static void convert_statfs_compat(struct fuse_statfs_compat1 *compatbuf,
-- struct statvfs *stbuf)
--{
-- stbuf->f_bsize = compatbuf->block_size;
-- stbuf->f_blocks = compatbuf->blocks;
-- stbuf->f_bfree = compatbuf->blocks_free;
-- stbuf->f_bavail = compatbuf->blocks_free;
-- stbuf->f_files = compatbuf->files;
-- stbuf->f_ffree = compatbuf->files_free;
-- stbuf->f_namemax = compatbuf->namelen;
--}
--
--static void convert_statfs_old(struct statfs *oldbuf, struct statvfs *stbuf)
--{
-- stbuf->f_bsize = oldbuf->f_bsize;
-- stbuf->f_blocks = oldbuf->f_blocks;
-- stbuf->f_bfree = oldbuf->f_bfree;
-- stbuf->f_bavail = oldbuf->f_bavail;
-- stbuf->f_files = oldbuf->f_files;
-- stbuf->f_ffree = oldbuf->f_ffree;
-- stbuf->f_namemax = oldbuf->f_namelen;
--}
--
--static int fuse_compat_statfs(struct fuse_fs *fs, const char *path,
-- struct statvfs *buf)
--{
-- int err;
--
-- if (!fs->compat || fs->compat >= 25) {
-- err = fs->op.statfs(fs->compat == 25 ? "/" : path, buf);
-- } else if (fs->compat > 11) {
-- struct statfs oldbuf;
-- err = ((struct fuse_operations_compat22 *) &fs->op)
-- ->statfs("/", &oldbuf);
-- if (!err)
-- convert_statfs_old(&oldbuf, buf);
-- } else {
-- struct fuse_statfs_compat1 compatbuf;
-- memset(&compatbuf, 0, sizeof(struct fuse_statfs_compat1));
-- err = ((struct fuse_operations_compat1 *) &fs->op)
-- ->statfs(&compatbuf);
-- if (!err)
-- convert_statfs_compat(&compatbuf, buf);
-- }
-- return err;
--}
--
--#else /* __FreeBSD__ */
--
--static inline int fuse_compat_open(struct fuse_fs *fs, char *path,
-- struct fuse_file_info *fi)
--{
-- return fs->op.open(path, fi);
--}
--
--static inline int fuse_compat_release(struct fuse_fs *fs, const char *path,
-- struct fuse_file_info *fi)
--{
-- return fs->op.release(path, fi);
--}
--
--static inline int fuse_compat_opendir(struct fuse_fs *fs, const char *path,
-- struct fuse_file_info *fi)
--{
-- return fs->op.opendir(path, fi);
--}
--
--static inline int fuse_compat_statfs(struct fuse_fs *fs, const char *path,
-- struct statvfs *buf)
--{
-- return fs->op.statfs(fs->compat == 25 ? "/" : path, buf);
--}
--
--#endif /* __FreeBSD__ */
--
- int fuse_fs_getattr(struct fuse_fs *fs, const char *path, struct stat *buf)
- {
- fuse_get_context()->private_data = fs->user_data;
-@@ -821,7 +696,7 @@
- {
- fuse_get_context()->private_data = fs->user_data;
- if (fs->op.release)
-- return fuse_compat_release(fs, path, fi);
-+ return fs->op.release(path, fi);
- else
- return 0;
- }
-@@ -831,7 +706,7 @@
- {
- fuse_get_context()->private_data = fs->user_data;
- if (fs->op.opendir)
-- return fuse_compat_opendir(fs, path, fi);
-+ return fs->op.opendir(path, fi);
- else
- return 0;
- }
-@@ -841,7 +716,7 @@
- {
- fuse_get_context()->private_data = fs->user_data;
- if (fs->op.open)
-- return fuse_compat_open(fs, path, fi);
-+ return fs->op.open(path, fi);
- else
- return 0;
- }
-@@ -900,7 +775,7 @@
- {
- fuse_get_context()->private_data = fs->user_data;
- if (fs->op.statfs)
-- return fuse_compat_statfs(fs, path, buf);
-+ return fs->op.statfs(path, buf);
- else {
- buf->f_namemax = 255;
- buf->f_bsize = 512;
-@@ -3070,7 +2945,6 @@
- if (!fs)
- goto out_free;
-
-- fs->compat = compat;
- f->fs = fs;
-
- /* Oh f**k, this is ugly! */
-@@ -3114,11 +2988,6 @@
- f->conf.readdir_ino = 1;
- #endif
-
-- if (compat && compat <= 25) {
-- if (fuse_sync_compat_args(args) == -1)
-- goto out_free_fs;
-- }
--
- f->se = fuse_lowlevel_new_common(args, &llop, sizeof(llop), f);
- if (f->se == NULL) {
- if (f->conf.help)
-@@ -3254,19 +3123,6 @@
- fuse_delete_context_key();
- }
-
--static struct fuse *fuse_new_common_compat25(int fd, struct fuse_args *args,
-- const struct fuse_operations *op,
-- size_t op_size, int compat)
--{
-- struct fuse *f = NULL;
-- struct fuse_chan *ch = fuse_kern_chan_new(fd);
--
-- if (ch)
-- f = fuse_new_common(ch, args, op, op_size, NULL, compat);
--
-- return f;
--}
--
- /* called with fuse_context_lock held or during initialization (before
- main() has been called) */
- void fuse_register_module(struct fuse_module *mod)
-@@ -3278,72 +3134,3 @@
- mod->next = fuse_modules;
- fuse_modules = mod;
- }
--
--#ifndef __FreeBSD__
--
--static struct fuse *fuse_new_common_compat(int fd, const char *opts,
-- const struct fuse_operations *op,
-- size_t op_size, int compat)
--{
-- struct fuse *f;
-- struct fuse_args args = FUSE_ARGS_INIT(0, NULL);
--
-- if (fuse_opt_add_arg(&args, "") == -1)
-- return NULL;
-- if (opts &&
-- (fuse_opt_add_arg(&args, "-o") == -1 ||
-- fuse_opt_add_arg(&args, opts) == -1)) {
-- fuse_opt_free_args(&args);
-- return NULL;
-- }
-- f = fuse_new_common_compat25(fd, &args, op, op_size, compat);
-- fuse_opt_free_args(&args);
--
-- return f;
--}
--
--struct fuse *fuse_new_compat22(int fd, const char *opts,
-- const struct fuse_operations_compat22 *op,
-- size_t op_size)
--{
-- return fuse_new_common_compat(fd, opts, (struct fuse_operations *) op,
-- op_size, 22);
--}
--
--struct fuse *fuse_new_compat2(int fd, const char *opts,
-- const struct fuse_operations_compat2 *op)
--{
-- return fuse_new_common_compat(fd, opts, (struct fuse_operations *) op,
-- sizeof(struct fuse_operations_compat2),
-- 21);
--}
--
--struct fuse *fuse_new_compat1(int fd, int flags,
-- const struct fuse_operations_compat1 *op)
--{
-- const char *opts = NULL;
-- if (flags & FUSE_DEBUG_COMPAT1)
-- opts = "debug";
-- return fuse_new_common_compat(fd, opts, (struct fuse_operations *) op,
-- sizeof(struct fuse_operations_compat1),
-- 11);
--}
--
--FUSE_SYMVER(".symver fuse_exited,__fuse_exited@");
--FUSE_SYMVER(".symver fuse_process_cmd,__fuse_process_cmd@");
--FUSE_SYMVER(".symver fuse_read_cmd,__fuse_read_cmd@");
--FUSE_SYMVER(".symver fuse_set_getcontext_func,__fuse_set_getcontext_func@");
--FUSE_SYMVER(".symver fuse_new_compat2,fuse_new@");
--FUSE_SYMVER(".symver fuse_new_compat22,fuse_new@FUSE_2.2");
--
--#endif /* __FreeBSD__ */
--
--struct fuse *fuse_new_compat25(int fd, struct fuse_args *args,
-- const struct fuse_operations_compat25 *op,
-- size_t op_size)
--{
-- return fuse_new_common_compat25(fd, args, (struct fuse_operations *) op,
-- op_size, 25);
--}
--
--FUSE_SYMVER(".symver fuse_new_compat25,fuse_new@FUSE_2.5");
-diff -Nru fuse-2.7.3.orig/lib/fuse_lowlevel.c fuse-2.7.3/lib/fuse_lowlevel.c
---- fuse-2.7.3.orig/lib/fuse_lowlevel.c 2008-02-19 14:51:26.000000000 -0500
-+++ fuse-2.7.3/lib/fuse_lowlevel.c 2008-03-17 15:07:40.000000000 -0400
-@@ -11,8 +11,6 @@
- #include "fuse_opt.h"
- #include "fuse_i.h"
- #include "fuse_misc.h"
--#include "fuse_common_compat.h"
--#include "fuse_lowlevel_compat.h"
-
- #include <stdio.h>
- #include <stdlib.h>
-@@ -1319,130 +1317,3 @@
- {
- return fuse_lowlevel_new_common(args, op, op_size, userdata);
- }
--
--
--#ifndef __FreeBSD__
--
--static void fill_open_compat(struct fuse_open_out *arg,
-- const struct fuse_file_info_compat *f)
--{
-- arg->fh = f->fh;
-- if (f->direct_io)
-- arg->open_flags |= FOPEN_DIRECT_IO;
-- if (f->keep_cache)
-- arg->open_flags |= FOPEN_KEEP_CACHE;
--}
--
--static void convert_statfs_compat(const struct statfs *compatbuf,
-- struct statvfs *buf)
--{
-- buf->f_bsize = compatbuf->f_bsize;
-- buf->f_blocks = compatbuf->f_blocks;
-- buf->f_bfree = compatbuf->f_bfree;
-- buf->f_bavail = compatbuf->f_bavail;
-- buf->f_files = compatbuf->f_files;
-- buf->f_ffree = compatbuf->f_ffree;
-- buf->f_namemax = compatbuf->f_namelen;
--}
--
--int fuse_reply_open_compat(fuse_req_t req,
-- const struct fuse_file_info_compat *f)
--{
-- struct fuse_open_out arg;
--
-- memset(&arg, 0, sizeof(arg));
-- fill_open_compat(&arg, f);
-- return send_reply_ok(req, &arg, sizeof(arg));
--}
--
--int fuse_reply_statfs_compat(fuse_req_t req, const struct statfs *stbuf)
--{
-- struct statvfs newbuf;
--
-- memset(&newbuf, 0, sizeof(newbuf));
-- convert_statfs_compat(stbuf, &newbuf);
--
-- return fuse_reply_statfs(req, &newbuf);
--}
--
--struct fuse_session *fuse_lowlevel_new_compat(const char *opts,
-- const struct fuse_lowlevel_ops_compat *op,
-- size_t op_size, void *userdata)
--{
-- struct fuse_session *se;
-- struct fuse_args args = FUSE_ARGS_INIT(0, NULL);
--
-- if (opts &&
-- (fuse_opt_add_arg(&args, "") == -1 ||
-- fuse_opt_add_arg(&args, "-o") == -1 ||
-- fuse_opt_add_arg(&args, opts) == -1)) {
-- fuse_opt_free_args(&args);
-- return NULL;
-- }
-- se = fuse_lowlevel_new(&args, (const struct fuse_lowlevel_ops *) op,
-- op_size, userdata);
-- fuse_opt_free_args(&args);
--
-- return se;
--}
--
--struct fuse_ll_compat_conf {
-- unsigned max_read;
-- int set_max_read;
--};
--
--static const struct fuse_opt fuse_ll_opts_compat[] = {
-- { "max_read=", offsetof(struct fuse_ll_compat_conf, set_max_read), 1 },
-- { "max_read=%u", offsetof(struct fuse_ll_compat_conf, max_read), 0 },
-- FUSE_OPT_KEY("max_read=", FUSE_OPT_KEY_KEEP),
-- FUSE_OPT_END
--};
--
--int fuse_sync_compat_args(struct fuse_args *args)
--{
-- struct fuse_ll_compat_conf conf;
--
-- memset(&conf, 0, sizeof(conf));
-- if (fuse_opt_parse(args, &conf, fuse_ll_opts_compat, NULL) == -1)
-- return -1;
--
-- if (fuse_opt_insert_arg(args, 1, "-osync_read"))
-- return -1;
--
-- if (conf.set_max_read) {
-- char tmpbuf[64];
--
-- sprintf(tmpbuf, "-omax_readahead=%u", conf.max_read);
-- if (fuse_opt_insert_arg(args, 1, tmpbuf) == -1)
-- return -1;
-- }
-- return 0;
--}
--
--FUSE_SYMVER(".symver fuse_reply_statfs_compat,fuse_reply_statfs@FUSE_2.4");
--FUSE_SYMVER(".symver fuse_reply_open_compat,fuse_reply_open@FUSE_2.4");
--FUSE_SYMVER(".symver fuse_lowlevel_new_compat,fuse_lowlevel_new@FUSE_2.4");
--
--#else /* __FreeBSD__ */
--
--int fuse_sync_compat_args(struct fuse_args *args)
--{
-- (void) args;
-- return 0;
--}
--
--#endif /* __FreeBSD__ */
--
--struct fuse_session *fuse_lowlevel_new_compat25(struct fuse_args *args,
-- const struct fuse_lowlevel_ops_compat25 *op,
-- size_t op_size, void *userdata)
--{
-- if (fuse_sync_compat_args(args) == -1)
-- return NULL;
--
-- return fuse_lowlevel_new_common(args,
-- (const struct fuse_lowlevel_ops *) op,
-- op_size, userdata);
--}
--
--FUSE_SYMVER(".symver fuse_lowlevel_new_compat25,fuse_lowlevel_new@FUSE_2.5");
-diff -Nru fuse-2.7.3.orig/lib/helper.c fuse-2.7.3/lib/helper.c
---- fuse-2.7.3.orig/lib/helper.c 2008-02-19 14:51:27.000000000 -0500
-+++ fuse-2.7.3/lib/helper.c 2008-03-17 15:10:18.000000000 -0400
-@@ -11,7 +11,6 @@
- #include "fuse_misc.h"
- #include "fuse_opt.h"
- #include "fuse_lowlevel.h"
--#include "fuse_common_compat.h"
-
- #include <stdio.h>
- #include <stdlib.h>
-@@ -206,7 +205,7 @@
- close(fd);
- } while (fd >= 0 && fd <= 2);
-
-- fd = fuse_mount_compat25(mountpoint, args);
-+ fd = fuse_kern_mount(mountpoint, args);
- if (fd == -1)
- return NULL;
-
-@@ -353,100 +352,3 @@
- {
- return FUSE_VERSION;
- }
--
--#include "fuse_compat.h"
--
--#ifndef __FreeBSD__
--
--struct fuse *fuse_setup_compat22(int argc, char *argv[],
-- const struct fuse_operations_compat22 *op,
-- size_t op_size, char **mountpoint,
-- int *multithreaded, int *fd)
--{
-- return fuse_setup_common(argc, argv, (struct fuse_operations *) op,
-- op_size, mountpoint, multithreaded, fd, NULL,
-- 22);
--}
--
--struct fuse *fuse_setup_compat2(int argc, char *argv[],
-- const struct fuse_operations_compat2 *op,
-- char **mountpoint, int *multithreaded,
-- int *fd)
--{
-- return fuse_setup_common(argc, argv, (struct fuse_operations *) op,
-- sizeof(struct fuse_operations_compat2),
-- mountpoint, multithreaded, fd, NULL, 21);
--}
--
--int fuse_main_real_compat22(int argc, char *argv[],
-- const struct fuse_operations_compat22 *op,
-- size_t op_size)
--{
-- return fuse_main_common(argc, argv, (struct fuse_operations *) op,
-- op_size, NULL, 22);
--}
--
--void fuse_main_compat1(int argc, char *argv[],
-- const struct fuse_operations_compat1 *op)
--{
-- fuse_main_common(argc, argv, (struct fuse_operations *) op,
-- sizeof(struct fuse_operations_compat1), NULL, 11);
--}
--
--int fuse_main_compat2(int argc, char *argv[],
-- const struct fuse_operations_compat2 *op)
--{
-- return fuse_main_common(argc, argv, (struct fuse_operations *) op,
-- sizeof(struct fuse_operations_compat2), NULL,
-- 21);
--}
--
--int fuse_mount_compat1(const char *mountpoint, const char *args[])
--{
-- /* just ignore mount args for now */
-- (void) args;
-- return fuse_mount_compat22(mountpoint, NULL);
--}
--
--FUSE_SYMVER(".symver fuse_setup_compat2,__fuse_setup@");
--FUSE_SYMVER(".symver fuse_setup_compat22,fuse_setup@FUSE_2.2");
--FUSE_SYMVER(".symver fuse_teardown,__fuse_teardown@");
--FUSE_SYMVER(".symver fuse_main_compat2,fuse_main@");
--FUSE_SYMVER(".symver fuse_main_real_compat22,fuse_main_real@FUSE_2.2");
--
--#endif /* __FreeBSD__ */
--
--
--struct fuse *fuse_setup_compat25(int argc, char *argv[],
-- const struct fuse_operations_compat25 *op,
-- size_t op_size, char **mountpoint,
-- int *multithreaded, int *fd)
--{
-- return fuse_setup_common(argc, argv, (struct fuse_operations *) op,
-- op_size, mountpoint, multithreaded, fd, NULL,
-- 25);
--}
--
--int fuse_main_real_compat25(int argc, char *argv[],
-- const struct fuse_operations_compat25 *op,
-- size_t op_size)
--{
-- return fuse_main_common(argc, argv, (struct fuse_operations *) op,
-- op_size, NULL, 25);
--}
--
--void fuse_teardown_compat22(struct fuse *fuse, int fd, char *mountpoint)
--{
-- (void) fd;
-- fuse_teardown_common(fuse, mountpoint);
--}
--
--int fuse_mount_compat25(const char *mountpoint, struct fuse_args *args)
--{
-- return fuse_kern_mount(mountpoint, args);
--}
--
--FUSE_SYMVER(".symver fuse_setup_compat25,fuse_setup@FUSE_2.5");
--FUSE_SYMVER(".symver fuse_teardown_compat22,fuse_teardown@FUSE_2.2");
--FUSE_SYMVER(".symver fuse_main_real_compat25,fuse_main_real@FUSE_2.5");
--FUSE_SYMVER(".symver fuse_mount_compat25,fuse_mount@FUSE_2.5");
-diff -Nru fuse-2.7.3.orig/lib/mount.c fuse-2.7.3/lib/mount.c
---- fuse-2.7.3.orig/lib/mount.c 2008-02-19 14:51:27.000000000 -0500
-+++ fuse-2.7.3/lib/mount.c 2008-03-17 15:11:02.000000000 -0400
-@@ -10,7 +10,6 @@
- #include "fuse_i.h"
- #include "fuse_misc.h"
- #include "fuse_opt.h"
--#include "fuse_common_compat.h"
- #include "mount_util.h"
-
- #include <stdio.h>
-@@ -312,11 +311,6 @@
- waitpid(pid, NULL, 0);
- }
-
--void fuse_unmount_compat22(const char *mountpoint)
--{
-- fuse_kern_unmount(mountpoint, -1);
--}
--
- static int fuse_mount_fusermount(const char *mountpoint, const char *opts,
- int quiet)
- {
-@@ -380,11 +374,6 @@
- return rv;
- }
-
--int fuse_mount_compat22(const char *mountpoint, const char *opts)
--{
-- return fuse_mount_fusermount(mountpoint, opts, 0);
--}
--
- static int fuse_mount_sys(const char *mnt, struct mount_opts *mo,
- const char *mnt_opts)
- {
-@@ -587,6 +576,3 @@
- free(mo.mtab_opts);
- return res;
- }
--
--FUSE_SYMVER(".symver fuse_mount_compat22,fuse_mount@FUSE_2.2");
--FUSE_SYMVER(".symver fuse_unmount_compat22,fuse_unmount@FUSE_2.2");
diff --git a/package/fuse/patches/300-workaround-uclibc-pthread-breakage.patch b/package/fuse/patches/300-workaround-uclibc-pthread-breakage.patch
index cef5ce2..dded4d8 100644
--- a/package/fuse/patches/300-workaround-uclibc-pthread-breakage.patch
+++ b/package/fuse/patches/300-workaround-uclibc-pthread-breakage.patch
@@ -1,6 +1,7 @@
---- fuse-2.7.3.orig/lib/helper.c 2008-11-22 03:25:11.000000000 +0100
-+++ fuse-2.7.3/lib/helper.c 2008-11-22 04:06:35.000000000 +0100
-@@ -178,13 +178,41 @@
+diff -Nurp fuse-2.8.1.orig/lib/helper.c fuse-2.8.1/lib/helper.c
+--- fuse-2.8.1.orig/lib/helper.c 2009-06-18 13:14:09.000000000 +0200
++++ fuse-2.8.1/lib/helper.c 2009-12-17 01:11:32.773356000 +0100
+@@ -180,13 +180,41 @@ err:
int fuse_daemonize(int foreground)
{
int res;