Something went wrong. Try again.
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647const std = @import("std");
const cdl = @import("root.zig");
pub const Options = struct { trimmed: bool = false,};
pub fn spawn(argv: []const []const u8, opts: ?Options) ![]const u8 { if (!std.process.can_spawn) { return error.NoChildProcess; }
var child = try std.process.spawn(cdl.io, .{ .argv = argv, .environ_map = cdl.environ_map, .stdin = .ignore, .stdout = .pipe, .stderr = .ignore, });
var stdout_reader = child.stdout.?.readerStreaming(cdl.io, &.{}); const stdout = stdout_reader.interface.allocRemaining(cdl.gpa, .limited(0x100)) catch return error.ReadFailure; errdefer cdl.gpa.free(stdout);
const term = try child.wait(cdl.io);
const raw = blk: switch (term) { .exited => |code| { if (code != 0) { return error.ExitCodeFailure; } break :blk stdout; }, .signal, .stopped => return error.ProcessTerminated, .unknown => return error.ProcessTerminated, }; if (opts == null) return raw;
if (opts) |o| if (o.trimmed) { defer cdl.gpa.free(raw); return try cdl.gpa.dupe(u8, std.mem.trim(u8, raw, " \n\r")); };
return raw;}