rebased
This commit is contained in:
parent
848eb734b5
commit
5e61be5668
|
@ -6,6 +6,8 @@ define(function(require) {
|
||||||
var O_EXCLUSIVE = 'EXCLUSIVE';
|
var O_EXCLUSIVE = 'EXCLUSIVE';
|
||||||
var O_TRUNCATE = 'TRUNCATE';
|
var O_TRUNCATE = 'TRUNCATE';
|
||||||
var O_APPEND = 'APPEND';
|
var O_APPEND = 'APPEND';
|
||||||
|
var XATTR_CREATE = 'CREATE';
|
||||||
|
var XATTR_REPLACE = 'REPLACE';
|
||||||
|
|
||||||
return {
|
return {
|
||||||
FILE_SYSTEM_NAME: 'local',
|
FILE_SYSTEM_NAME: 'local',
|
||||||
|
@ -53,6 +55,9 @@ define(function(require) {
|
||||||
'ax+': [O_WRITE, O_READ, O_CREATE, O_EXCLUSIVE, O_APPEND]
|
'ax+': [O_WRITE, O_READ, O_CREATE, O_EXCLUSIVE, O_APPEND]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
XATTR_CREATE: XATTR_CREATE,
|
||||||
|
XATTR_REPLACE: XATTR_REPLACE,
|
||||||
|
|
||||||
FS_READY: 'READY',
|
FS_READY: 'READY',
|
||||||
FS_PENDING: 'PENDING',
|
FS_PENDING: 'PENDING',
|
||||||
FS_ERROR: 'ERROR',
|
FS_ERROR: 'ERROR',
|
||||||
|
|
10
src/error.js
10
src/error.js
|
@ -105,6 +105,13 @@ define(function(require) {
|
||||||
EFileSystemError.prototype.name = "EFileSystemError";
|
EFileSystemError.prototype.name = "EFileSystemError";
|
||||||
EFileSystemError.prototype.constructor = EFileSystemError;
|
EFileSystemError.prototype.constructor = EFileSystemError;
|
||||||
|
|
||||||
|
function ENoAttr(message) {
|
||||||
|
this.message = message || '';
|
||||||
|
}
|
||||||
|
ENoAttr.prototype = new Error();
|
||||||
|
ENoAttr.prototype.name = 'ENoAttr';
|
||||||
|
ENoAttr.prototype.constructor = ENoAttr;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
EExists: EExists,
|
EExists: EExists,
|
||||||
EIsDirectory: EIsDirectory,
|
EIsDirectory: EIsDirectory,
|
||||||
|
@ -118,7 +125,8 @@ define(function(require) {
|
||||||
EInvalid: EInvalid,
|
EInvalid: EInvalid,
|
||||||
EIO: EIO,
|
EIO: EIO,
|
||||||
ELoop: ELoop,
|
ELoop: ELoop,
|
||||||
EFileSystemError: EFileSystemError
|
EFileSystemError: EFileSystemError,
|
||||||
|
ENoAttr: ENoAttr
|
||||||
};
|
};
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
39
src/fs.js
39
src/fs.js
|
@ -47,6 +47,8 @@ define(function(require) {
|
||||||
var O_TRUNCATE = require('src/constants').O_TRUNCATE;
|
var O_TRUNCATE = require('src/constants').O_TRUNCATE;
|
||||||
var O_APPEND = require('src/constants').O_APPEND;
|
var O_APPEND = require('src/constants').O_APPEND;
|
||||||
var O_FLAGS = require('src/constants').O_FLAGS;
|
var O_FLAGS = require('src/constants').O_FLAGS;
|
||||||
|
var XATTR_CREATE = require('src/constants').XATTR_CREATE;
|
||||||
|
var XATTR_REPLACE = require('src/constants').XATTR_REPLACE;
|
||||||
|
|
||||||
var providers = require('src/providers/providers');
|
var providers = require('src/providers/providers');
|
||||||
var adapters = require('src/adapters/adapters');
|
var adapters = require('src/adapters/adapters');
|
||||||
|
@ -1118,6 +1120,39 @@ define(function(require) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setxattr_file (context, path, name, value, flag, callback) {
|
||||||
|
path = normalize(path);
|
||||||
|
|
||||||
|
function set_xattr (error, node) {
|
||||||
|
if (flag == XATTR_CREATE && node[name]) {
|
||||||
|
callback(new EExists('attribute already exists'));
|
||||||
|
}
|
||||||
|
else if (flag == XATTR_REPLACE && !node[name]) {
|
||||||
|
callback(new ENoAttr('attribute does not exist'));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
node.xattr[name] = value;
|
||||||
|
context.put(node.id, node, callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof name != 'string') {
|
||||||
|
callback(new EInvalid('attribute name must be a string'));
|
||||||
|
}
|
||||||
|
else if (!name) {
|
||||||
|
callback(new EInvalid('attribute name cannot be an empty string'));
|
||||||
|
}
|
||||||
|
else if (!value) {
|
||||||
|
callback(new EInvalid('value cannot be empty'));
|
||||||
|
}
|
||||||
|
else if (flag && flag != XATTR_CREATE && flag != XATTR_REPLACE) {
|
||||||
|
callback(new EInvalid('invalid flag, must be null, XATTR_CREATE or XATTR_REPLACE'));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
find_node (context, path, set_xattr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function validate_flags(flags) {
|
function validate_flags(flags) {
|
||||||
if(!_(O_FLAGS).has(flags)) {
|
if(!_(O_FLAGS).has(flags)) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -1536,7 +1571,7 @@ define(function(require) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function _setxattr(context, path, name, value, callback) {
|
function _setxattr(context, path, name, value, flag, callback) {
|
||||||
if(!nullCheck(path, callback)) return;
|
if(!nullCheck(path, callback)) return;
|
||||||
|
|
||||||
function check_result (error) {
|
function check_result (error) {
|
||||||
|
@ -1548,7 +1583,7 @@ define(function(require) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
setxattr_file (context, path, name, value, check_result);
|
setxattr_file (context, path, name, value, flags, check_result);
|
||||||
}
|
}
|
||||||
|
|
||||||
function _lseek(fs, context, fd, offset, whence, callback) {
|
function _lseek(fs, context, fd, offset, whence, callback) {
|
||||||
|
|
Loading…
Reference in New Issue