Fuse

 view release on metacpan or  search on metacpan

Fuse.xs  view on Meta::CPAN

	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;

Fuse.xs  view on Meta::CPAN

	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 )