Updated read() error checking. Updated stat() return structure.
This commit is contained in:
parent
b1b94d91a9
commit
baf63c6055
88
src/fs.js
88
src/fs.js
|
@ -89,10 +89,10 @@ define(function(require) {
|
||||||
// Compute file signature based on file id and version
|
// Compute file signature based on file id and version
|
||||||
}
|
}
|
||||||
|
|
||||||
function Stats(size, data, atime, ctime, mtime, links) {
|
function Stats(size, handle, atime, ctime, mtime, links) {
|
||||||
return {
|
return {
|
||||||
size: size,
|
size: size,
|
||||||
data: data,
|
handle: handle,
|
||||||
atime: atime,
|
atime: atime,
|
||||||
ctime: ctime,
|
ctime: ctime,
|
||||||
mtime: mtime,
|
mtime: mtime,
|
||||||
|
@ -161,6 +161,8 @@ define(function(require) {
|
||||||
if(!_(data).has(name)) {
|
if(!_(data).has(name)) {
|
||||||
if(_(flags).contains(OF_CREATE)) {
|
if(_(flags).contains(OF_CREATE)) {
|
||||||
filehandle = data[name] = hash(guid());
|
filehandle = data[name] = hash(guid());
|
||||||
|
++ parent.size;
|
||||||
|
++ parent.version;
|
||||||
file = new File();
|
file = new File();
|
||||||
++ file.links;
|
++ file.links;
|
||||||
var createFileRequest = files.put(file, data[name]);
|
var createFileRequest = files.put(file, data[name]);
|
||||||
|
@ -237,6 +239,7 @@ define(function(require) {
|
||||||
getParentRequest.onsuccess = function(e) {
|
getParentRequest.onsuccess = function(e) {
|
||||||
var parent = e.target.result;
|
var parent = e.target.result;
|
||||||
parent.data[Path.basename(fullpath)] = directoryhandle;
|
parent.data[Path.basename(fullpath)] = directoryhandle;
|
||||||
|
++ parent.size;
|
||||||
++ parent.version;
|
++ parent.version;
|
||||||
var updateParentRequest = files.put(parent, parenthandle);
|
var updateParentRequest = files.put(parent, parenthandle);
|
||||||
updateParentRequest.onsuccess = function(e) {
|
updateParentRequest.onsuccess = function(e) {
|
||||||
|
@ -286,6 +289,7 @@ define(function(require) {
|
||||||
getParentRequest.onsuccess = function(e) {
|
getParentRequest.onsuccess = function(e) {
|
||||||
var parent = e.target.result;
|
var parent = e.target.result;
|
||||||
delete parent.data[directoryhandle];
|
delete parent.data[directoryhandle];
|
||||||
|
-- parent.size;
|
||||||
++ parent.version;
|
++ parent.version;
|
||||||
var updateParentRequest = files.put(parent, parenthandle);
|
var updateParentRequest = files.put(parent, parenthandle);
|
||||||
updateParentRequest.onsuccess = function(e) {
|
updateParentRequest.onsuccess = function(e) {
|
||||||
|
@ -331,7 +335,7 @@ define(function(require) {
|
||||||
var getFileRequest = files.get(filehandle);
|
var getFileRequest = files.get(filehandle);
|
||||||
getFileRequest.onsuccess = function(e) {
|
getFileRequest.onsuccess = function(e) {
|
||||||
var file = e.target.result;
|
var file = e.target.result;
|
||||||
var stats = new Stats(file.size, file.data, file.atime, file.ctime, file.mtime, file.links);
|
var stats = new Stats(file.size, filehandle, file.atime, file.ctime, file.mtime, file.links);
|
||||||
runcallback(callback, null, stats);
|
runcallback(callback, null, stats);
|
||||||
};
|
};
|
||||||
getFileRequest.onerror = function(e) {
|
getFileRequest.onerror = function(e) {
|
||||||
|
@ -386,7 +390,8 @@ define(function(require) {
|
||||||
runcallback(callback, new error.EPathExists());
|
runcallback(callback, new error.EPathExists());
|
||||||
} else {
|
} else {
|
||||||
newdata[newname] = filehandle;
|
newdata[newname] = filehandle;
|
||||||
++ parent.version;
|
++ newparent.size;
|
||||||
|
++ newparent.version;
|
||||||
var updateNewParentRequest = files.put(newparent, newparenthandle);
|
var updateNewParentRequest = files.put(newparent, newparenthandle);
|
||||||
updateNewParentRequest.onsuccess = function(e) {
|
updateNewParentRequest.onsuccess = function(e) {
|
||||||
runcallback(callback);
|
runcallback(callback);
|
||||||
|
@ -435,6 +440,8 @@ define(function(require) {
|
||||||
} else {
|
} else {
|
||||||
var filehandle = data[name];
|
var filehandle = data[name];
|
||||||
delete data[name];
|
delete data[name];
|
||||||
|
-- parent.size;
|
||||||
|
++ parent.version;
|
||||||
var updateParentRequest = files.put(parent, parenthandle);
|
var updateParentRequest = files.put(parent, parenthandle);
|
||||||
updateParentRequest.onsuccess = function(e) {
|
updateParentRequest.onsuccess = function(e) {
|
||||||
var getFileRequest = files.get(filehandle);
|
var getFileRequest = files.get(filehandle);
|
||||||
|
@ -585,34 +592,62 @@ define(function(require) {
|
||||||
OpenFile.prototype.read = function read(buffer, callback, optTransaction) {
|
OpenFile.prototype.read = function read(buffer, callback, optTransaction) {
|
||||||
var openfile = this;
|
var openfile = this;
|
||||||
var fs = openfile._fs;
|
var fs = openfile._fs;
|
||||||
|
|
||||||
|
if(DIRECTORY_MIME_TYPE === openfile._file.mode) {
|
||||||
|
return runcallback(callback, new error.EIsDir());
|
||||||
|
}
|
||||||
|
|
||||||
var transaction = optTransaction || new openfile.Transaction([FILE_STORE_NAME], IDB_RO);
|
var transaction = optTransaction || new openfile.Transaction([FILE_STORE_NAME], IDB_RO);
|
||||||
|
|
||||||
var files = transaction.objectStore(FILE_STORE_NAME);
|
var files = transaction.objectStore(FILE_STORE_NAME);
|
||||||
|
|
||||||
if(FILE_MIME_TYPE === openfile._file.mode) {
|
var getDataRequest = files.get(openfile._file.data);
|
||||||
var getDataRequest = files.get(openfile._file.data);
|
getDataRequest.onsuccess = function(e) {
|
||||||
getDataRequest.onsuccess = function(e) {
|
var data = e.target.result;
|
||||||
var data = e.target.result;
|
if(!data) {
|
||||||
if(!data) {
|
// There's not file data, so return zero bytes read
|
||||||
// There's not file data, so return zero bytes read
|
runcallback(callback, null, 0, buffer);
|
||||||
runcallback(callback, null, 0, buffer);
|
} else {
|
||||||
} else {
|
// Make sure we won't read past the end of the file
|
||||||
// Make sure we won't read past the end of the file
|
var bytes = (openfile._position + buffer.length > data.length) ? data.length - openfile._position : buffer.length;
|
||||||
var bytes = (openfile._position + buffer.length > data.length) ? data.length - openfile._position : buffer.length;
|
// Copy the desired region from the file into the buffer
|
||||||
// Copy the desired region from the file into the buffer
|
var dataView = data.subarray(openfile._position, openfile._position + bytes);
|
||||||
var dataView = data.subarray(openfile._position, openfile._position + bytes);
|
buffer.set(dataView);
|
||||||
buffer.set(dataView);
|
openfile._position += bytes;
|
||||||
openfile._position += bytes;
|
runcallback(callback, null, bytes, buffer);
|
||||||
runcallback(callback, null, bytes, buffer);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
getDataRequest.onerror = function(e) {
|
|
||||||
runcallback(callback, e);
|
|
||||||
}
|
}
|
||||||
} else if(DIRECTORY_MIME_TYPE === openfile._file.mode) {
|
};
|
||||||
runcallback(callback, new error.ENotImplemented());
|
getDataRequest.onerror = function(e) {
|
||||||
|
runcallback(callback, e);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
OpenFile.prototype.readdir = function readdir(buffer, count, callback, optTransaction) {
|
||||||
|
var openfile = this;
|
||||||
|
var fs = openfile._fs;
|
||||||
|
|
||||||
|
if(!DIRECTORY_MIME_TYPE === openfile._file.mode) {
|
||||||
|
return runcallback(callback, new error.ENotIsDir());
|
||||||
|
}
|
||||||
|
|
||||||
|
var transaction = optTransaction || new openfile.Transaction([FILE_STORE_NAME], IDB_RO);
|
||||||
|
|
||||||
|
var files = transaction.objectStore(FILE_STORE_NAME);
|
||||||
|
|
||||||
|
var getFileRequest = files.get(openfile._handle);
|
||||||
|
getFileRequest.onsuccess = function(e) {
|
||||||
|
var file = e.target.result;
|
||||||
|
var names = _(file.data).keys().sort();
|
||||||
|
count = (openfile._position + count > file.size) ? (file.size - openfile._position) : count;
|
||||||
|
for(var i = openfile._position, l = openfile._position + count; i < l; ++ i) {
|
||||||
|
buffer.push(names[i]);
|
||||||
|
}
|
||||||
|
openfile._position += count;
|
||||||
|
runcallback(callback, null, count, buffer);
|
||||||
|
};
|
||||||
|
getFileRequest.onerror = function(e) {
|
||||||
|
runcallback(callback, e);
|
||||||
|
};
|
||||||
|
};
|
||||||
OpenFile.prototype.write = function write(buffer, callback, optTransaction) {
|
OpenFile.prototype.write = function write(buffer, callback, optTransaction) {
|
||||||
var openfile = this;
|
var openfile = this;
|
||||||
var fs = openfile._fs;
|
var fs = openfile._fs;
|
||||||
|
@ -679,6 +714,9 @@ define(function(require) {
|
||||||
FileDescriptor.prototype.read = function read(buffer, callback) {
|
FileDescriptor.prototype.read = function read(buffer, callback) {
|
||||||
this._openfile.read(buffer, callback);
|
this._openfile.read(buffer, callback);
|
||||||
};
|
};
|
||||||
|
FileDescriptor.prototype.readdir = function readdir(buffer, count, callback) {
|
||||||
|
this._openfile.readdir(buffer, count, callback);
|
||||||
|
};
|
||||||
FileDescriptor.prototype.write = function write(buffer, callback) {
|
FileDescriptor.prototype.write = function write(buffer, callback) {
|
||||||
this._openfile.write(buffer, callback);
|
this._openfile.write(buffer, callback);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue