aboutsummaryrefslogtreecommitdiff
path: root/lib
Commit message (Collapse)AuthorAge
* Remove unused member of 'struct fuse_dh'Gravatar Rostislav Skudnov2018-07-25
|
* Fix readdir() bug when a non-zero offset is specified in filler (#269)Gravatar Rostislav2018-07-21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The bug occurs when a filesystem client reads a directory until the end, seeks using seekdir() to some valid non-zero position and calls readdir(). A valid 'struct dirent *' is expected, but NULL is returned instead. Pseudocode demonstrating the bug: DIR *dp = opendir("some_dir"); struct dirent *de = readdir(dp); /* Get offset of the second entry */ long offset = telldir(dp); /* Read directory until the end */ while (de) de = readdir(de); seekdir(dp, offset); de = readdir(dp); /* de must contain the second entry, but NULL is returned instead */ The reason of the bug is that when the end of directory is reached, the kernel calls FUSE_READDIR op with an offset at the end of directory, so the filesystem's .readdir callback never calls the filler function, and we end up with dh->filled set to 1. After seekdir(), FUSE_READDIR is called again with a new offset, but this time the filesystem's .readdir callback is never called, and an empty reply is returned. Fix by setting dh->filled to 1 only when zero offsets are given to filler function.
* rename: perform user mode dir loop check when not done in kernelGravatar Bill Zissimooulos2018-05-18
| | | | Fix conditionals as per maintainer's request.
* rename: perform user mode dir loop check when not done in kernelGravatar Bill Zissimooulos2018-05-18
| | | | | | | | | | | | Linux performs the dir loop check (rename(a, a/b/c) or rename(a/b/c, a), etc.) in kernel. Unfortunately other systems do not perform this check (e.g. FreeBSD). This results in a deadlock in get_path2, because libfuse did not expect to handle such cases. We add a check_dir_loop function that performs the dir loop check in user mode and enable it on systems that need it.
* Drop unneeded void cast for actually used local variableGravatar Tomohiro Kusumi2018-04-13
| | | | `int sig` is acutually used, so `(void) sig;` is unneeded.
* Fix uninitialised read in fuse_new_30() (#231) (#234)Gravatar Ashley Pittman2018-02-09
| | | | | | | Ensure that conf is always zero before it's read from to prevent sporadic failure at startup if higher layers were build against version 3.0 Signed-off-by: Ashley Pittman <ashley.m.pittman@intel.com>
* Spelling (#223)Gravatar Josh Soref2017-11-27
| | | Fix spelling errors
* Backed out d92bf83Gravatar Nikolaus Rath2017-11-03
| | | | | | | | | This change is bogus. fuse_module_factory_t is already a pointer type. Additionally, if dlsym returns NULL, then you will be dereferencing it causing a segfault. In my testing, a segfault will happen even if dlsym returns successfully. Thanks to Michael Theall for spotting!
* Adding pointer dereferencing after calling dlsym()Gravatar Sangwoo Moon2017-09-27
| | | | | | dlsym() resolves the location of the loaded symbol, therefore dlsym() returns the type (fuse_module_factory_t *), not (fuse_module_factory_t). Added pinter dereferencing to correctly refer the factory function.
* fuse_lib_ioctl(): don't call memcpy with NULL argumentGravatar Nikolaus Rath2017-09-25
| | | | | This was detected by using clang's undefined behavior sanitizer, but didn't seem to cause problems in practice.
* Link with -lrt to support ancient libcGravatar Nikolaus Rath2017-09-25
| | | | Fixes: #207.
* Correctly define fusermount3 path.Gravatar Nikolaus Rath2017-09-19
|
* Make *_loop_mt() available in version 3.0 againGravatar Nikolaus Rath2017-09-19
| | | | | | The old versions of these symbols were defined with version tag FUSE_3.0, so this is what we have to use in the .symver directive.
* Fix versioned symbols in version scriptGravatar Nikolaus Rath2017-09-19
| | | | | | | According to "How to Write Shared Libraries" by Ulrich Drepper (https://www.akkadia.org/drepper/dsohowto.pdf), the version script should contain the exported name of the versioned symbol once in each tag for which it has been defined by .symver.
* Don't use external symbol names in internal filesGravatar Nikolaus Rath2017-09-19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The fuse_session_loop_mt() and fuse_loop_mt() symbols are only visible when linking against the shared object. The code in lib/, however, is compiled *into* the shared object and should thus use the internal names of these functions. Surprisingly enough, the code still worked before - but only when link time optimization was disabled. Unfortunately, we still can't compile with LTO because it seems that enabling LTO somehow makes the tagged symbols vanish. Without lto, we have: $ nm lib/libfuse3.so | grep fuse_new 0000000000011070 T fuse_new_30 0000000000010a00 t fuse_new_31 0000000000011070 T fuse_new@FUSE_3.0 0000000000010a00 T fuse_new@@FUSE_3.1 and with LTO: $ nm lib/libfuse3.so | grep fuse_new 0000000000019a70 T fuse_new_30 0000000000019270 t fuse_new_31 See also issue #198.
* fuse_kern_unmount(): close fd before calling umountGravatar Nikolaus Rath2017-09-11
| | | | | | This is what the Linux version does, and it fixes a timeout under FreeBSD when the kernel sends a FUSE_DESTROY request that is never answered.
* do_init(): print missing capabilities if there are any.Gravatar Nikolaus Rath2017-08-25
|
* Dropped support for building with autotoolsGravatar Nikolaus Rath2017-08-24
| | | | It's just too much pain to keep it working.
* Add idle_threads mount option.Gravatar Joseph Dodge2017-08-24
|
* Allow inode cache invalidation in high-level APIGravatar SÅ‚awek Rudnicki2017-08-24
| | | | | | | | | | | We re-introduce the functionality of invalidating the caches for an inode specified by path by adding a new routine fuse_invalidate_path. This is useful for network-based file systems which use the high-level API, enabling them to notify the kernel about external changes. This is a revival of Miklos Szeredi's original code for the fuse_invalidate routine.
* fuse_loop_mt(): on error, return errno rather than -1.Gravatar Nikolaus Rath2017-08-23
|
* fuse_loop(): don't return non-zero if there was no errorGravatar Nikolaus Rath2017-08-23
|
* Document and unify error codes of fuse_lowlevel_notify_*Gravatar Nikolaus Rath2017-08-22
|
* Fix two compiler warnings.Gravatar Nikolaus Rath2017-08-22
|
* Allow building without iconv.Gravatar Nikolaus Rath2017-08-22
| | | | cfg.has('HAVE_ICONV') was always true.
* directly call fuse_new_31() instead of fuse_new() internallyGravatar userwithuid2017-08-14
| | | | this fixes building with lto, which failed since commit 503e32d01e4db00e90d7acfd81ab05386559069f
* fuse_lib_init(): don't set FUSE_CAP_EXPORT_SUPPORT unconditionallyGravatar Nikolaus Rath2017-08-11
| | | | FreeBSD kernel does not support this.
* fuse_kern_unmount(): fix variable type.Gravatar Nikolaus Rath2017-08-11
|
* Fix unused variable warnings under FreeBSD.Gravatar Nikolaus Rath2017-08-11
|
* Fix support for FUSE_POSIX_ACLGravatar Marcin Sulikowski2017-08-07
| | | | | | | | | | | | | | The kernel may set the FUSE_POSIX_ACL flag in the FUSE_INIT request to notify the userspace daemon that the OS does support POSIX ACLs for FUSE file systems. If the filesystem implementation wants to enable POSIX ACLs, it has to reply with the FUSE_POSIX_ACL flag set. However, the reply to the kernel never includes this flag, even if the implementation expresses the need by setting the FUSE_CAP_POSIX_ACL flag in the fuse_conn_info::want variable passed to its init callback. We modify the library to handle requests for FUSE_CAP_POSIX_ACL correctly, i.e., set the FUSE_POSIX_ACL flag in the FUSE_INIT reply to the kernel. Signed-off-by: Marcin Sulikowski <marcin.sulikowski@editshare.com>
* Released 3.1.1Gravatar Nikolaus Rath2017-08-06
|
* Simplify and fix FreeBSD fsname handlingGravatar Nikolaus Rath2017-08-03
| | | | | | This should simplify the code a lot. It also corrects a bug in that the (former) add_default_fsname() function actually set the -osubtype option.
* Simply #ifdefsGravatar Nikolaus Rath2017-08-03
| | | | | | mount_bsd.c is only used when compiling for *BSD, and FreeBSD is the only BSD that supports FUSE. So there really is no need to check if this file is compiled under FreeBSD.
* FreeBSD: supprt fsname= optionGravatar Baptiste Daroussin2017-08-03
|
* FreeBSD: use unmount(2) and add missing FreeBSD mount optionGravatar Baptiste Daroussin2017-08-03
|
* Fix compiler warnings of gcc-5.4.xGravatar Banglang2017-08-01
| | | | Signed-off-by: Banglang <banglang.huang@foxmail.com>
* Only declare fuse_new_30() when FUSE_USE_VERSION == 30Gravatar Nikolaus Rath2017-07-13
| | | | | This function shouldn't be called when using a newer fuse version, so we should not define it in that case.
* fuse_new_30(): call fuse_new_31(), not fuse_new()Gravatar Nikolaus Rath2017-07-13
| | | | | | | I believe this function call is resolved by the compiler, not the linker, so this seems safer. Thanks to Chris Clayton for spotting this.
* Fixup symbol versioning for GCC 4.xGravatar Nikolaus Rath2017-07-08
| | | | | GCC 4.8 doesn't like to rename fuse_new_30 to fuse_new, if we also define an implementation for fuse_new.
* Added public fuse_lib_help(), bumped minor versionGravatar Nikolaus Rath2017-07-08
|
* Fixed description of struct fuse_conn_info->time_granGravatar Nikolaus Rath2017-07-08
| | | | | At least on Linux kernel 4.9, a value of zero gives more than 1-sec accuracy.
* Don't use emacs' python-mode for meson filesGravatar Nikolaus Rath2017-07-07
| | | | There is a proper meson-mode now.
* Don't redefine FUSE_USE_VERSIONGravatar Nikolaus Rath2017-07-06
| | | | It's already set in meson.build as compiler flag.
* getgroups(): clarify codeGravatar Nikolaus Rath2017-06-05
| | | | | | read() return value should always be positive or -1. However, since we cast to unsigned a little later, it's clearer to check for non-negativity.
* Fix comparison of integers of different signsGravatar Angelo G. Del Regno2017-06-05
| | | | | | | | Some variables of different size and sign were getting compared without any safe casting. The build system also throws warnings at this and, being this library used for filesystems, it's really important to ensure stability.
* Remove fuse_fs_fgetattr and fuse_fs_ftruncate from linker scriptGravatar pablomh2017-05-25
| | | They were removed from source here: https://github.com/libfuse/libfuse/commit/73b6ff4b75cf1228ea61262c293fcb2fda5dfeea
* lib/meson.build: don't crash if there's no libdlGravatar Nikolaus Rath2017-05-24
| | | | | | For example, FreeBSD doesn't have it. Fixes: #173.
* fuse_signals.c: use new do_nothing function instead of SIG_IGNGravatar Nikolaus Rath2017-05-24
| | | | Fixes: #160.
* Released libfuse 3.0.2Gravatar Nikolaus Rath2017-05-24
|
* make buffer size match kernel max transfer sizeGravatar Carlos Maiolino2017-04-20
| | | | | | | | | | | | | | | Currently libfuse has a hardcoded buffer limit to 128kib, while fuse kernel module has a limit up to 32 pages. This patch changes buffer limit to match the current page size, instead of assuming 4096 bytes pages, enabling architectures with bigger pages to use larger buffers, improving performance. Also, add a new macro (HEADER_SIZE) to specify the space needed to accommodate the header, making it easier to understand why those extra 4096 bytes are needed Signed-off-by: Carlos Maiolino <cmaiolino-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>