Browse Source

Add fs.readdirSync()

v0.7.4-release
Micheil Smith 15 years ago
committed by Ryan Dahl
parent
commit
05d6da6c4a
  1. 29
      src/node_file.cc
  2. 41
      test/mjsunit/test-readdir.js

29
src/node_file.cc

@ -10,6 +10,8 @@
#include <string.h>
#include <errno.h>
#include <dirent.h>
namespace node {
using namespace v8;
@ -304,6 +306,10 @@ static Handle<Value> SendFile(const Arguments& args) {
}
}
static inline int scandir_one(struct dirent *unused) {
return 1;
}
static Handle<Value> ReadDir(const Arguments& args) {
HandleScope scope;
@ -316,9 +322,26 @@ static Handle<Value> ReadDir(const Arguments& args) {
if (args[1]->IsFunction()) {
ASYNC_CALL(readdir, args[1], *path, 0 /*flags*/)
} else {
// TODO
return ThrowException(Exception::Error(
String::New("synchronous readdir() not yet supported.")));
struct dirent **eps;
int n = scandir(*path, &eps, scandir_one, alphasort);
if ( n >= 0) {
int cnt;
char *name;
Local<Array> res = Array::New(n);
for(cnt = 0; cnt < n; ++cnt) {
name = eps[cnt]->d_name;
if (name [0] != '.') {
res->Set(Integer::New(cnt), String::New(name));
}
}
return scope.Close(res);
} else {
return ThrowException(errno_exception(errno));
}
}
}

41
test/mjsunit/test-readdir.js

@ -2,28 +2,37 @@ process.mixin(require("./common"));
var got_error = false;
fs.readdir(fixturesDir, function (err, files) {
var files = ['a.js'
, 'b'
, 'cycles'
, 'echo.js'
, 'multipart.js'
, 'nested-index'
, 'print-chars.js'
, 'test_ca.pem'
, 'test_cert.pem'
, 'test_key.pem'
, 'throws_error.js'
, 'x.txt'
];
puts('readdirSync ' + fixturesDir);
var f = fs.readdirSync(fixturesDir);
p(f);
assert.deepEqual(files, f.sort());
puts("readdir " + fixturesDir);
fs.readdir(fixturesDir, function (err, f) {
if (err) {
puts("error");
got_error = true;
} else {
p(files);
assert.deepEqual(['a.js'
, 'b'
, 'cycles'
, 'echo.js'
, 'multipart.js'
, 'nested-index'
, 'print-chars.js'
, 'test_ca.pem'
, 'test_cert.pem'
, 'test_key.pem'
, 'throws_error.js'
, 'x.txt'
], files.sort());
p(f);
assert.deepEqual(files, f.sort());
}
});
puts("readdir " + fixturesDir);
process.addListener("exit", function () {
assert.equal(false, got_error);

Loading…
Cancel
Save