Merge pull request #67 from ValKmjolnir/develop
🐛 if io.stat fails, return nil
This commit is contained in:
commit
9ea97c5608
|
@ -178,8 +178,9 @@ var builtin_stat(context* ctx, gc* ngc) {
|
|||
return nas_err("io::stat", "\"filename\" must be string");
|
||||
}
|
||||
struct stat buffer;
|
||||
if (stat(name.str().c_str(), &buffer)<0) {
|
||||
return nas_err("io::stat", "failed to open file <" + name.str() + ">");
|
||||
// if failed to stat, return nil
|
||||
if (stat(name.str().c_str(), &buffer) < 0) {
|
||||
return nil;
|
||||
}
|
||||
auto result = ngc->alloc(vm_type::vm_vec);
|
||||
result.vec().elems = {
|
||||
|
|
|
@ -76,6 +76,9 @@ var stderr = func() { return __stderr; }();
|
|||
# get file status. using data from stat
|
||||
var fstat = func(filename) {
|
||||
var s = stat(filename);
|
||||
if (s == nil) {
|
||||
return nil;
|
||||
}
|
||||
return {
|
||||
st_dev: s[0],
|
||||
st_ino: s[1],
|
||||
|
|
12
std/unix.nas
12
std/unix.nas
|
@ -8,11 +8,19 @@ var _S_IFDIR = 0x4000;
|
|||
var _S_IFREG = 0x8000;
|
||||
|
||||
var isdir = func(path) {
|
||||
return !!bits.u32_and(io.stat(path)[2], _S_IFDIR);
|
||||
var s = io.stat(path);
|
||||
if (s == nil) {
|
||||
return false;
|
||||
}
|
||||
return !!bits.u32_and(s[2], _S_IFDIR);
|
||||
}
|
||||
|
||||
var isfile = func(path) {
|
||||
return !!bits.u32_and(io.stat(path)[2], _S_IFREG);
|
||||
var s = io.stat(path);
|
||||
if (s == nil) {
|
||||
return false;
|
||||
}
|
||||
return !!bits.u32_and(s[2], _S_IFREG);
|
||||
}
|
||||
|
||||
var opendir = func(path) {
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
use std.unix;
|
||||
use std.file;
|
||||
|
||||
var path_vec = split(":", unix.getenv("PATH"));
|
||||
foreach (var path; path_vec) {
|
||||
var files = file.find_all_files(path);
|
||||
foreach (var f; files) {
|
||||
if (f == "clang") {
|
||||
println(path ~ "/" ~ f);
|
||||
} elsif (find("clang-", f) == 0 and isnum(substr(f, 5, size(f)))) {
|
||||
println(path ~ "/" ~ f);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue