diff options
author | juj <jujjyl@gmail.com> | 2014-05-02 15:49:51 +0300 |
---|---|---|
committer | juj <jujjyl@gmail.com> | 2014-05-02 15:49:51 +0300 |
commit | 4cd5d1d622a6a2b32a5f91df5285060faa93a023 (patch) | |
tree | a30defa6d1bab3b41cec5902d1f17f0d03a58583 /src | |
parent | 9dd3a7059749d4051202687817bf6b68ab2ce54c (diff) | |
parent | 439612cf923b70e87b4c4e739b90ec1df23ddda3 (diff) |
Merge pull request #2330 from juj/fs-tracking
fs-tracking
Diffstat (limited to 'src')
-rw-r--r-- | src/library_fs.js | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/src/library_fs.js b/src/library_fs.js index d53210f9..5f7f1dea 100644 --- a/src/library_fs.js +++ b/src/library_fs.js @@ -26,7 +26,13 @@ mergeInto(LibraryManager.library, { // This is set to false when the runtime is initialized, allowing you // to modify the filesystem freely before run() is called. ignorePermissions: true, - + trackingDelegate: {}, + tracking: { + openFlags: { + READ: 1 << 0, + WRITE: 1 << 1 + } + }, ErrnoError: null, // set during init genericErrors: {}, @@ -713,6 +719,13 @@ mergeInto(LibraryManager.library, { throw new FS.ErrnoError(err); } } + try { + if (FS.trackingDelegate['willMovePath']) { + FS.trackingDelegate['willMovePath'](old_path, new_path); + } + } catch(e) { + console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message); + } // remove the node from the lookup hash FS.hashRemoveNode(old_node); // do the underlying fs rename @@ -725,6 +738,11 @@ mergeInto(LibraryManager.library, { // changed its name) FS.hashAddNode(old_node); } + try { + if (FS.trackingDelegate['onMovePath']) FS.trackingDelegate['onMovePath'](old_path, new_path); + } catch(e) { + console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message); + } }, rmdir: function(path) { var lookup = FS.lookupPath(path, { parent: true }); @@ -741,8 +759,20 @@ mergeInto(LibraryManager.library, { if (FS.isMountpoint(node)) { throw new FS.ErrnoError(ERRNO_CODES.EBUSY); } + try { + if (FS.trackingDelegate['willDeletePath']) { + FS.trackingDelegate['willDeletePath'](path); + } + } catch(e) { + console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message); + } parent.node_ops.rmdir(parent, name); FS.destroyNode(node); + try { + if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path); + } catch(e) { + console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message); + } }, readdir: function(path) { var lookup = FS.lookupPath(path, { follow: true }); @@ -769,8 +799,20 @@ mergeInto(LibraryManager.library, { if (FS.isMountpoint(node)) { throw new FS.ErrnoError(ERRNO_CODES.EBUSY); } + try { + if (FS.trackingDelegate['willDeletePath']) { + FS.trackingDelegate['willDeletePath'](path); + } + } catch(e) { + console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message); + } parent.node_ops.unlink(parent, name); FS.destroyNode(node); + try { + if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path); + } catch(e) { + console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message); + } }, readlink: function(path) { var lookup = FS.lookupPath(path); @@ -965,6 +1007,20 @@ mergeInto(LibraryManager.library, { Module['printErr']('read file: ' + path); } } + try { + if (FS.trackingDelegate['onOpenFile']) { + var trackingFlags = 0; + if ((flags & {{{ cDefine('O_ACCMODE') }}}) !== {{{ cDefine('O_WRONLY') }}}) { + trackingFlags |= FS.tracking.openFlags.READ; + } + if ((flags & {{{ cDefine('O_ACCMODE') }}}) !== {{{ cDefine('O_RDONLY') }}}) { + trackingFlags |= FS.tracking.openFlags.WRITE; + } + FS.trackingDelegate['onOpenFile'](path, trackingFlags); + } + } catch(e) { + console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: " + e.message); + } return stream; }, close: function(stream) { @@ -1034,6 +1090,11 @@ mergeInto(LibraryManager.library, { } var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); if (!seeking) stream.position += bytesWritten; + try { + if (stream.path && FS.trackingDelegate['onWriteToFile']) FS.trackingDelegate['onWriteToFile'](stream.path); + } catch(e) { + console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: " + e.message); + } return bytesWritten; }, allocate: function(stream, offset, length) { |