juicy-main/std.process.Init.Minimal.zig

Working version(s):

Failing version(s):
0.13.00.14.10.15.20.16.0-dev.2637+6a9510c0e

Code

const std = @import("std");
const builtin = @import("builtin");

pub fn main(init: std.process.Init.Minimal) !void {
    var debug_allocator: std.heap.DebugAllocator(.{}) = .init;
    defer _ = debug_allocator.deinit();
    const gpa = debug_allocator.allocator();

    // ------------------------------------------------------------------------
    // CLI ARGUMENTS, using iterateAllocator()
    var i: u32 = 0;
    var args = try init.args.iterateAllocator(gpa);
    args.deinit();
    while (args.next()) |arg| : (i += 1) {
        std.debug.print("arg[{d}]={s}\n", .{ i, arg });
    }

    // ------------------------------------------------------------------------
    // CLI ARGUMENTS, using iterate()
    var args2 = init.args.iterate();
    while (args2.next()) |arg| {
        std.debug.print("{s}\n", .{arg});
    }

    // ------------------------------------------------------------------------
    // CLI ARGUMENTS, using toSlice
    var arena_allocator: std.heap.ArenaAllocator = .init(std.heap.page_allocator);
    defer arena_allocator.deinit();
    const arena = arena_allocator.allocator();

    // must use an "arena-style allocator"
    const args3 = try init.args.toSlice(arena);
    for (args3) |arg| {
        std.debug.print("arg: {s}\n", .{arg});
    }

    // ------------------------------------------------------------------------
    // ENVIRONMENT VARIABLES
    std.debug.print("contains HOME: {any}\n", .{init.environ.contains(arena, "HOME")});
    std.debug.print("contains HOME (unempty): {any}\n", .{init.environ.containsUnempty(arena, "HOME")});
    std.debug.print("contains EDITOR: {any}\n", .{init.environ.containsConstant("EDITOR")});
    std.debug.print("contains EDITOR (unempty): {any}\n", .{init.environ.containsUnemptyConstant("EDITOR")});

    std.debug.print("EDITOR: {s}\n", .{try init.environ.getAlloc(arena, "HOME")});
    if (builtin.os.tag == .windows) {
        std.debug.print("HOME: {?s}\n", .{init.environ.getWindows("HOME")});
    } else if (builtin.os.tag != .wasi or builtin.link_libc) {
        std.debug.print("HOME: {?s}\n", .{init.environ.getPosix("HOME")});
    }

    const environ_map = try init.environ.createMap(arena);
    for (environ_map.keys(), environ_map.values()) |key, value| {
        std.debug.print("env: {s}={s}\n", .{ key, value });
    }
}

// Ignore below
test {
    try main(.{
        .environ = .{ .block = &.{"HOME='/home'"} },
        .args = .{ .vector = &[_][*:0]const u8{} },
    });
}