diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2007-12-12 11:53:38 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2007-12-12 11:53:38 +0000 |
commit | 918f0ad95b73e506d20488cb8ddd35d1a2524c7c (patch) | |
tree | c2adf3e3c71b94c59b8d64beb9a0ab83ab87119c /lib | |
parent | 0b47f6bc8bfe939f12266ef41cba31a2eb2c5f30 (diff) | |
download | libfuse-918f0ad95b73e506d20488cb8ddd35d1a2524c7c.tar.gz |
Disable old symbol versions if __UCLIBC__ is defined
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Makefile.am | 2 | ||||
-rw-r--r-- | lib/fuse.c | 14 | ||||
-rw-r--r-- | lib/fuse_lowlevel.c | 8 | ||||
-rw-r--r-- | lib/fuse_misc.h | 8 | ||||
-rw-r--r-- | lib/fuse_mt.c | 3 | ||||
-rw-r--r-- | lib/fuse_opt.c | 19 | ||||
-rw-r--r-- | lib/fuse_session.c | 3 | ||||
-rw-r--r-- | lib/fuse_versionscript | 1 | ||||
-rw-r--r-- | lib/helper.c | 19 | ||||
-rw-r--r-- | lib/mount.c | 9 | ||||
-rw-r--r-- | lib/mount_bsd.c | 3 |
11 files changed, 61 insertions, 28 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am index cf84847..4d14ef4 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -34,7 +34,7 @@ libfuse_la_SOURCES = \ $(iconv_source) \ $(mount_source) -libfuse_la_LDFLAGS = @libfuse_libs@ -version-number 2:7:1 \ +libfuse_la_LDFLAGS = @libfuse_libs@ -version-number 2:7:2 \ -Wl,--version-script,$(srcdir)/fuse_versionscript libulockmgr_la_SOURCES = ulockmgr.c @@ -3290,12 +3290,12 @@ struct fuse *fuse_new_compat1(int fd, int flags, sizeof(struct fuse_operations_compat1), 11); } -__asm__(".symver fuse_exited,__fuse_exited@"); -__asm__(".symver fuse_process_cmd,__fuse_process_cmd@"); -__asm__(".symver fuse_read_cmd,__fuse_read_cmd@"); -__asm__(".symver fuse_set_getcontext_func,__fuse_set_getcontext_func@"); -__asm__(".symver fuse_new_compat2,fuse_new@"); -__asm__(".symver fuse_new_compat22,fuse_new@FUSE_2.2"); +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__ */ @@ -3307,4 +3307,4 @@ struct fuse *fuse_new_compat25(int fd, struct fuse_args *args, op_size, 25); } -__asm__(".symver fuse_new_compat25,fuse_new@FUSE_2.5"); +FUSE_SYMVER(".symver fuse_new_compat25,fuse_new@FUSE_2.5"); diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c index 64e2aba..d39a4a1 100644 --- a/lib/fuse_lowlevel.c +++ b/lib/fuse_lowlevel.c @@ -1409,9 +1409,9 @@ int fuse_sync_compat_args(struct fuse_args *args) return 0; } -__asm__(".symver fuse_reply_statfs_compat,fuse_reply_statfs@FUSE_2.4"); -__asm__(".symver fuse_reply_open_compat,fuse_reply_open@FUSE_2.4"); -__asm__(".symver fuse_lowlevel_new_compat,fuse_lowlevel_new@FUSE_2.4"); +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__ */ @@ -1435,4 +1435,4 @@ struct fuse_session *fuse_lowlevel_new_compat25(struct fuse_args *args, op_size, userdata); } -__asm__(".symver fuse_lowlevel_new_compat25,fuse_lowlevel_new@FUSE_2.5"); +FUSE_SYMVER(".symver fuse_lowlevel_new_compat25,fuse_lowlevel_new@FUSE_2.5"); diff --git a/lib/fuse_misc.h b/lib/fuse_misc.h index 99e5117..4f5236a 100644 --- a/lib/fuse_misc.h +++ b/lib/fuse_misc.h @@ -9,9 +9,17 @@ #include "config.h" #include <pthread.h> +/* Versioned symbols confuse the dynamic linker in uClibc */ +#ifndef __UCLIBC__ +#define FUSE_SYMVER(x) __asm__(x) +#else +#define FUSE_SYMVER(x) +#endif + #ifndef USE_UCLIBC #define fuse_mutex_init(mut) pthread_mutex_init(mut, NULL) #else +/* Is this hack still needed? */ static inline void fuse_mutex_init(pthread_mutex_t *mut) { pthread_mutexattr_t attr; diff --git a/lib/fuse_mt.c b/lib/fuse_mt.c index 2c1ff2c..cbdc1a3 100644 --- a/lib/fuse_mt.c +++ b/lib/fuse_mt.c @@ -7,6 +7,7 @@ */ #include "fuse_i.h" +#include "fuse_misc.h" #include "fuse_lowlevel.h" #include <stdio.h> @@ -112,4 +113,4 @@ int fuse_loop_mt(struct fuse *f) return fuse_session_loop_mt(fuse_get_session(f)); } -__asm__(".symver fuse_loop_mt_proc,__fuse_loop_mt@"); +FUSE_SYMVER(".symver fuse_loop_mt_proc,__fuse_loop_mt@"); diff --git a/lib/fuse_opt.c b/lib/fuse_opt.c index 1c6a315..d10e624 100644 --- a/lib/fuse_opt.c +++ b/lib/fuse_opt.c @@ -7,6 +7,7 @@ */ #include "fuse_opt.h" +#include "fuse_misc.h" #include <stdio.h> #include <stdlib.h> @@ -65,7 +66,8 @@ int fuse_opt_add_arg(struct fuse_args *args, const char *arg) return 0; } -int fuse_opt_insert_arg(struct fuse_args *args, int pos, const char *arg) +static int fuse_opt_insert_arg_common(struct fuse_args *args, int pos, + const char *arg) { assert(pos <= args->argc); if (fuse_opt_add_arg(args, arg) == -1) @@ -80,6 +82,18 @@ int fuse_opt_insert_arg(struct fuse_args *args, int pos, const char *arg) return 0; } +int fuse_opt_insert_arg(struct fuse_args *args, int pos, const char *arg) +{ + return fuse_opt_insert_arg_common(args, pos, arg); +} + +int fuse_opt_insert_arg_compat(struct fuse_args *args, int pos, + const char *arg); +int fuse_opt_insert_arg_compat(struct fuse_args *args, int pos, const char *arg) +{ + return fuse_opt_insert_arg_common(args, pos, arg); +} + static int next_arg(struct fuse_opt_context *ctx, const char *opt) { if (ctx->argctr + 1 >= ctx->argc) { @@ -365,3 +379,6 @@ int fuse_opt_parse(struct fuse_args *args, void *data, fuse_opt_free_args(&ctx.outargs); return res; } + +/* This symbol version was mistakenly added to the version script */ +FUSE_SYMVER(".symver fuse_opt_insert_arg_compat,fuse_opt_insert_arg@FUSE_2.5"); diff --git a/lib/fuse_session.c b/lib/fuse_session.c index 33cc59e..cf2e20b 100644 --- a/lib/fuse_session.c +++ b/lib/fuse_session.c @@ -7,6 +7,7 @@ */ #include "fuse_lowlevel.h" +#include "fuse_misc.h" #include "fuse_common_compat.h" #include "fuse_lowlevel_compat.h" @@ -204,5 +205,5 @@ void fuse_chan_destroy(struct fuse_chan *ch) } #ifndef __FreeBSD__ -__asm__(".symver fuse_chan_new_compat24,fuse_chan_new@FUSE_2.4"); +FUSE_SYMVER(".symver fuse_chan_new_compat24,fuse_chan_new@FUSE_2.4"); #endif diff --git a/lib/fuse_versionscript b/lib/fuse_versionscript index 9d6642a..3eedd0c 100644 --- a/lib/fuse_versionscript +++ b/lib/fuse_versionscript @@ -67,7 +67,6 @@ FUSE_2.5 { fuse_opt_add_opt; fuse_opt_add_arg; fuse_opt_free_args; - fuse_opt_insert_arg; fuse_opt_match; fuse_parse_cmdline; fuse_remove_signal_handlers; diff --git a/lib/helper.c b/lib/helper.c index e79f4b0..fbbf4b2 100644 --- a/lib/helper.c +++ b/lib/helper.c @@ -8,6 +8,7 @@ #include "config.h" #include "fuse_i.h" +#include "fuse_misc.h" #include "fuse_opt.h" #include "fuse_lowlevel.h" #include "fuse_common_compat.h" @@ -402,11 +403,11 @@ int fuse_mount_compat1(const char *mountpoint, const char *args[]) return fuse_mount_compat22(mountpoint, NULL); } -__asm__(".symver fuse_setup_compat2,__fuse_setup@"); -__asm__(".symver fuse_setup_compat22,fuse_setup@FUSE_2.2"); -__asm__(".symver fuse_teardown,__fuse_teardown@"); -__asm__(".symver fuse_main_compat2,fuse_main@"); -__asm__(".symver fuse_main_real_compat22,fuse_main_real@FUSE_2.2"); +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__ */ @@ -439,7 +440,7 @@ int fuse_mount_compat25(const char *mountpoint, struct fuse_args *args) return fuse_kern_mount(mountpoint, args); } -__asm__(".symver fuse_setup_compat25,fuse_setup@FUSE_2.5"); -__asm__(".symver fuse_teardown_compat22,fuse_teardown@FUSE_2.2"); -__asm__(".symver fuse_main_real_compat25,fuse_main_real@FUSE_2.5"); -__asm__(".symver fuse_mount_compat25,fuse_mount@FUSE_2.5"); +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 --git a/lib/mount.c b/lib/mount.c index e0fea56..8a5c5ab 100644 --- a/lib/mount.c +++ b/lib/mount.c @@ -8,6 +8,7 @@ #include "config.h" #include "fuse_i.h" +#include "fuse_misc.h" #include "fuse_opt.h" #include "fuse_common_compat.h" #include "mount_util.h" @@ -283,6 +284,10 @@ void fuse_kern_unmount(const char *mountpoint, int fd) then the filesystem is already unmounted */ if (res == 1 && (pfd.revents & POLLERR)) return; + + /* Need to close file descriptor, otherwise synchronous umount + would recurse into filesystem, and deadlock */ + close(fd); } if (geteuid() == 0) { @@ -579,5 +584,5 @@ int fuse_kern_mount(const char *mountpoint, struct fuse_args *args) return res; } -__asm__(".symver fuse_mount_compat22,fuse_mount@FUSE_2.2"); -__asm__(".symver fuse_unmount_compat22,fuse_unmount@FUSE_2.2"); +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/lib/mount_bsd.c b/lib/mount_bsd.c index 1c4030d..5197464 100644 --- a/lib/mount_bsd.c +++ b/lib/mount_bsd.c @@ -7,6 +7,7 @@ */ #include "fuse_i.h" +#include "fuse_misc.h" #include "fuse_opt.h" #include <sys/stat.h> @@ -360,4 +361,4 @@ int fuse_kern_mount(const char *mountpoint, struct fuse_args *args) return res; } -__asm__(".symver fuse_unmount_compat22,fuse_unmount@FUSE_2.2"); +FUSE_SYMVER(".symver fuse_unmount_compat22,fuse_unmount@FUSE_2.2"); |