Fixs for WebSQL, remove ensureBuffer(), fix truncate/ftruncate to read Buffer

This commit is contained in:
David Humphrey (:humph) david.humphrey@senecacollege.ca 2014-08-16 17:02:18 -04:00
parent d55bf23f1b
commit e8c88be4ba
2 changed files with 6 additions and 34 deletions

View File

@ -57,33 +57,6 @@ function standard_check_result_cb(callback) {
}; };
} }
/**
* Coerce array-like data to Buffer so we can .copy(), etc.
* Allow null, a Buffer, or an object that can be dealt with
* by the Buffer constructor (e.g., Typed Array, Array, ...)
*
* WARNING: be very careful not to call this on parameters of
* API methods that pass storage (like read). You don't want to
* overwrite a buffer that a caller is holding a reference to,
* and expects to be filled via the read. If the caller passes
* in a non-Buffer, we should throw instead of coerce.
*/
function ensureBuffer(maybeBuffer) {
if(!maybeBuffer) {
return null;
}
if(Buffer.isBuffer(maybeBuffer)) {
return maybeBuffer;
}
try {
return new Buffer(maybeBuffer);
} catch(e) {
return null;
}
}
/** /**
* Update node times. Only passed times are modified (undefined times are ignored) * Update node times. Only passed times are modified (undefined times are ignored)
* and filesystem flags are examined in order to override update logic. * and filesystem flags are examined in order to override update logic.
@ -817,7 +790,7 @@ function write_data(context, ofd, buffer, offset, length, position, callback) {
if(error) { if(error) {
callback(error); callback(error);
} else { } else {
fileData = ensureBuffer(result); fileData = result;
if(!fileData) { if(!fileData) {
return callback(new Errors.EIO('Expected Buffer')); return callback(new Errors.EIO('Expected Buffer'));
} }
@ -860,7 +833,7 @@ function read_data(context, ofd, buffer, offset, length, position, callback) {
if(error) { if(error) {
callback(error); callback(error);
} else { } else {
fileData = ensureBuffer(result); fileData = result;
if(!fileData) { if(!fileData) {
return callback(new Errors.EIO('Expected Buffer')); return callback(new Errors.EIO('Expected Buffer'));
} }
@ -1248,7 +1221,7 @@ function truncate_file(context, path, length, callback) {
callback(new Errors.EISDIR()); callback(new Errors.EISDIR());
} else{ } else{
fileNode = node; fileNode = node;
context.getObject(fileNode.data, truncate_file_data); context.getBuffer(fileNode.data, truncate_file_data);
} }
} }
@ -1256,7 +1229,6 @@ function truncate_file(context, path, length, callback) {
if (error) { if (error) {
callback(error); callback(error);
} else { } else {
fileData = ensureBuffer(fileData);
if(!fileData) { if(!fileData) {
return callback(new Errors.EIO('Expected Buffer')); return callback(new Errors.EIO('Expected Buffer'));
} }
@ -1305,7 +1277,7 @@ function ftruncate_file(context, ofd, length, callback) {
callback(new Errors.EISDIR()); callback(new Errors.EISDIR());
} else{ } else{
fileNode = node; fileNode = node;
context.getObject(fileNode.data, truncate_file_data); context.getBuffer(fileNode.data, truncate_file_data);
} }
} }
@ -1314,7 +1286,6 @@ function ftruncate_file(context, ofd, length, callback) {
callback(error); callback(error);
} else { } else {
var data; var data;
fileData = ensureBuffer(fileData);
if(!fileData) { if(!fileData) {
return callback(new Errors.EIO('Expected Buffer')); return callback(new Errors.EIO('Expected Buffer'));
} }

View File

@ -72,7 +72,8 @@ WebSQLContext.prototype.getBuffer = function(key, callback) {
return callback(err); return callback(err);
} }
if(result) { // Deal with zero-length ArrayBuffers, which will be encoded as ''
if(result || result === '') {
var arrayBuffer = base64ArrayBuffer.decode(result); var arrayBuffer = base64ArrayBuffer.decode(result);
result = new FilerBuffer(arrayBuffer); result = new FilerBuffer(arrayBuffer);
} }