mirror of
https://github.com/radareorg/radare2.git
synced 2024-11-25 14:19:51 +00:00
104 lines
2.6 KiB
JavaScript
104 lines
2.6 KiB
JavaScript
/* utils.js - Public Domain - copyright 2013 - pancake */
|
|
|
|
var fs = require ('fs');
|
|
var exec = require('child_process').exec;
|
|
var cmds = 0;
|
|
var mkdir_callbacks = {};
|
|
|
|
var U = module.exports = {
|
|
red: "\x1b[31m",
|
|
green: "\x1b[32m",
|
|
reset: "\x1b[0m",
|
|
slurp: function(file) {
|
|
return fs.readFileSync (file);;
|
|
},
|
|
exists: function (f) {
|
|
try { return !!fs.statSync (f);
|
|
} catch(e) { return false; }
|
|
},
|
|
exec: function (cmd, cb) {
|
|
cmds ++;
|
|
exec(cmd,cb);
|
|
/*
|
|
if (cmds>10) {
|
|
setTimeout (function () {
|
|
exec(cmd,cb);
|
|
//exec (cmd, function() { cb(a,b,c);cmds--; });
|
|
}, 300);
|
|
} else {
|
|
// exec (cmd, function(a,b,c) { cb(a,b,c);cmds--; });
|
|
exec(cmd,cb);
|
|
}
|
|
*/
|
|
},
|
|
error: function() {
|
|
var x = arguments
|
|
x[0] = module.exports.red + x[0];
|
|
x[x.length-1] = x[x.length-1] + module.exports.reset;
|
|
console.log (x[0]);
|
|
process.exit (1);
|
|
},
|
|
print: function() {
|
|
var x = arguments
|
|
x[0] = module.exports.green + x[0];
|
|
x[x.length-1] = x[x.length-1] + module.exports.reset;
|
|
console.log (x[0]);
|
|
},
|
|
load_config: function() {
|
|
this.slurp (file)
|
|
},
|
|
merge: function(I, defaults) {
|
|
for (var a in defaults)
|
|
I[a] = I[a] || defaults[a];
|
|
return I;
|
|
},
|
|
iterate: function(list, cb, eb) {
|
|
if (list && list.length>0) {
|
|
var count = list.length;
|
|
(function iterate (list, cb, eb) {
|
|
if (list.length>0) {
|
|
cb (list[0],
|
|
function() { iterate (list.slice(1), cb, eb); },
|
|
function() { count--; if (eb && count==0) eb(true); }
|
|
);
|
|
} else if (eb) eb (false);
|
|
})(list, cb, eb);
|
|
} else {
|
|
//if (cb) cb ();
|
|
if (eb) eb (false);
|
|
}
|
|
},
|
|
mkdir_p: function (path, mode, cb, position) {
|
|
mode = mode || 0755;
|
|
position = position || 0;
|
|
parts = require ('path').normalize (path).split('/');
|
|
if (position == 0) {
|
|
if (mkdir_callbacks[path]) {
|
|
mkdir_callbacks[path].push (cb);
|
|
return;
|
|
} else {
|
|
mkdir_callbacks[path] = [cb];
|
|
}
|
|
}
|
|
function callbacks(x) {
|
|
for (var i in mkdir_callbacks[path])
|
|
mkdir_callbacks[path][i](x);
|
|
mkdir_callbacks[path] = undefined;
|
|
}
|
|
if (position >= parts.length)
|
|
return callbacks (false); // full path created
|
|
|
|
var directory = parts.slice (0, position + 1).join('/');
|
|
fs.stat (directory, function (err) {
|
|
if (err === null) {
|
|
return U.mkdir_p (path, mode, cb, position + 1);
|
|
}
|
|
fs.mkdir (directory, mode, function (err) {
|
|
if (err)
|
|
return callbacks(true);
|
|
U.mkdir_p (path, mode, cb, position + 1);
|
|
})
|
|
});
|
|
}
|
|
}
|