I am calling a the following function from the build script and I keep getting the error: expected type '[]const u8', found 'std.fs.OpenError'
.
fn addSources(directory: []const u8, b: *std.build.Builder) []const u8 {
//Searching for source files
var sources = std.ArrayList([]const u8).init(b.allocator);
{
var dir = try std.fs.cwd().openDir(directory, .{ .iterate = true });
var walker = try dir.walk(b.allocator);
defer walker.deinit();
const allowed_exts = [_][]const u8{ ".c", ".cpp" };
while (try walker.next()) |entry| {
const ext = std.fs.path.extension(entry.basename);
const include_file = for (allowed_exts) |e| {
if (std.mem.eql(u8, ext, e))
break true;
} else false;
if (include_file) {
try sources.append(b.dupe(entry.path));
}
}
}
return sources.items;
}
The function call is as follows: var jetSource = addSources("./src/jet", b);
where ./src/jet
is the path. From what I understand the Zig is unable to open the directory. But, I don’t know why, because the error is dumb and is not detailed enough. I just need a way to get the paths of all the files recursively in a folder I pass that end in *.c
and *.cpp
.
I read in the source that /
is invalid in Windows. I replaced the path with \\src\\jet
and it still doesn’t work.
I am using Zig 0.9.1 on Windows.
>Solution :
error: expected type '[]const u8', found 'std.fs.OpenError'
This is a compilation error. Your function uses try
, but doesn’t return an error union type. Change the return type to ![]const u8
.
Also, you need to use try
to call your function: var jetSource = try addSources(...);
.