Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

expected type '[]const u8', found 'std.fs.OpenError'

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.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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(...);.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading