diff options
Diffstat (limited to 'fs')
| -rwxr-xr-x | fs/tabfs-wrapper | 28 | ||||
| -rw-r--r-- | fs/tabfs.c | 40 | 
2 files changed, 29 insertions, 39 deletions
| diff --git a/fs/tabfs-wrapper b/fs/tabfs-wrapper new file mode 100755 index 0000000..9116a52 --- /dev/null +++ b/fs/tabfs-wrapper @@ -0,0 +1,28 @@ +#! /bin/sh +set -efu + +# allow wrapper to find tabfs executable +PATH=$(dirname "$0")${PATH:+:$PATH} + +pgrep tabfs | grep -v ^$$\$ | xargs kill -9 2>/dev/null || : + +OS=$(uname -s) +case $OS in +  Darwin) +    diskutil umount force mnt >/dev/null || : +    extraArgs= +    ;; +  FreeBSD) +    umount -f mnt 2>/dev/null || : +    extraArgs= +    ;; +  Linux) +    fusermount -u mnt 2>/dev/null || : +    extraArgs=-oauto_unmount +    ;; +  *) +    echo "tabfs-wrapper: error: unknown OS: $OS" >&2 +    exit 2 +esac + +exec tabfs -f $extraArgs -odirect_io mnt @@ -460,28 +460,6 @@ static const struct fuse_operations tabfs_oper = {  };  int main(int argc, char **argv) { -    (void)argc; -    if (NULL == getenv("TABFS_MOUNT_DIR")) { -        setenv("TABFS_MOUNT_DIR", "mnt", 1); -    } - -    freopen("log.txt", "a", stderr); -    setvbuf(stderr, NULL, _IONBF, 0); - -    char killcmd[128]; -    sprintf(killcmd, "pgrep tabfs | grep -v %d | xargs kill -9 2>/dev/null", getpid()); -    system(killcmd); - -#if defined(__APPLE__) -    system("diskutil umount force \"$TABFS_MOUNT_DIR\" >/dev/null"); -#elif defined(__FreeBSD__) -    system("umount -f \"$TABFS_MOUNT_DIR\" 2>/dev/null"); -#else -    system("fusermount -u \"$TABFS_MOUNT_DIR\" 2>/dev/null"); -#endif - -    system("mkdir -p \"$TABFS_MOUNT_DIR\""); -      pthread_t thread;      int err = pthread_create(&thread, NULL, reader_main, NULL);      if (err != 0) { @@ -491,21 +469,5 @@ int main(int argc, char **argv) {      pthread_detach(thread); -    char *fuse_argv[] = { -        argv[0], -        "-f", -#if !defined(__APPLE__) -#if !defined(__FreeBSD__) -        "-oauto_unmount", -#endif -#endif -        "-odirect_io", -        getenv("TABFS_MOUNT_DIR"), -        NULL, -    }; -    return fuse_main( -        (sizeof(fuse_argv)/sizeof(*fuse_argv))-1, -        (char **)&fuse_argv, -        &tabfs_oper, -        NULL); +    return fuse_main(argc, argv, &tabfs_oper, NULL);  } | 
