fix
diff --git a/lib/fuse.c b/lib/fuse.c
index 6c998c3..659643b 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -761,20 +761,27 @@
     dh.fuse = f;
     dh.fp = tmpfile();
     dh.dir = in->ino;
-    res = -ENOENT;
-    path = get_path(f, in->ino);
-    if (path != NULL) {
-        res = -ENOSYS;
-        if (f->op.getdir)
-            res = f->op.getdir(path, &dh, (fuse_dirfil_t) fill_dir);
-        free(path);
-    }
-    fflush(dh.fp);
 
+    res = -EIO;
+    if (dh.fp == NULL)
+        perror("fuse: failed to create temporary file");
+    else {
+        res = -ENOENT;
+        path = get_path(f, in->ino);
+        if (path != NULL) {
+            res = -ENOSYS;
+            if (f->op.getdir)
+                res = f->op.getdir(path, &dh, (fuse_dirfil_t) fill_dir);
+            free(path);
+        }
+        fflush(dh.fp);
+    }
     memset(&arg, 0, sizeof(struct fuse_getdir_out));
-    arg.fd = fileno(dh.fp);
+    if (res == 0)
+        arg.fd = fileno(dh.fp);
     send_reply(f, in, res, &arg, sizeof(arg));
-    fclose(dh.fp);
+    if (dh.fp != NULL)
+        fclose(dh.fp);
 }
 
 static void do_mknod(struct fuse *f, struct fuse_in_header *in,