/[fuse.before_github]/perl-llin/Fuse.xs
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /perl-llin/Fuse.xs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 28 by dpavlin, Mon Jan 2 22:39:32 2006 UTC revision 123 by dpavlin, Wed Mar 19 19:40:20 2008 UTC
# Line 17  static inline void create_perl_context() Line 17  static inline void create_perl_context()
17                  }                  }
18          }          }
19  }  }
20  #  define FUSE_CONTEXT_PRE create_perl_context(); {  #  define FUSE_CONTEXT_PRE create_perl_context(); { dSP
21  #  define FUSE_CONTEXT_POST }  #  define FUSE_CONTEXT_POST }
22  #  define FUSE_USE_ITHREADS  #  define FUSE_USE_ITHREADS
23  # else  # else
24  #  error "Sorry, I don't know how to handle ithreads on this architecture."  #  error "Sorry, I don't know how to handle ithreads on this architecture."
25  # endif  # endif
26  #else  #else
27  # define FUSE_CONTEXT_PRE  # define FUSE_CONTEXT_PRE dSP
28  # define FUSE_CONTEXT_POST  # define FUSE_CONTEXT_POST
29  #endif  #endif
30  #include <fuse/fuse.h>  #include <fuse.h>
31    
32  #undef DEBUGf  #undef DEBUGf
33  #if 1  #if 0
34  #define DEBUGf(f, a...) fprintf(stderr, "%s:%d (%i): " f,__BASE_FILE__,__LINE__,sp-PL_stack_base ,##a )  #define DEBUGf(f, a...) fprintf(stderr, "%s:%d (%i): " f,__BASE_FILE__,__LINE__,sp-PL_stack_base ,##a )
35  #else  #else
36  #define DEBUGf(a...)  #define DEBUGf(a...)
# Line 40  static inline void create_perl_context() Line 40  static inline void create_perl_context()
40  SV *_PLfuse_callbacks[N_CALLBACKS];  SV *_PLfuse_callbacks[N_CALLBACKS];
41    
42  int _PLfuse_getattr(const char *file, struct stat *result) {  int _PLfuse_getattr(const char *file, struct stat *result) {
43          int rv, statcount;          int rv;
44          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
45          DEBUGf("getattr begin: %s\n",file);          DEBUGf("getattr begin: %s\n",file);
46          ENTER;          ENTER;
47          SAVETMPS;          SAVETMPS;
# Line 65  int _PLfuse_getattr(const char *file, st Line 64  int _PLfuse_getattr(const char *file, st
64                  result->st_ctime = POPi;                  result->st_ctime = POPi;
65                  result->st_mtime = POPi;                  result->st_mtime = POPi;
66                  result->st_atime = POPi;                  result->st_atime = POPi;
67                  result->st_size = POPi;                  result->st_size = POPn; // we pop double here to support files larger than 4Gb (long limit)
68                  result->st_rdev = POPi;                  result->st_rdev = POPi;
69                  result->st_gid = POPi;                  result->st_gid = POPi;
70                  result->st_uid = POPi;                  result->st_uid = POPi;
71                  result->st_nlink = POPi;                  result->st_nlink = POPi;
72                  result->st_mode = POPi;                  result->st_mode = POPi;
73                  /*result->st_ino =*/ POPi;                  result->st_ino   = POPi;
74                  result->st_dev = POPi;                  result->st_dev = POPi;
75                  rv = 0;                  rv = 0;
76          }          }
# Line 85  int _PLfuse_getattr(const char *file, st Line 84  int _PLfuse_getattr(const char *file, st
84    
85  int _PLfuse_readlink(const char *file,char *buf,size_t buflen) {  int _PLfuse_readlink(const char *file,char *buf,size_t buflen) {
86          int rv;          int rv;
         char *rvstr;  
         I32 ax;  
87          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
88          if(buflen < 1)          if(buflen < 1)
89                  return EINVAL;                  return EINVAL;
90          DEBUGf("readlink begin\n");          DEBUGf("readlink begin\n");
# Line 119  int _PLfuse_readlink(const char *file,ch Line 115  int _PLfuse_readlink(const char *file,ch
115          return rv;          return rv;
116  }  }
117    
118    #if 0
119    /*
120     * This doesn't yet work... we alwas get ENOSYS when trying to use readdir().
121     * Well, of course, getdir() is fine as well.
122     */
123     int _PLfuse_readdir(const char *file, void *dirh, fuse_fill_dir_t dirfil, off_t off, struct fuse_file_info *fi) {
124    #endif
125  int _PLfuse_getdir(const char *file, fuse_dirh_t dirh, fuse_dirfil_t dirfil) {  int _PLfuse_getdir(const char *file, fuse_dirh_t dirh, fuse_dirfil_t dirfil) {
126          int prv, rv;          int prv, rv;
127          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
128          DEBUGf("getdir begin\n");          DEBUGf("getdir begin\n");
129          ENTER;          ENTER;
130          SAVETMPS;          SAVETMPS;
# Line 134  int _PLfuse_getdir(const char *file, fus Line 136  int _PLfuse_getdir(const char *file, fus
136          if(prv) {          if(prv) {
137                  rv = POPi;                  rv = POPi;
138                  while(--prv)                  while(--prv)
139                          dirfil(dirh,POPp,0);                          dirfil(dirh,POPp,0,0);
140          } else {          } else {
141                  fprintf(stderr,"getdir() handler returned nothing!\n");                  fprintf(stderr,"getdir() handler returned nothing!\n");
142                  rv = -ENOSYS;                  rv = -ENOSYS;
# Line 149  int _PLfuse_getdir(const char *file, fus Line 151  int _PLfuse_getdir(const char *file, fus
151    
152  int _PLfuse_mknod (const char *file, mode_t mode, dev_t dev) {  int _PLfuse_mknod (const char *file, mode_t mode, dev_t dev) {
153          int rv;          int rv;
         SV *rvsv;  
         char *rvstr;  
154          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
155          DEBUGf("mknod begin\n");          DEBUGf("mknod begin\n");
156          ENTER;          ENTER;
157          SAVETMPS;          SAVETMPS;
# Line 177  int _PLfuse_mknod (const char *file, mod Line 176  int _PLfuse_mknod (const char *file, mod
176    
177  int _PLfuse_mkdir (const char *file, mode_t mode) {  int _PLfuse_mkdir (const char *file, mode_t mode) {
178          int rv;          int rv;
         SV *rvsv;  
         char *rvstr;  
179          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
180          DEBUGf("mkdir begin\n");          DEBUGf("mkdir begin\n");
181          ENTER;          ENTER;
182          SAVETMPS;          SAVETMPS;
# Line 205  int _PLfuse_mkdir (const char *file, mod Line 201  int _PLfuse_mkdir (const char *file, mod
201    
202  int _PLfuse_unlink (const char *file) {  int _PLfuse_unlink (const char *file) {
203          int rv;          int rv;
         SV *rvsv;  
         char *rvstr;  
204          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
205          DEBUGf("unlink begin\n");          DEBUGf("unlink begin\n");
206          ENTER;          ENTER;
207          SAVETMPS;          SAVETMPS;
# Line 231  int _PLfuse_unlink (const char *file) { Line 224  int _PLfuse_unlink (const char *file) {
224    
225  int _PLfuse_rmdir (const char *file) {  int _PLfuse_rmdir (const char *file) {
226          int rv;          int rv;
         SV *rvsv;  
         char *rvstr;  
227          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
228          DEBUGf("rmdir begin\n");          DEBUGf("rmdir begin\n");
229          ENTER;          ENTER;
230          SAVETMPS;          SAVETMPS;
# Line 257  int _PLfuse_rmdir (const char *file) { Line 247  int _PLfuse_rmdir (const char *file) {
247    
248  int _PLfuse_symlink (const char *file, const char *new) {  int _PLfuse_symlink (const char *file, const char *new) {
249          int rv;          int rv;
         SV *rvsv;  
         char *rvstr;  
250          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
251          DEBUGf("symlink begin\n");          DEBUGf("symlink begin\n");
252          ENTER;          ENTER;
253          SAVETMPS;          SAVETMPS;
# Line 284  int _PLfuse_symlink (const char *file, c Line 271  int _PLfuse_symlink (const char *file, c
271    
272  int _PLfuse_rename (const char *file, const char *new) {  int _PLfuse_rename (const char *file, const char *new) {
273          int rv;          int rv;
         SV *rvsv;  
         char *rvstr;  
274          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
275          DEBUGf("rename begin\n");          DEBUGf("rename begin\n");
276          ENTER;          ENTER;
277          SAVETMPS;          SAVETMPS;
# Line 311  int _PLfuse_rename (const char *file, co Line 295  int _PLfuse_rename (const char *file, co
295    
296  int _PLfuse_link (const char *file, const char *new) {  int _PLfuse_link (const char *file, const char *new) {
297          int rv;          int rv;
         SV *rvsv;  
         char *rvstr;  
298          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
299          DEBUGf("link begin\n");          DEBUGf("link begin\n");
300          ENTER;          ENTER;
301          SAVETMPS;          SAVETMPS;
# Line 338  int _PLfuse_link (const char *file, cons Line 319  int _PLfuse_link (const char *file, cons
319    
320  int _PLfuse_chmod (const char *file, mode_t mode) {  int _PLfuse_chmod (const char *file, mode_t mode) {
321          int rv;          int rv;
         SV *rvsv;  
         char *rvstr;  
322          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
323          DEBUGf("chmod begin\n");          DEBUGf("chmod begin\n");
324          ENTER;          ENTER;
325          SAVETMPS;          SAVETMPS;
# Line 365  int _PLfuse_chmod (const char *file, mod Line 343  int _PLfuse_chmod (const char *file, mod
343    
344  int _PLfuse_chown (const char *file, uid_t uid, gid_t gid) {  int _PLfuse_chown (const char *file, uid_t uid, gid_t gid) {
345          int rv;          int rv;
         SV *rvsv;  
         char *rvstr;  
346          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
347          DEBUGf("chown begin\n");          DEBUGf("chown begin\n");
348          ENTER;          ENTER;
349          SAVETMPS;          SAVETMPS;
# Line 393  int _PLfuse_chown (const char *file, uid Line 368  int _PLfuse_chown (const char *file, uid
368    
369  int _PLfuse_truncate (const char *file, off_t off) {  int _PLfuse_truncate (const char *file, off_t off) {
370          int rv;          int rv;
         SV *rvsv;  
         char *rvstr;  
371          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
372          DEBUGf("truncate begin\n");          DEBUGf("truncate begin\n");
373          ENTER;          ENTER;
374          SAVETMPS;          SAVETMPS;
# Line 420  int _PLfuse_truncate (const char *file, Line 392  int _PLfuse_truncate (const char *file,
392    
393  int _PLfuse_utime (const char *file, struct utimbuf *uti) {  int _PLfuse_utime (const char *file, struct utimbuf *uti) {
394          int rv;          int rv;
         SV *rvsv;  
         char *rvstr;  
395          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
396          DEBUGf("utime begin\n");          DEBUGf("utime begin\n");
397          ENTER;          ENTER;
398          SAVETMPS;          SAVETMPS;
# Line 446  int _PLfuse_utime (const char *file, str Line 415  int _PLfuse_utime (const char *file, str
415          return rv;          return rv;
416  }  }
417    
418  int _PLfuse_open (const char *file, int flags) {  int _PLfuse_open (const char *file, struct fuse_file_info *fi) {
419          int rv;          int rv;
420          SV *rvsv;          int flags = fi->flags;
         char *rvstr;  
421          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
422          DEBUGf("open begin\n");          DEBUGf("open begin\n");
423          ENTER;          ENTER;
424          SAVETMPS;          SAVETMPS;
# Line 473  int _PLfuse_open (const char *file, int Line 440  int _PLfuse_open (const char *file, int
440          return rv;          return rv;
441  }  }
442    
443  int _PLfuse_read (const char *file, char *buf, size_t buflen, off_t off) {  int _PLfuse_read (const char *file, char *buf, size_t buflen, off_t off, struct fuse_file_info *fi) {
444          int rv;          int rv;
         char *rvstr;  
445          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
446          DEBUGf("read begin\n");          DEBUGf("read begin\n");
447          ENTER;          ENTER;
448          SAVETMPS;          SAVETMPS;
# Line 514  int _PLfuse_read (const char *file, char Line 479  int _PLfuse_read (const char *file, char
479          return rv;          return rv;
480  }  }
481    
482  int _PLfuse_write (const char *file, const char *buf, size_t buflen, off_t off) {  int _PLfuse_write (const char *file, const char *buf, size_t buflen, off_t off, struct fuse_file_info *fi) {
483          int rv;          int rv;
         char *rvstr;  
484          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
485          DEBUGf("write begin\n");          DEBUGf("write begin\n");
486          ENTER;          ENTER;
487          SAVETMPS;          SAVETMPS;
# Line 541  int _PLfuse_write (const char *file, con Line 504  int _PLfuse_write (const char *file, con
504          return rv;          return rv;
505  }  }
506    
 /* FIXME check for old fuse API (< 21?) and use statfs here */  
507  int _PLfuse_statfs (const char *file, struct statvfs *st) {  int _PLfuse_statfs (const char *file, struct statvfs *st) {
508          int rv;          int rv;
         char *rvstr;  
509          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
510          DEBUGf("statfs begin\n");          DEBUGf("statfs begin\n");
511          ENTER;          ENTER;
512          SAVETMPS;          SAVETMPS;
# Line 556  int _PLfuse_statfs (const char *file, st Line 516  int _PLfuse_statfs (const char *file, st
516          SPAGAIN;          SPAGAIN;
517          DEBUGf("statfs got %i params\n",rv);          DEBUGf("statfs got %i params\n",rv);
518          if(rv == 6 || rv == 7) {          if(rv == 6 || rv == 7) {
519                  st->f_bsize    = POPi;                  st->f_bsize     = POPi;
520                  st->f_bfree = st->f_bavail = POPi;                  st->f_bfree     = POPi;
521                  st->f_blocks   = POPi;                  st->f_blocks    = POPi;
522                  st->f_ffree = st->f_favail  = POPi;                  st->f_ffree     = POPi;
523                  st->f_files    = POPi;                  st->f_files     = POPi;
524                  st->f_namemax  = POPi;                  st->f_namemax   = POPi;
525                  /* zero all other */                  /* zero and fill-in other */
                 st->f_frsize = 4096;  
526                  st->f_fsid = 0;                  st->f_fsid = 0;
527                    st->f_frsize = 4096;
528                  st->f_flag = 0;                  st->f_flag = 0;
529                    st->f_bavail = st->f_bfree;
530                    st->f_favail = st->f_ffree;
531    
532                  if(rv == 7)                  if(rv == 7)
533                          rv = POPi;                          rv = POPi;
# Line 587  int _PLfuse_statfs (const char *file, st Line 549  int _PLfuse_statfs (const char *file, st
549          return rv;          return rv;
550  }  }
551    
552  int _PLfuse_flush (const char *file) {  int _PLfuse_flush (const char *file, struct fuse_file_info *fi) {
553          int rv;          int rv;
         char *rvstr;  
554          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
555          DEBUGf("flush begin\n");          DEBUGf("flush begin\n");
556          ENTER;          ENTER;
557          SAVETMPS;          SAVETMPS;
# Line 612  int _PLfuse_flush (const char *file) { Line 572  int _PLfuse_flush (const char *file) {
572          return rv;          return rv;
573  }  }
574    
575  int _PLfuse_release (const char *file, int flags) {  int _PLfuse_release (const char *file, struct fuse_file_info *fi) {
576          int rv;          int rv;
577          char *rvstr;          int flags = fi->flags;
578          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
579          DEBUGf("release begin\n");          DEBUGf("release begin\n");
580          ENTER;          ENTER;
581          SAVETMPS;          SAVETMPS;
# Line 638  int _PLfuse_release (const char *file, i Line 597  int _PLfuse_release (const char *file, i
597          return rv;          return rv;
598  }  }
599    
600  int _PLfuse_fsync (const char *file, int flags) {  int _PLfuse_fsync (const char *file, int datasync, struct fuse_file_info *fi) {
601          int rv;          int rv;
602          char *rvstr;          int flags = fi->flags;
603          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
604          DEBUGf("fsync begin\n");          DEBUGf("fsync begin\n");
605          ENTER;          ENTER;
606          SAVETMPS;          SAVETMPS;
# Line 666  int _PLfuse_fsync (const char *file, int Line 624  int _PLfuse_fsync (const char *file, int
624    
625  int _PLfuse_setxattr (const char *file, const char *name, const char *buf, size_t buflen, int flags) {  int _PLfuse_setxattr (const char *file, const char *name, const char *buf, size_t buflen, int flags) {
626          int rv;          int rv;
         char *rvstr;  
627          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
628          DEBUGf("setxattr begin\n");          DEBUGf("setxattr begin\n");
629          ENTER;          ENTER;
630          SAVETMPS;          SAVETMPS;
# Line 694  int _PLfuse_setxattr (const char *file, Line 650  int _PLfuse_setxattr (const char *file,
650    
651  int _PLfuse_getxattr (const char *file, const char *name, char *buf, size_t buflen) {  int _PLfuse_getxattr (const char *file, const char *name, char *buf, size_t buflen) {
652          int rv;          int rv;
         char *rvstr;  
653          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
654          DEBUGf("getxattr begin\n");          DEBUGf("getxattr begin\n");
655          ENTER;          ENTER;
656          SAVETMPS;          SAVETMPS;
# Line 739  int _PLfuse_getxattr (const char *file, Line 693  int _PLfuse_getxattr (const char *file,
693    
694  int _PLfuse_listxattr (const char *file, char *list, size_t size) {  int _PLfuse_listxattr (const char *file, char *list, size_t size) {
695          int prv, rv;          int prv, rv;
         char *rvstr;  
696          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
697          DEBUGf("listxattr begin\n");          DEBUGf("listxattr begin\n");
698          ENTER;          ENTER;
699          SAVETMPS;          SAVETMPS;
# Line 757  int _PLfuse_listxattr (const char *file, Line 709  int _PLfuse_listxattr (const char *file,
709                  char *p = list;                  char *p = list;
710                  int spc = size;                  int spc = size;
711                  int total_len = 0;                  int total_len = 0;
                 int i;  
712    
713                  rv = POPi;                  rv = POPi;
714                  prv--;                  prv--;
# Line 806  int _PLfuse_listxattr (const char *file, Line 757  int _PLfuse_listxattr (const char *file,
757    
758  int _PLfuse_removexattr (const char *file, const char *name) {  int _PLfuse_removexattr (const char *file, const char *name) {
759          int rv;          int rv;
         char *rvstr;  
760          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
761          DEBUGf("removexattr begin\n");          DEBUGf("removexattr begin\n");
762          ENTER;          ENTER;
763          SAVETMPS;          SAVETMPS;
# Line 834  struct fuse_operations _available_ops = Line 783  struct fuse_operations _available_ops =
783  getattr:                _PLfuse_getattr,  getattr:                _PLfuse_getattr,
784  readlink:               _PLfuse_readlink,  readlink:               _PLfuse_readlink,
785  getdir:                 _PLfuse_getdir,  getdir:                 _PLfuse_getdir,
786    #if 0
787    readdir:                _PLfuse_readdir,
788    #endif
789  mknod:                  _PLfuse_mknod,  mknod:                  _PLfuse_mknod,
790  mkdir:                  _PLfuse_mkdir,  mkdir:                  _PLfuse_mkdir,
791  unlink:                 _PLfuse_unlink,  unlink:                 _PLfuse_unlink,
# Line 861  removexattr:           _PLfuse_removexattr, Line 813  removexattr:           _PLfuse_removexattr,
813  MODULE = Fuse           PACKAGE = Fuse  MODULE = Fuse           PACKAGE = Fuse
814  PROTOTYPES: DISABLE  PROTOTYPES: DISABLE
815    
816    SV*
817    fuse_get_context()
818            PREINIT:
819            struct fuse_context *fc;
820            CODE:
821            fc = fuse_get_context();
822            if(fc) {
823                    HV *hash = newHV();
824                    hv_store(hash, "uid", 3, newSViv(fc->uid), 0);
825                    hv_store(hash, "gid", 3, newSViv(fc->gid), 0);
826                    hv_store(hash, "pid", 3, newSViv(fc->pid), 0);
827                    RETVAL = newRV_noinc((SV*)hash);
828            } else {
829                    XSRETURN_UNDEF;
830            }
831            OUTPUT:
832            RETVAL
833    
834  void  void
835  perl_fuse_main(...)  perl_fuse_main(...)
836          PREINIT:          PREINIT:
837          struct fuse_operations fops =          struct fuse_operations fops =
838                  {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,NULL,
839                   NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};                   NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
840          int i, fd, varnum = 0, debug, threaded, have_mnt;          int i, fd, debug, threaded;
841          char *mountpoint;          char *mountpoint;
842          char *mountopts;          char *mountopts;
843          STRLEN n_a;          struct fuse_args margs = FUSE_ARGS_INIT(0, NULL);
844          STRLEN l;          struct fuse_args fargs = FUSE_ARGS_INIT(0, NULL);
845          INIT:          INIT:
846          if(items != 29) {          if(items != 29) {
847                  fprintf(stderr,"Perl<->C inconsistency or internal error\n");                  fprintf(stderr,"Perl<->C inconsistency or internal error\n");
# Line 882  perl_fuse_main(...) Line 852  perl_fuse_main(...)
852          threaded = SvIV(ST(1));          threaded = SvIV(ST(1));
853          if(threaded) {          if(threaded) {
854  #ifdef FUSE_USE_ITHREADS  #ifdef FUSE_USE_ITHREADS
855                  master_interp = PERL_GET_INTERP;                  master_interp = PERL_GET_CONTEXT;
856  #else  #else
857                  fprintf(stderr,"FUSE warning: Your script has requested multithreaded "                  fprintf(stderr,"FUSE warning: Your script has requested multithreaded "
858                                 "mode, but your perl was not built with -Dusethreads.  "                                 "mode, but your perl was not built with -Dusethreads.  "
# Line 911  perl_fuse_main(...) Line 881  perl_fuse_main(...)
881                                i+4,SvPVbyte_nolen(var));                                i+4,SvPVbyte_nolen(var));
882                  }                  }
883          }          }
884          /* FIXME: need to pass fusermount arguments */          /*
885          fd = fuse_mount(mountpoint,mountopts);           * XXX: What comes here is just a ridiculous use of the option parsing API
886             * to hack on compatibility with other parts of the new API. First and
887             * foremost, real C argc/argv would be good to get at...
888             */
889            if (mountopts &&
890                (fuse_opt_add_arg(&margs, "") == -1 ||
891                 fuse_opt_add_arg(&margs, "-o") == -1 ||
892                 fuse_opt_add_arg(&margs, mountopts) == -1)) {
893                    fuse_opt_free_args(&margs);
894                    croak("out of memory\n");
895            }
896            fd = fuse_mount(mountpoint,&margs);
897            fuse_opt_free_args(&margs);        
898          if(fd < 0)          if(fd < 0)
899                  croak("could not mount fuse filesystem!");                  croak("could not mount fuse filesystem!\n");
900            if (debug) {
901                    if ( fuse_opt_add_arg(&fargs, "") == -1 ||
902                            fuse_opt_add_arg(&fargs, "-d") == -1) {
903                            fuse_opt_free_args(&fargs);
904                            croak("out of memory\n");
905                    }
906            } else {
907                    if (fuse_opt_add_arg(&fargs, "") == -1)
908                            croak("out of memory\n");
909            }
910    
911          if(threaded) {          if(threaded) {
912                  fuse_loop_mt(fuse_new(fd,debug ? "debug" : NULL,&fops));                  fuse_loop_mt(fuse_new(fd,&fargs,&fops,sizeof(fops)));
913          } else          } else
914                  fuse_loop(fuse_new(fd,debug ? "debug" : NULL,&fops));                  fuse_loop(fuse_new(fd,&fargs,&fops,sizeof(fops)));
915            fuse_opt_free_args(&fargs);

Legend:
Removed from v.28  
changed lines
  Added in v.123

  ViewVC Help
Powered by ViewVC 1.1.26