fusermount changes
diff --git a/lib/fuse.c b/lib/fuse.c
index b1b0749..35a02ad 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -783,6 +783,10 @@
do_lookup(f, in, (char *) inarg);
break;
+ case FUSE_FORGET:
+ do_forget(f, in, (struct fuse_forget_in *) inarg);
+ break;
+
case FUSE_GETATTR:
do_getattr(f, in);
break;
@@ -854,31 +858,20 @@
cmd = (struct fuse_cmd *) malloc(sizeof(struct fuse_cmd));
cmd->buf = (char *) malloc(FUSE_MAX_IN);
- do {
- res = read(f->fd, cmd->buf, FUSE_MAX_IN);
- if(res == -1) {
- perror("reading fuse device");
- /* BAD... This will happen again */
- free_cmd(cmd);
- return NULL;
- }
- if((size_t) res < sizeof(struct fuse_in_header)) {
- fprintf(stderr, "short read on fuse device\n");
- /* Cannot happen */
- free_cmd(cmd);
- return NULL;
- }
- cmd->buflen = res;
-
- /* FORGET is special: it can be done without calling filesystem
- methods. */
- in = (struct fuse_in_header *) cmd->buf;
- if(in->opcode == FUSE_FORGET) {
- void *inarg = cmd->buf + sizeof(struct fuse_in_header);
- do_forget(f, in, (struct fuse_forget_in *) inarg);
- }
- } while(in->opcode == FUSE_FORGET);
-
+ res = read(f->fd, cmd->buf, FUSE_MAX_IN);
+ if(res == -1) {
+ perror("reading fuse device");
+ /* BAD... This will happen again */
+ free_cmd(cmd);
+ return NULL;
+ }
+ if((size_t) res < sizeof(struct fuse_in_header)) {
+ fprintf(stderr, "short read on fuse device\n");
+ /* Cannot happen */
+ free_cmd(cmd);
+ return NULL;
+ }
+ cmd->buflen = res;
return cmd;
}
@@ -898,6 +891,17 @@
{
struct fuse *f;
struct node *root;
+ char verstr[128];
+ char *realver = getenv("FUSE_KERNEL_VERSION");
+
+ if(realver != NULL) {
+ sprintf(verstr, "%i", FUSE_KERNEL_VERSION);
+ if(strcmp(verstr, realver) != 0) {
+ fprintf(stderr,
+ "Warning: FUSE version mismatch: using %s, kernel is %s\n",
+ realver, verstr);
+ }
+ }
f = (struct fuse *) calloc(1, sizeof(struct fuse));