use mount_fusefs on FreeBSD to get fuse version
[perl-fuse.git] / Fuse.xs
diff --git a/Fuse.xs b/Fuse.xs
index c5d0653..43b62f0 100644 (file)
--- a/Fuse.xs
+++ b/Fuse.xs
@@ -17,14 +17,14 @@ static inline void create_perl_context() {
                }
        }
 }
-#  define FUSE_CONTEXT_PRE create_perl_context(); {
+#  define FUSE_CONTEXT_PRE create_perl_context(); { dSP
 #  define FUSE_CONTEXT_POST }
 #  define FUSE_USE_ITHREADS
 # else
 #  error "Sorry, I don't know how to handle ithreads on this architecture."
 # endif
 #else
-# define FUSE_CONTEXT_PRE
+# define FUSE_CONTEXT_PRE dSP
 # define FUSE_CONTEXT_POST
 #endif
 #include <fuse.h>
@@ -40,9 +40,8 @@ static inline void create_perl_context() {
 SV *_PLfuse_callbacks[N_CALLBACKS];
 
 int _PLfuse_getattr(const char *file, struct stat *result) {
-       int rv, statcount;
+       int rv;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("getattr begin: %s\n",file);
        ENTER;
        SAVETMPS;
@@ -71,7 +70,7 @@ int _PLfuse_getattr(const char *file, struct stat *result) {
                result->st_uid = POPi;
                result->st_nlink = POPi;
                result->st_mode = POPi;
-               /*result->st_ino =*/ POPi;
+               result->st_ino   = POPi;
                result->st_dev = POPi;
                rv = 0;
        }
@@ -85,10 +84,7 @@ int _PLfuse_getattr(const char *file, struct stat *result) {
 
 int _PLfuse_readlink(const char *file,char *buf,size_t buflen) {
        int rv;
-       char *rvstr;
-       I32 ax;
        FUSE_CONTEXT_PRE;
-       dSP;
        if(buflen < 1)
                return EINVAL;
        DEBUGf("readlink begin\n");
@@ -129,7 +125,6 @@ int _PLfuse_readlink(const char *file,char *buf,size_t buflen) {
 int _PLfuse_getdir(const char *file, fuse_dirh_t dirh, fuse_dirfil_t dirfil) {
        int prv, rv;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("getdir begin\n");
        ENTER;
        SAVETMPS;
@@ -156,10 +151,7 @@ int _PLfuse_getdir(const char *file, fuse_dirh_t dirh, fuse_dirfil_t dirfil) {
 
 int _PLfuse_mknod (const char *file, mode_t mode, dev_t dev) {
        int rv;
-       SV *rvsv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("mknod begin\n");
        ENTER;
        SAVETMPS;
@@ -184,10 +176,7 @@ int _PLfuse_mknod (const char *file, mode_t mode, dev_t dev) {
 
 int _PLfuse_mkdir (const char *file, mode_t mode) {
        int rv;
-       SV *rvsv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("mkdir begin\n");
        ENTER;
        SAVETMPS;
@@ -212,10 +201,7 @@ int _PLfuse_mkdir (const char *file, mode_t mode) {
 
 int _PLfuse_unlink (const char *file) {
        int rv;
-       SV *rvsv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("unlink begin\n");
        ENTER;
        SAVETMPS;
@@ -238,10 +224,7 @@ int _PLfuse_unlink (const char *file) {
 
 int _PLfuse_rmdir (const char *file) {
        int rv;
-       SV *rvsv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("rmdir begin\n");
        ENTER;
        SAVETMPS;
@@ -264,10 +247,7 @@ int _PLfuse_rmdir (const char *file) {
 
 int _PLfuse_symlink (const char *file, const char *new) {
        int rv;
-       SV *rvsv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("symlink begin\n");
        ENTER;
        SAVETMPS;
@@ -291,10 +271,7 @@ int _PLfuse_symlink (const char *file, const char *new) {
 
 int _PLfuse_rename (const char *file, const char *new) {
        int rv;
-       SV *rvsv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("rename begin\n");
        ENTER;
        SAVETMPS;
@@ -318,10 +295,7 @@ int _PLfuse_rename (const char *file, const char *new) {
 
 int _PLfuse_link (const char *file, const char *new) {
        int rv;
-       SV *rvsv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("link begin\n");
        ENTER;
        SAVETMPS;
@@ -345,10 +319,7 @@ int _PLfuse_link (const char *file, const char *new) {
 
 int _PLfuse_chmod (const char *file, mode_t mode) {
        int rv;
-       SV *rvsv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("chmod begin\n");
        ENTER;
        SAVETMPS;
@@ -372,10 +343,7 @@ int _PLfuse_chmod (const char *file, mode_t mode) {
 
 int _PLfuse_chown (const char *file, uid_t uid, gid_t gid) {
        int rv;
-       SV *rvsv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("chown begin\n");
        ENTER;
        SAVETMPS;
@@ -400,10 +368,7 @@ int _PLfuse_chown (const char *file, uid_t uid, gid_t gid) {
 
 int _PLfuse_truncate (const char *file, off_t off) {
        int rv;
-       SV *rvsv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("truncate begin\n");
        ENTER;
        SAVETMPS;
@@ -427,10 +392,7 @@ int _PLfuse_truncate (const char *file, off_t off) {
 
 int _PLfuse_utime (const char *file, struct utimbuf *uti) {
        int rv;
-       SV *rvsv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("utime begin\n");
        ENTER;
        SAVETMPS;
@@ -455,11 +417,8 @@ int _PLfuse_utime (const char *file, struct utimbuf *uti) {
 
 int _PLfuse_open (const char *file, struct fuse_file_info *fi) {
        int rv;
-       SV *rvsv;
-       char *rvstr;
        int flags = fi->flags;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("open begin\n");
        ENTER;
        SAVETMPS;
@@ -483,9 +442,7 @@ int _PLfuse_open (const char *file, struct fuse_file_info *fi) {
 
 int _PLfuse_read (const char *file, char *buf, size_t buflen, off_t off, struct fuse_file_info *fi) {
        int rv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("read begin\n");
        ENTER;
        SAVETMPS;
@@ -524,9 +481,7 @@ int _PLfuse_read (const char *file, char *buf, size_t buflen, off_t off, struct
 
 int _PLfuse_write (const char *file, const char *buf, size_t buflen, off_t off, struct fuse_file_info *fi) {
        int rv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("write begin\n");
        ENTER;
        SAVETMPS;
@@ -551,9 +506,7 @@ int _PLfuse_write (const char *file, const char *buf, size_t buflen, off_t off,
 
 int _PLfuse_statfs (const char *file, struct statvfs *st) {
        int rv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("statfs begin\n");
        ENTER;
        SAVETMPS;
@@ -598,9 +551,7 @@ int _PLfuse_statfs (const char *file, struct statvfs *st) {
 
 int _PLfuse_flush (const char *file, struct fuse_file_info *fi) {
        int rv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("flush begin\n");
        ENTER;
        SAVETMPS;
@@ -623,10 +574,8 @@ int _PLfuse_flush (const char *file, struct fuse_file_info *fi) {
 
 int _PLfuse_release (const char *file, struct fuse_file_info *fi) {
        int rv;
-       char *rvstr;
        int flags = fi->flags;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("release begin\n");
        ENTER;
        SAVETMPS;
@@ -650,10 +599,8 @@ int _PLfuse_release (const char *file, struct fuse_file_info *fi) {
 
 int _PLfuse_fsync (const char *file, int datasync, struct fuse_file_info *fi) {
        int rv;
-       char *rvstr;
        int flags = fi->flags;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("fsync begin\n");
        ENTER;
        SAVETMPS;
@@ -677,9 +624,7 @@ int _PLfuse_fsync (const char *file, int datasync, struct fuse_file_info *fi) {
 
 int _PLfuse_setxattr (const char *file, const char *name, const char *buf, size_t buflen, int flags) {
        int rv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("setxattr begin\n");
        ENTER;
        SAVETMPS;
@@ -705,9 +650,7 @@ int _PLfuse_setxattr (const char *file, const char *name, const char *buf, size_
 
 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");
        ENTER;
        SAVETMPS;
@@ -750,9 +693,7 @@ int _PLfuse_getxattr (const char *file, const char *name, char *buf, size_t bufl
 
 int _PLfuse_listxattr (const char *file, char *list, size_t size) {
        int prv, rv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("listxattr begin\n");
        ENTER;
        SAVETMPS;
@@ -768,7 +709,6 @@ int _PLfuse_listxattr (const char *file, char *list, size_t size) {
                char *p = list;
                int spc = size;
                int total_len = 0;
-               int i;
 
                rv = POPi;
                prv--;
@@ -817,9 +757,7 @@ int _PLfuse_listxattr (const char *file, char *list, size_t size) {
 
 int _PLfuse_removexattr (const char *file, const char *name) {
        int rv;
-       char *rvstr;
        FUSE_CONTEXT_PRE;
-       dSP;
        DEBUGf("removexattr begin\n");
        ENTER;
        SAVETMPS;
@@ -881,13 +819,11 @@ perl_fuse_main(...)
        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;
+       int i, fd, debug, threaded;
        char *mountpoint;
        char *mountopts;
        struct fuse_args margs = FUSE_ARGS_INIT(0, NULL);
        struct fuse_args fargs = FUSE_ARGS_INIT(0, NULL);
-       STRLEN n_a;
-       STRLEN l;
        INIT:
        if(items != 29) {
                fprintf(stderr,"Perl<->C inconsistency or internal error\n");
@@ -955,7 +891,7 @@ perl_fuse_main(...)
        }
 
        if(threaded) {
-               fuse_loop_mt(fuse_new(fd,&fargs,&fops,sizeof(fops)/sizeof(void*)));
+               fuse_loop_mt(fuse_new(fd,&fargs,&fops,sizeof(fops)));
        } else
-               fuse_loop(fuse_new(fd,&fargs,&fops,sizeof(fops)/sizeof(void*)));
+               fuse_loop(fuse_new(fd,&fargs,&fops,sizeof(fops)));
        fuse_opt_free_args(&fargs);