*************** *** 27,33 **** # define FUSE_CONTEXT_PRE # define FUSE_CONTEXT_POST #endif - #include #undef DEBUGf #if 0 --- 27,34 ---- # define FUSE_CONTEXT_PRE # define FUSE_CONTEXT_POST #endif + #define FUSE_USE_VERSION 21 + #include #undef DEBUGf #if 0 *************** *** 119,125 **** return rv; } - int _PLfuse_getdir(const char *file, fuse_dirh_t dirh, fuse_dirfil_t dirfil) { int prv, rv; FUSE_CONTEXT_PRE; dSP; --- 118,124 ---- return rv; } + int _PLfuse_getdir(const char *file, fuse_dirh_t dirh, fuse_dirfil_t dirfil ) { int prv, rv; FUSE_CONTEXT_PRE; dSP; *************** *** 455,462 **** int _PLfuse_open (const char *file, int flags) { int rv; - SV *rvsv; - char *rvstr; FUSE_CONTEXT_PRE; dSP; DEBUGf("open begin\n"); --- 432,437 ---- int _PLfuse_open (const char *file, int flags) { int rv; FUSE_CONTEXT_PRE; dSP; DEBUGf("open begin\n"); *************** *** 556,564 **** #define _fuse_statvfs statvfs #endif int _PLfuse_statfs (const char *file, struct _fuse_statvfs *st) { - int rv; - char *rvstr; FUSE_CONTEXT_PRE; dSP; DEBUGf("statfs begin\n"); --- 529,535 ---- #define _fuse_statvfs statvfs #endif int _PLfuse_statfs (const char *file, struct _fuse_statvfs *st) { int rv; FUSE_CONTEXT_PRE; dSP; DEBUGf("statfs begin\n"); *************** *** 845,851 **** int _PLfuse_getxattr (const char *file, const char *name, char *buf, size_t buflen) { int rv; - char *rvstr; FUSE_CONTEXT_PRE; dSP; DEBUGf("getxattr begin\n"); --- 812,817 ---- int _PLfuse_getxattr (const char *file, const char *name, char *buf, size_t buflen) { int rv; FUSE_CONTEXT_PRE; dSP; DEBUGf("getxattr begin\n"); *************** *** 890,896 **** int _PLfuse_listxattr (const char *file, char *list, size_t size) { int prv, rv; - char *rvstr; FUSE_CONTEXT_PRE; dSP; DEBUGf("listxattr begin\n"); --- 856,861 ---- int _PLfuse_listxattr (const char *file, char *list, size_t size) { int prv, rv; FUSE_CONTEXT_PRE; dSP; DEBUGf("listxattr begin\n"); *************** *** 908,914 **** char *p = list; int spc = size; int total_len = 0; - int i; rv = POPi; prv--; --- 873,878 ---- char *p = list; int spc = size; int total_len = 0; rv = POPi; prv--; *************** *** 957,963 **** int _PLfuse_removexattr (const char *file, const char *name) { int rv; - char *rvstr; FUSE_CONTEXT_PRE; dSP; DEBUGf("removexattr begin\n"); --- 921,926 ---- int _PLfuse_removexattr (const char *file, const char *name) { int rv; FUSE_CONTEXT_PRE; dSP; DEBUGf("removexattr begin\n"); *************** *** 1018,1028 **** struct fuse_operations fops = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}; - int i, fd, varnum = 0, debug, threaded, have_mnt; char *mountpoint; char *mountopts; - STRLEN n_a; - STRLEN l; INIT: if(items != 29) { fprintf(stderr,"Perl<->C inconsistency or internal error\n"); --- 981,989 ---- struct fuse_operations fops = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}; + int i, fd, debug, threaded; char *mountpoint; char *mountopts; INIT: if(items != 29) { fprintf(stderr,"Perl<->C inconsistency or internal error\n"); *************** *** 1066,1072 **** fd = fuse_mount(mountpoint,mountopts); if(fd < 0) croak("could not mount fuse filesystem!"); if(threaded) { fuse_loop_mt(fuse_new(fd,debug ? "debug" : NULL,&fops)); } else fuse_loop(fuse_new(fd,debug ? "debug" : NULL,&fops)); --- 1027,1044 ---- fd = fuse_mount(mountpoint,mountopts); if(fd < 0) croak("could not mount fuse filesystem!"); + /*--w: borrowed from fuse/lib/helper.c >> */ + if (!debug) { + if (daemon(0, 0) == -1) + croak("failed to daemonize program!"); + } else { + /* Ensure consistent behaviour across debug and normal modes */ + if (chdir("/") == -1) + croak("failed to change working directory to /"); + } + /*--w << */ if(threaded) { fuse_loop_mt(fuse_new(fd,debug ? "debug" : NULL,&fops)); } else fuse_loop(fuse_new(fd,debug ? "debug" : NULL,&fops)); + /* */