/[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

perl/trunk/Fuse.xs revision 18 by dpavlin, Wed Dec 21 15:33:37 2005 UTC perl-llin/Fuse.xs revision 101 by dpavlin, Tue Aug 22 11:37:12 2006 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 0  #if 0
# 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 71  int _PLfuse_getattr(const char *file, st Line 70  int _PLfuse_getattr(const char *file, st
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 501  int _PLfuse_read (const char *file, char Line 466  int _PLfuse_read (const char *file, char
466                                  rv = 0;                                  rv = 0;
467                          }                          }
468                          if(rv > buflen)                          if(rv > buflen)
469                                  croak("%i: read() handler returned more than buflen! (%i > %i)",getpid(),rv,buflen);                                  croak("read() handler returned more than buflen! (%i > %i)",rv,buflen);
470                          if(rv)                          if(rv)
471                                  memcpy(buf,SvPV_nolen(mysv),rv);                                  memcpy(buf,SvPV_nolen(mysv),rv);
472                  }                  }
# 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    
507  int _PLfuse_statfs (const char *file, struct statfs *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 553  int _PLfuse_statfs (const char *file, st Line 514  int _PLfuse_statfs (const char *file, st
514          PUTBACK;          PUTBACK;
515          rv = call_sv(_PLfuse_callbacks[17],G_ARRAY);          rv = call_sv(_PLfuse_callbacks[17],G_ARRAY);
516          SPAGAIN;          SPAGAIN;
517          if(rv > 5) {          DEBUGf("statfs got %i params\n",rv);
518                  st->f_bsize    = POPi;          if(rv == 6 || rv == 7) {
519                  st->f_bfree    = POPi;                  st->f_bsize     = POPi;
520                  st->f_blocks   = POPi;                  st->f_bfree     = POPi;
521                  st->f_ffree    = POPi;                  st->f_blocks    = POPi;
522                  st->f_files    = POPi;                  st->f_ffree     = POPi;
523                  st->f_namelen  = POPi;                  st->f_files     = POPi;
524                  if(rv > 6)                  st->f_namemax   = POPi;
525                    /* zero and fill-in other */
526                    st->f_fsid = 0;
527                    st->f_frsize = 4096;
528                    st->f_flag = 0;
529                    st->f_bavail = st->f_bfree;
530                    st->f_favail = st->f_ffree;
531    
532                    if(rv == 7)
533                          rv = POPi;                          rv = POPi;
534                  else                  else
535                          rv = 0;                          rv = 0;
# Line 580  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 605  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 631  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 659  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 687  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 732  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 750  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 799  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 827  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 857  PROTOTYPES: DISABLE Line 816  PROTOTYPES: DISABLE
816  void  void
817  perl_fuse_main(...)  perl_fuse_main(...)
818          PREINIT:          PREINIT:
819          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};          struct fuse_operations fops =
820          int i, fd, varnum = 0, debug, threaded, have_mnt;                  {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
821                     NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
822            int i, fd, debug, threaded;
823          char *mountpoint;          char *mountpoint;
824          char *mountopts;          char *mountopts;
825          STRLEN n_a;          struct fuse_args margs = FUSE_ARGS_INIT(0, NULL);
826          STRLEN l;          struct fuse_args fargs = FUSE_ARGS_INIT(0, NULL);
827          INIT:          INIT:
828          if(items != 29) {          if(items != 29) {
829                  fprintf(stderr,"Perl<->C inconsistency or internal error\n");                  fprintf(stderr,"Perl<->C inconsistency or internal error\n");
# Line 873  perl_fuse_main(...) Line 834  perl_fuse_main(...)
834          threaded = SvIV(ST(1));          threaded = SvIV(ST(1));
835          if(threaded) {          if(threaded) {
836  #ifdef FUSE_USE_ITHREADS  #ifdef FUSE_USE_ITHREADS
837                  master_interp = PERL_GET_INTERP;                  master_interp = PERL_GET_CONTEXT;
838  #else  #else
839                  fprintf(stderr,"FUSE warning: Your script has requested multithreaded "                  fprintf(stderr,"FUSE warning: Your script has requested multithreaded "
840                                 "mode, but your perl was not built with -Dusethreads.  "                                 "mode, but your perl was not built with -Dusethreads.  "
# Line 885  perl_fuse_main(...) Line 846  perl_fuse_main(...)
846          mountopts = SvPV_nolen(ST(3));          mountopts = SvPV_nolen(ST(3));
847          for(i=0;i<N_CALLBACKS;i++) {          for(i=0;i<N_CALLBACKS;i++) {
848                  SV *var = ST(i+4);                  SV *var = ST(i+4);
849          /* allow symbolic references, or real code references. */                  /* allow symbolic references, or real code references. */
850                  if((var != &PL_sv_undef) && (SvPOK(var) || (SvROK(var) && SvTYPE(SvRV(var)) == SVt_PVCV))) {                  if(SvOK(var) && (SvPOK(var) || (SvROK(var) && SvTYPE(SvRV(var)) == SVt_PVCV))) {
851                          void **tmp1 = (void**)&_available_ops, **tmp2 = (void**)&fops;                          void **tmp1 = (void**)&_available_ops, **tmp2 = (void**)&fops;
852                          tmp2[i] = tmp1[i];                          tmp2[i] = tmp1[i];
853    #ifdef FUSE_USE_ITHREADS
854                          if(threaded)                          if(threaded)
855                  /* note: under 5.8.7, this croaks for code references. */                  /* note: under 5.8.7, this croaks for code references. */
856                  SvSHARE(var);                  SvSHARE(var);
857    #endif
858                          _PLfuse_callbacks[i] = var;                          _PLfuse_callbacks[i] = var;
859                    } else
860                    if(SvOK(var)) {
861                            croak("invalid callback passed to perl_fuse_main "
862                                  "(%s is not a string, code ref, or undef).\n",
863                                  i+4,SvPVbyte_nolen(var));
864                  }                  }
865          }          }
866          /* FIXME: need to pass fusermount arguments */          /*
867          fd = fuse_mount(mountpoint,mountopts);           * XXX: What comes here is just a ridiculous use of the option parsing API
868             * to hack on compatibility with other parts of the new API. First and
869             * foremost, real C argc/argv would be good to get at...
870             */
871            if (mountopts &&
872                (fuse_opt_add_arg(&margs, "") == -1 ||
873                 fuse_opt_add_arg(&margs, "-o") == -1 ||
874                 fuse_opt_add_arg(&margs, mountopts) == -1)) {
875                    fuse_opt_free_args(&margs);
876                    croak("out of memory\n");
877            }
878            fd = fuse_mount(mountpoint,&margs);
879            fuse_opt_free_args(&margs);        
880          if(fd < 0)          if(fd < 0)
881                  croak("could not mount fuse filesystem!");                  croak("could not mount fuse filesystem!\n");
882            if (debug) {
883                    if ( fuse_opt_add_arg(&fargs, "") == -1 ||
884                            fuse_opt_add_arg(&fargs, "-d") == -1) {
885                            fuse_opt_free_args(&fargs);
886                            croak("out of memory\n");
887                    }
888            } else {
889                    if (fuse_opt_add_arg(&fargs, "") == -1)
890                            croak("out of memory\n");
891            }
892    
893          if(threaded) {          if(threaded) {
894                  fuse_loop_mt(fuse_new(fd,debug ? "debug" : NULL,&fops));                  fuse_loop_mt(fuse_new(fd,&fargs,&fops,sizeof(fops)));
895          } else          } else
896                  fuse_loop(fuse_new(fd,debug ? "debug" : NULL,&fops));                  fuse_loop(fuse_new(fd,&fargs,&fops,sizeof(fops)));
897            fuse_opt_free_args(&fargs);

Legend:
Removed from v.18  
changed lines
  Added in v.101

  ViewVC Help
Powered by ViewVC 1.1.26