diff options
author | David McNab <david@rebirthing.co.nz> | 2003-12-13 02:05:46 +0000 |
---|---|---|
committer | David McNab <david@rebirthing.co.nz> | 2003-12-13 02:05:46 +0000 |
commit | 7a19cafc5d0fb8786a61fdadba1a6014a0396e5f (patch) | |
tree | 1ce570e0ec979f5d07d0ab17052421786e4006f0 /python/_fusemodule.c | |
parent | 5e43f2c00c1ce3a9ee3ed9c2b5a9b32dabbb6e60 (diff) | |
download | libfuse-7a19cafc5d0fb8786a61fdadba1a6014a0396e5f.tar.gz |
Added 'fsync' stub in example/fusexmp.c
Added support for 'fsync' and 'statfs' to python interface, and
to python fs example
Diffstat (limited to 'python/_fusemodule.c')
-rw-r--r-- | python/_fusemodule.c | 84 |
1 files changed, 69 insertions, 15 deletions
diff --git a/python/_fusemodule.c b/python/_fusemodule.c index 557d312..c323c60 100644 --- a/python/_fusemodule.c +++ b/python/_fusemodule.c @@ -17,10 +17,12 @@ //@+node:globals static PyObject *getattr_cb=NULL, *readlink_cb=NULL, *getdir_cb=NULL, - *mknod_cb=NULL, *mkdir_cb=NULL, *unlink_cb=NULL, *rmdir_cb=NULL, - *symlink_cb=NULL, *rename_cb=NULL, *link_cb=NULL, *chmod_cb=NULL, - *chown_cb=NULL, *truncate_cb=NULL, *utime_cb=NULL, - *open_cb=NULL, *read_cb=NULL, *write_cb=NULL, *release_cb=NULL; + *mknod_cb=NULL, *mkdir_cb=NULL, *unlink_cb=NULL, *rmdir_cb=NULL, + *symlink_cb=NULL, *rename_cb=NULL, *link_cb=NULL, *chmod_cb=NULL, + *chown_cb=NULL, *truncate_cb=NULL, *utime_cb=NULL, + *open_cb=NULL, *read_cb=NULL, *write_cb=NULL, *release_cb=NULL, + *statfs_cb=NULL, *fsync_cb=NULL + ; //@-node:globals //@+node:PROLOGUE #define PROLOGUE \ @@ -298,15 +300,63 @@ static int open_func(const char *path, int mode) } //@-node:open_func //@+node:release_func +static int release_func(const char *path, int flags) +{ + PyObject *v = PyObject_CallFunction(release_cb, "si", path, flags); + PROLOGUE + //printf("release_func: path=%s flags=%d\n", path, flags); + EPILOGUE +} +//@-node:release_func +//@+node:statfs_func +static int statfs_func(struct fuse_statfs *fst) +{ + int i; + long retvalues[6]; + PyObject *v = PyObject_CallFunction(statfs_cb, ""); +PROLOGUE + + if (!PySequence_Check(v)) + { goto OUT_DECREF; } + if (PySequence_Size(v) < 6) + { goto OUT_DECREF; } + for(i=0; i<6; i++) + { + PyObject *tmp = PySequence_GetItem(v, i); + retvalues[i] = PyInt_Check(tmp) + ? PyInt_AsLong(tmp) + : (PyLong_Check(tmp) + ? PyLong_AsLong(tmp) + : 0); + } + + fst->block_size = retvalues[0]; + fst->blocks = retvalues[1]; + fst->blocks_free = retvalues[2]; + fst->files = retvalues[3]; + fst->files_free = retvalues[4]; + fst->namelen = retvalues[5]; + ret = 0; + +#ifdef IGNORE_THIS + printf("block_size=%ld, blocks=%ld, blocks_free=%ld, files=%ld, files_free=%ld, namelen=%ld\n", + retvalues[0], retvalues[1], retvalues[2], retvalues[3], retvalues[4], retvalues[5]); +#endif -static int release_func(const char *path) +EPILOGUE + +} + +//@-node:statfs_func +//@+node:fsync_func +static int fsync_func(const char *path, int isfsyncfile) { - PyObject *v = PyObject_CallFunction(release_cb, "s", path); + PyObject *v = PyObject_CallFunction(fsync_cb, "si", path, isfsyncfile); PROLOGUE - printf("release_func: path=%s\n", path); EPILOGUE } -//@-node:release_func + +//@-node:fsync_func //@+node:process_cmd static void process_cmd(struct fuse *f, struct fuse_cmd *cmd, void *data) @@ -355,18 +405,20 @@ Fuse_main(PyObject *self, PyObject *args, PyObject *kw) "getattr", "readlink", "getdir", "mknod", "mkdir", "unlink", "rmdir", "symlink", "rename", "link", "chmod", "chown", "truncate", "utime", - "open", "read", "write", "release", "flags", "multithreaded", NULL}; + "open", "read", "write", "release", "statfs", "fsync", + "flags", "multithreaded", NULL}; memset(&op, 0, sizeof(op)); - if (!PyArg_ParseTupleAndKeywords(args, kw, "|OOOOOOOOOOOOOOOOOOii", - kwlist, &getattr_cb, &readlink_cb, &getdir_cb, &mknod_cb, - &mkdir_cb, &unlink_cb, &rmdir_cb, &symlink_cb, &rename_cb, - &link_cb, &chmod_cb, &chown_cb, &truncate_cb, &utime_cb, - &open_cb, &read_cb, &write_cb, &release_cb, &flags, &multithreaded)) + if (!PyArg_ParseTupleAndKeywords(args, kw, "|OOOOOOOOOOOOOOOOOOOOii", + kwlist, &getattr_cb, &readlink_cb, &getdir_cb, &mknod_cb, + &mkdir_cb, &unlink_cb, &rmdir_cb, &symlink_cb, &rename_cb, + &link_cb, &chmod_cb, &chown_cb, &truncate_cb, &utime_cb, + &open_cb, &read_cb, &write_cb, &release_cb, &statfs_cb, &fsync_cb, + &flags, &multithreaded)) return NULL; -#define DO_ONE_ATTR(name) if(name ## _cb) { Py_INCREF(name ## _cb); op.name = name ## _func; } else { op.name = NULL; } + #define DO_ONE_ATTR(name) if(name ## _cb) { Py_INCREF(name ## _cb); op.name = name ## _func; } else { op.name = NULL; } DO_ONE_ATTR(getattr); DO_ONE_ATTR(readlink); @@ -386,6 +438,8 @@ Fuse_main(PyObject *self, PyObject *args, PyObject *kw) DO_ONE_ATTR(read); DO_ONE_ATTR(write); DO_ONE_ATTR(release); + DO_ONE_ATTR(statfs); + DO_ONE_ATTR(fsync); fuse = fuse_new(0, flags, &op); if(multithreaded) |