radare2/build/make.js/utils.js

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);
})
});
}
}