| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- "use strict";
- var execFile = require('child_process').execFile;
- var fs = require('fs');
- var path = require('path');
- var util = require('util');
- function compact(array) {
- return array.filter(function (i) {
- if (typeof i.length !== 'undefined')
- return i.length > 0;
- return !!i;
- });
- }
- function findCmd(name) {
- "use strict";
- var paths = process.env['PATH'].split(':');
- var pathLen = paths.length;
- for (var i = 0; i < pathLen; i++) {
- var sp = path.resolve(paths[i]);
- var fname = path.normalize(path.join(sp, name));
- if (fs.existsSync(fname)) {
- return fname;
- }
- }
- return null;
- }
- var zfsBin = findCmd('zfs');
- function zfs(args, callback) {
- execFile(zfsBin, args, {maxBuffer: 8000000}, function (err, stdout, stderr) {
- if (callback && typeof callback === 'function') {
- if (err) {
- err.message = compact(err.message.split('\n')).join('; ').trim();
- callback(err);
- } else {
- callback(null, stdout);
- }
- }
- });
- }
- zfs.list = function list(extraParams, cb) {
- var params = ['list', '-H', '-o', 'name'].concat(extraParams || []);
- zfs(params, function (err, stdout) {
- if (cb && typeof cb === 'function') {
- var lines = compact(stdout.split('\n'));
- cb(err, lines);
- }
- });
- };
- module.exports = zfs;
|