From 9b3914522d002c91565bb46b855d7e19f4219471 Mon Sep 17 00:00:00 2001 From: garrettmills Date: Fri, 27 Nov 2020 13:19:04 -0600 Subject: [PATCH] Add support for fgetattr, symlink and fix listxattr args --- index.js | 3 +++ ops/fgetattr.js | 25 +++++++++++++++++++++++++ ops/listxattr.js | 4 ++-- ops/readlink.js | 19 +++++++++++++++++++ ops/symlink.js | 25 +++++++++++++++++++++++++ 5 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 ops/fgetattr.js create mode 100644 ops/readlink.js create mode 100644 ops/symlink.js diff --git a/index.js b/index.js index 576f41a..6407749 100644 --- a/index.js +++ b/index.js @@ -22,6 +22,9 @@ const ops = { setxattr: require('./ops/setxattr'), removexattr: require('./ops/removexattr'), listxattr: require('./ops/listxattr'), + fgetattr: require('./ops/fgetattr'), + symlink: require('./ops/symlink'), + readlink: require('./ops/readlink'), } ;(async () => { diff --git a/ops/fgetattr.js b/ops/fgetattr.js new file mode 100644 index 0000000..d1a59bc --- /dev/null +++ b/ops/fgetattr.js @@ -0,0 +1,25 @@ +const Fuse = require('fuse-native') +const Errors = require('../../shared/Errors') +const Message = require('../../shared/Message') +const connector = require('../connector') + +module.exports = exports = function (path, fd, cb) { + connector.send( + Message.route('fs.fgetattr') + .data({ path, descriptor: fd }) + .expect_response(msg => { + if ( msg.error() ) { + return Errors.toCallback(cb, msg.error()) + } + + const { node } = msg.data() + + delete node.pied_name + node.mtime = new Date(node.mtime) + node.atime = new Date(node.atime) + node.ctime = new Date(node.ctime) + + return process.nextTick(cb, 0, node) + }) + ) +} diff --git a/ops/listxattr.js b/ops/listxattr.js index 2ebc082..2c247dd 100644 --- a/ops/listxattr.js +++ b/ops/listxattr.js @@ -3,10 +3,10 @@ const Errors = require('../../shared/Errors') const Message = require('../../shared/Message') const connector = require('../connector') -module.exports = exports = function (path, name, cb) { +module.exports = exports = function (path, cb) { connector.send( Message.route('fs.xattr.list') - .data({ path, name }) + .data({ path }) .expect_response(msg => { if ( msg.error() ) { return Errors.toCallback(cb, msg.error()) diff --git a/ops/readlink.js b/ops/readlink.js new file mode 100644 index 0000000..c6caaf5 --- /dev/null +++ b/ops/readlink.js @@ -0,0 +1,19 @@ +const Fuse = require('fuse-native') +const Errors = require('../../shared/Errors') +const Message = require('../../shared/Message') +const connector = require('../connector') + +module.exports = exports = function (path, cb) { + connector.send( + Message.route('fs.readlink') + .data({ path }) + .expect_response(msg => { + if ( msg.error() ) { + return Errors.toCallback(cb, msg.error()) + } + + const { link } = msg.data() + return process.nextTick(cb, 0, link) + }) + ) +} diff --git a/ops/symlink.js b/ops/symlink.js new file mode 100644 index 0000000..d902238 --- /dev/null +++ b/ops/symlink.js @@ -0,0 +1,25 @@ +const Fuse = require('fuse-native') +const Errors = require('../../shared/Errors') +const Message = require('../../shared/Message') +const connector = require('../connector') + +module.exports = exports = function (src, dest, cb) { + connector.send( + Message.route('fs.symlink') + .data({ source: src, destination: dest }) + .expect_response(msg => { + if ( msg.error() ) { + return Errors.toCallback(cb, msg.error()) + } + + const { node } = msg.data() + + delete node.pied_name + node.mtime = new Date(node.mtime) + node.atime = new Date(node.atime) + node.ctime = new Date(node.ctime) + + return process.nextTick(cb, 0) + }) + ) +}