diff --git a/examples/test.html b/examples/test.html
index ae84228..d270763 100644
--- a/examples/test.html
+++ b/examples/test.html
@@ -19,10 +19,9 @@ require(["src/filesystem"], function(IDBFS) {
IDBFS.mount("default", function(error, fs) {
fs.mkdir("/tmp", function(error) {
- fs.open("/tmp/0", "CREATE", "RW", function(error, fd) {
- fs.dump(document.getElementById("stdout"));
+ fs.open("/tmp/0", "CREATE", "RW", function(error, fd) {
fs.close(fd, function(error) {
- console.log("finished!");
+ fs.dump(document.getElementById("stdout"));
});
});
});
diff --git a/src/filesystem.js b/src/filesystem.js
index fc56921..5b979c2 100644
--- a/src/filesystem.js
+++ b/src/filesystem.js
@@ -396,7 +396,8 @@ define(function(require) {
var T_OPEN = 0x1;
var T_MKDIR = 0x2;
var T_STAT = 0x3;
- var T_RMDIR = 0x4;
+ var T_RMDIR = 0x4;
+ var T_CLOSE = 0x5;
// Codes
var E_EXIST = 0x0;
var E_ISDIR = 0x1;
@@ -404,6 +405,7 @@ define(function(require) {
var E_BUSY = 0x3;
var E_NOTEMPTY = 0x4;
var E_NOTDIR = 0x5;
+ var E_BADF = 0x6;
function genericIDBErrorHandler(scope, callback) {
return function(error) {
@@ -420,9 +422,9 @@ define(function(require) {
// Internal prototypes
- function OpenFileDescription(name, oid, flags, mode) {
+ function OpenFileDescription(name, entry, flags, mode) {
this.name = name;
- this.oid = oid;
+ this.entry = entry;
this.flags = flags;
this.mode = mode;
this.pointer = 0;
@@ -527,7 +529,8 @@ define(function(require) {
}
}
function complete() {
- var ofd = new OpenFileDescription(pathname, entry["object-id"], flags, mode);
+ var ofd;
+ ofd = new OpenFileDescription(pathname, entry, flags, mode);
var fd = new FileDescriptor(ofd);
debug.info("open <--");
if(callback && "function" === typeof callback) {
@@ -540,6 +543,11 @@ define(function(require) {
function close(fd, callback) {
debug.info("close -->");
+ var onerror = genericIDBErrorHandler("close", callback);
+ if(!fds.hasOwnProperty(fd.descriptor)) {
+ onerror(new IDBFSError(T_CLOSE, E_BADF));
+ return;
+ }
var ofd = fds[fd.descriptor];
ofd.valid = false;
if(!ofd.valid && !ofd.pending) {