Fuse
view release on metacpan or search on metacpan
DEBUGf("rename begin\n");
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpv(file,0)));
XPUSHs(sv_2mortal(newSVpv(new,0)));
PUTBACK;
rv = call_sv(MY_CXT.callback[8],G_SCALAR);
SPAGAIN;
rv = (rv ? POPi : 0);
FREETMPS;
LEAVE;
PUTBACK;
DEBUGf("rename end: %i\n",rv);
FUSE_CONTEXT_POST;
return rv;
}
int _PLfuse_link (const char *file, const char *new) {
int rv;
FUSE_CONTEXT_PRE;
DEBUGf("link begin\n");
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpv(file,0)));
XPUSHs(sv_2mortal(newSVpv(new,0)));
PUTBACK;
rv = call_sv(MY_CXT.callback[9],G_SCALAR);
SPAGAIN;
rv = (rv ? POPi : 0);
FREETMPS;
LEAVE;
PUTBACK;
DEBUGf("link end: %i\n",rv);
FUSE_CONTEXT_POST;
return rv;
}
int _PLfuse_chmod (const char *file, mode_t mode) {
int rv;
FUSE_CONTEXT_PRE;
DEBUGf("chmod begin\n");
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpv(file,0)));
XPUSHs(sv_2mortal(newSViv(mode)));
PUTBACK;
rv = call_sv(MY_CXT.callback[10],G_SCALAR);
SPAGAIN;
rv = (rv ? POPi : 0);
FREETMPS;
LEAVE;
PUTBACK;
DEBUGf("chmod end: %i\n",rv);
FUSE_CONTEXT_POST;
return rv;
}
int _PLfuse_chown (const char *file, uid_t uid, gid_t gid) {
int rv;
FUSE_CONTEXT_PRE;
DEBUGf("chown begin\n");
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpv(file,0)));
XPUSHs(sv_2mortal(newSViv(uid)));
XPUSHs(sv_2mortal(newSViv(gid)));
PUTBACK;
rv = call_sv(MY_CXT.callback[11],G_SCALAR);
SPAGAIN;
rv = (rv ? POPi : 0);
FREETMPS;
LEAVE;
PUTBACK;
DEBUGf("chown end: %i\n",rv);
FUSE_CONTEXT_POST;
return rv;
}
int _PLfuse_truncate (const char *file, off_t off) {
int rv;
#ifndef PERL_HAS_64BITINT
char *temp;
#endif
FUSE_CONTEXT_PRE;
DEBUGf("truncate begin\n");
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpv(file,0)));
#ifdef PERL_HAS_64BITINT
XPUSHs(sv_2mortal(newSViv(off)));
#else
if (asprintf(&temp, "%llu", off) == -1)
croak("Memory allocation failure!");
XPUSHs(sv_2mortal(newSVpv(temp, 0)));
free(temp);
#endif
PUTBACK;
rv = call_sv(MY_CXT.callback[12],G_SCALAR);
SPAGAIN;
rv = (rv ? POPi : 0);
FREETMPS;
LEAVE;
PUTBACK;
DEBUGf("truncate end: %i\n",rv);
FUSE_CONTEXT_POST;
return rv;
}
int _PLfuse_utime (const char *file, struct utimbuf *uti) {
int rv;
FUSE_CONTEXT_PRE;
DEBUGf("utime begin\n");
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpv(file,0)));
XPUSHs(sv_2mortal(newSViv(uti->actime)));
XPUSHs(sv_2mortal(newSViv(uti->modtime)));
PUTBACK;
rv = call_sv(MY_CXT.callback[13],G_SCALAR);
SPAGAIN;
rv = (rv ? POPi : 0);
FREETMPS;
LEAVE;
PUTBACK;
DEBUGf("utime end: %i\n",rv);
FUSE_CONTEXT_POST;
return rv;
}
int _PLfuse_open (const char *file, struct fuse_file_info *fi) {
int rv;
int flags = fi->flags;
return rv;
}
#if FUSE_FOUND_MICRO_VER >= 1
int _PLfuse_fallocate (const char *file, int mode, off_t offset, off_t length,
struct fuse_file_info *fi) {
int rv;
#ifndef PERL_HAS_64BITINT
char *temp;
#endif
FUSE_CONTEXT_PRE;
DEBUGf("fallocate begin\n");
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(file ? sv_2mortal(newSVpv(file,0)) : &PL_sv_undef);
XPUSHs(FH_GETHANDLE(fi));
XPUSHs(sv_2mortal(newSViv(mode)));
#ifdef PERL_HAS_64BITINT
XPUSHs(sv_2mortal(newSViv(offset)));
#else
if (asprintf(&temp, "%llu", offset) == -1)
croak("Memory allocation failure!");
XPUSHs(sv_2mortal(newSVpv(temp, 0)));
#endif
#ifdef PERL_HAS_64BITINT
XPUSHs(sv_2mortal(newSViv(length)));
#else
if (asprintf(&temp, "%llu", length) == -1)
croak("Memory allocation failure!");
XPUSHs(sv_2mortal(newSVpv(temp, 0)));
#endif
PUTBACK;
rv = call_sv(MY_CXT.callback[44],G_SCALAR);
SPAGAIN;
rv = (rv ? POPi : 0);
FREETMPS;
LEAVE;
PUTBACK;
DEBUGf("fallocate end: %i\n", rv);
FUSE_CONTEXT_POST;
return rv;
}
#endif /* FUSE_FOUND_MICRO_VER >= 1 */
#endif /* FUSE_VERSION >= 29 */
struct fuse_operations _available_ops = {
.getattr = _PLfuse_getattr,
.readlink = _PLfuse_readlink,
.getdir = _PLfuse_getdir,
.mknod = _PLfuse_mknod,
.mkdir = _PLfuse_mkdir,
.unlink = _PLfuse_unlink,
.rmdir = _PLfuse_rmdir,
.symlink = _PLfuse_symlink,
.rename = _PLfuse_rename,
.link = _PLfuse_link,
.chmod = _PLfuse_chmod,
.chown = _PLfuse_chown,
.truncate = _PLfuse_truncate,
.utime = _PLfuse_utime,
.open = _PLfuse_open,
.read = _PLfuse_read,
.write = _PLfuse_write,
.statfs = _PLfuse_statfs,
.flush = _PLfuse_flush,
.release = _PLfuse_release,
.fsync = _PLfuse_fsync,
.setxattr = _PLfuse_setxattr,
.getxattr = _PLfuse_getxattr,
.listxattr = _PLfuse_listxattr,
.removexattr = _PLfuse_removexattr,
.opendir = _PLfuse_opendir,
.readdir = _PLfuse_readdir,
.releasedir = _PLfuse_releasedir,
.fsyncdir = _PLfuse_fsyncdir,
.init = _PLfuse_init,
.destroy = _PLfuse_destroy,
.access = _PLfuse_access,
.create = _PLfuse_create,
.ftruncate = _PLfuse_ftruncate,
.fgetattr = _PLfuse_fgetattr,
.lock = _PLfuse_lock,
.utimens = _PLfuse_utimens,
.bmap = _PLfuse_bmap,
#if FUSE_VERSION >= 28
.ioctl = _PLfuse_ioctl,
.poll = _PLfuse_poll,
#endif /* FUSE_VERSION >= 28 */
#if FUSE_VERSION >= 29
.write_buf = _PLfuse_write_buf,
.read_buf = _PLfuse_read_buf,
.flock = _PLfuse_flock,
#if FUSE_FOUND_MICRO_VER >= 1
.fallocate = _PLfuse_fallocate,
#endif /* FUSE_FOUND_MICRO_VER >= 1 */
#endif /* FUSE_VERSION >= 29 */
};
MODULE = Fuse PACKAGE = Fuse
PROTOTYPES: DISABLE
BOOT:
MY_CXT_INIT;
#ifdef USE_ITHREADS
MY_CXT.self = aTHX;
#endif
void
CLONE(...)
PREINIT:
#ifdef USE_ITHREADS
int i;
dTHX;
#endif
CODE:
#ifdef USE_ITHREADS
MY_CXT_CLONE;
tTHX parent = MY_CXT.self;
( run in 1.069 second using v1.01-cache-2.11-cpan-5511b514fd6 )