Added mkdtemp method (issue #441)
This commit is contained in:
parent
fd3de6be2c
commit
37da7097b0
|
@ -1678,6 +1678,55 @@ function mkdir(fs, context, path, mode, callback) {
|
||||||
make_directory(context, path, callback);
|
make_directory(context, path, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function mkdtemp(fs, context, prefix, callback) {
|
||||||
|
callback = arguments[arguments.length - 1];
|
||||||
|
|
||||||
|
// this function is ised to generate a random character set to append
|
||||||
|
// to tmp dir name to make sure it is unique
|
||||||
|
function generateRandom() {
|
||||||
|
return 'xxxxxx'.replace(/[xy]/g, function(c) {
|
||||||
|
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
|
||||||
|
return v.toString(16);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
var tmpDir = "/tmp"; //tmp dir in root
|
||||||
|
var tmpDirExists = false; //flag to check if already created
|
||||||
|
|
||||||
|
if (!prefix) {
|
||||||
|
prefix = generateRandom(); //if user did not specify prefix
|
||||||
|
}
|
||||||
|
prefix = prefix + "-" + generateRandom();
|
||||||
|
var path = Path.join(tmpDir, prefix); //path to a new tmp dir
|
||||||
|
|
||||||
|
// check if root temporary directory '/tmp' already exists
|
||||||
|
fs.stat(tmpDir, function(error, stats) {
|
||||||
|
if (!error) {
|
||||||
|
if (stats.isDirectory()) {
|
||||||
|
tmpDirExists = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//try to create /tmp in root
|
||||||
|
if (!tmpDirExists) {
|
||||||
|
make_directory(context, tmpDir, function(error) {
|
||||||
|
if (error) {
|
||||||
|
callback(error, path)
|
||||||
|
} else {
|
||||||
|
//create new temp dir in /tmp
|
||||||
|
make_directory(context, path, function(error) {
|
||||||
|
if (error) {
|
||||||
|
callback(error, path)
|
||||||
|
} else {
|
||||||
|
callback(null, path);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function rmdir(fs, context, path, callback) {
|
function rmdir(fs, context, path, callback) {
|
||||||
if(!pathCheck(path, callback)) return;
|
if(!pathCheck(path, callback)) return;
|
||||||
remove_directory(context, path, callback);
|
remove_directory(context, path, callback);
|
||||||
|
|
|
@ -276,6 +276,7 @@ function FileSystem(options, callback) {
|
||||||
'close',
|
'close',
|
||||||
'mknod',
|
'mknod',
|
||||||
'mkdir',
|
'mkdir',
|
||||||
|
'mkdtemp',
|
||||||
'rmdir',
|
'rmdir',
|
||||||
'stat',
|
'stat',
|
||||||
'fstat',
|
'fstat',
|
||||||
|
|
Loading…
Reference in New Issue