POE-Component-Fuse
view release on metacpan or search on metacpan
lib/POE/Component/Fuse/myFuse.xs view on Meta::CPAN
if(rv)
rv = POPi;
else
rv = 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("%s","link begin\n");
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpv(file,0)));
XPUSHs(sv_2mortal(newSVpv(new,0)));
PUTBACK;
rv = call_sv(_PLfuse_callbacks[9],G_SCALAR);
SPAGAIN;
if(rv)
rv = POPi;
else
rv = 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("%s","chmod begin\n");
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpv(file,0)));
XPUSHs(sv_2mortal(newSViv(mode)));
PUTBACK;
rv = call_sv(_PLfuse_callbacks[10],G_SCALAR);
SPAGAIN;
if(rv)
rv = POPi;
else
rv = 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("%s","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(_PLfuse_callbacks[11],G_SCALAR);
SPAGAIN;
if(rv)
rv = POPi;
else
rv = 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;
FUSE_CONTEXT_PRE;
DEBUGf("%s","truncate begin\n");
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpv(file,0)));
XPUSHs(sv_2mortal(newSViv(off)));
PUTBACK;
rv = call_sv(_PLfuse_callbacks[12],G_SCALAR);
SPAGAIN;
if(rv)
rv = POPi;
else
rv = 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("%s","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(_PLfuse_callbacks[13],G_SCALAR);
SPAGAIN;
if(rv)
rv = POPi;
else
rv = 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;
FUSE_CONTEXT_PRE;
DEBUGf("%s","open begin\n");
ENTER;
SAVETMPS;
lib/POE/Component/Fuse/myFuse.xs view on Meta::CPAN
spc -= s;
}
}
}
/*
* If the Perl returned an error, return that.
* Otherwise check that the buffer was big enough.
*/
if (rv == 0)
{
rv = total_len;
if ((size > 0) && (size < total_len))
rv = -ERANGE;
}
}
FREETMPS;
LEAVE;
PUTBACK;
DEBUGf("listxattr end: %i\n",rv);
FUSE_CONTEXT_POST;
return rv;
}
int _PLfuse_removexattr (const char *file, const char *name) {
int rv;
FUSE_CONTEXT_PRE;
DEBUGf("%s","removexattr begin\n");
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpv(file,0)));
XPUSHs(sv_2mortal(newSVpv(name,0)));
PUTBACK;
rv = call_sv(_PLfuse_callbacks[24],G_SCALAR);
SPAGAIN;
if(rv)
rv = POPi;
else
rv = 0;
FREETMPS;
LEAVE;
PUTBACK;
DEBUGf("removexattr end: %i\n",rv);
FUSE_CONTEXT_POST;
return rv;
}
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,
};
MODULE = POE::Component::Fuse::myFuse PACKAGE = POE::Component::Fuse::myFuse
PROTOTYPES: DISABLE
void
fuse_set_fh(fh)
int fh
CODE:
if ( fuseinfo != NULL ) {
fuseinfo->fh = (uint64_t)fh;
}
SV*
fuse_get_context()
PREINIT:
struct fuse_context *fc;
CODE:
fc = fuse_get_context();
if(fc) {
HV *hash = newHV();
if ( ! hv_stores(hash, "uid", newSViv(fc->uid) ) )
croak( "serious error!" );
if ( ! hv_stores(hash, "gid", newSViv(fc->gid) ) )
croak( "serious error!" );
if ( ! hv_stores(hash, "pid", newSViv(fc->pid) ) )
croak( "serious error!" );
/* APOCAL add the fh data if possible */
if(fuseinfo != NULL) {
DEBUGf("data in fuseinfo->fh: %llu\n", fuseinfo->fh );
if ( ! hv_stores(hash, "fh", newSVuv(fuseinfo->fh) ) )
croak( "serious error!" );
}
RETVAL = newRV_inc((SV*)hash);
} else {
XSRETURN_UNDEF;
}
OUTPUT:
RETVAL
void
perl_fuse_main(...)
PREINIT:
struct fuse_operations fops =
{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
( run in 0.902 second using v1.01-cache-2.11-cpan-5511b514fd6 )