fn strndup(str: [*:0]const c_char, n: usize) callconv(.c) ?[*:0]c_char
fn strndup(str: [*:0]const c_char, n: usize) callconv(.c) ?[*:0]c_char { const len = strnlen(str, n); const d_opaque = c.malloc(len + 1) orelse return null; const d: [*]c_char = @ptrCast(d_opaque); @memcpy(d[0..len], str[0..len]); d[len] = 0; return @ptrCast(d); }