/[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 87 by dpavlin, Tue May 23 14:28:34 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.h>  #include <fuse.h>
# 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 129  int _PLfuse_readlink(const char *file,ch Line 125  int _PLfuse_readlink(const char *file,ch
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 156  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 184  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 212  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 238  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 264  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 291  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 318  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 345  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 372  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 400  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 427  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 455  int _PLfuse_utime (const char *file, str Line 417  int _PLfuse_utime (const char *file, str
417    
418  int _PLfuse_open (const char *file, struct fuse_file_info *fi) {  int _PLfuse_open (const char *file, struct fuse_file_info *fi) {
419          int rv;          int rv;
         SV *rvsv;  
         char *rvstr;  
420          int flags = fi->flags;          int flags = fi->flags;
421          FUSE_CONTEXT_PRE;          FUSE_CONTEXT_PRE;
         dSP;  
422          DEBUGf("open begin\n");          DEBUGf("open begin\n");
423          ENTER;          ENTER;
424          SAVETMPS;          SAVETMPS;
# Line 483  int _PLfuse_open (const char *file, stru Line 442  int _PLfuse_open (const char *file, stru
442    
443  int _PLfuse_read (const char *file, char *buf, size_t buflen, off_t off, struct fuse_file_info *fi) {  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 524  int _PLfuse_read (const char *file, char Line 481  int _PLfuse_read (const char *file, char
481    
482  int _PLfuse_write (const char *file, const char *buf, size_t buflen, off_t off, struct fuse_file_info *fi) {  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 551  int _PLfuse_write (const char *file, con Line 506  int _PLfuse_write (const char *file, con
506    
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 598  int _PLfuse_statfs (const char *file, st Line 551  int _PLfuse_statfs (const char *file, st
551    
552  int _PLfuse_flush (const char *file, struct fuse_file_info *fi) {  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 623  int _PLfuse_flush (const char *file, str Line 574  int _PLfuse_flush (const char *file, str
574    
575  int _PLfuse_release (const char *file, struct fuse_file_info *fi) {  int _PLfuse_release (const char *file, struct fuse_file_info *fi) {
576          int rv;          int rv;
         char *rvstr;  
577          int flags = fi->flags;          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 650  int _PLfuse_release (const char *file, s Line 599  int _PLfuse_release (const char *file, s
599    
600  int _PLfuse_fsync (const char *file, int datasync, struct fuse_file_info *fi) {  int _PLfuse_fsync (const char *file, int datasync, struct fuse_file_info *fi) {
601          int rv;          int rv;
         char *rvstr;  
602          int flags = fi->flags;          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 677  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 705  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 750  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 768  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 817  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 875  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          struct fuse_args margs = FUSE_ARGS_INIT(0, NULL);          struct fuse_args margs = FUSE_ARGS_INIT(0, NULL);
844          struct fuse_args fargs = FUSE_ARGS_INIT(0, NULL);          struct fuse_args fargs = FUSE_ARGS_INIT(0, NULL);
         STRLEN n_a;  
         STRLEN l;  
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 898  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 955  perl_fuse_main(...) Line 909  perl_fuse_main(...)
909          }          }
910    
911          if(threaded) {          if(threaded) {
912                  fuse_loop_mt(fuse_new(fd,&fargs,&fops,sizeof(fops)/sizeof(void*)));                  fuse_loop_mt(fuse_new(fd,&fargs,&fops,sizeof(fops)));
913          } else          } else
914                  fuse_loop(fuse_new(fd,&fargs,&fops,sizeof(fops)/sizeof(void*)));                  fuse_loop(fuse_new(fd,&fargs,&fops,sizeof(fops)));
915          fuse_opt_free_args(&fargs);          fuse_opt_free_args(&fargs);

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

  ViewVC Help
Powered by ViewVC 1.1.26