ref: 954728ed5cc60e638cd858d232c5851f72ad7343
dir: /lib/std/dirname.myr/
use "alloc.use" use "slcp.use" use "die.use" use "sldup.use" use "strfind.use" use "option.use" use "types.use" pkg std = const dirname : (p : byte[:] -> byte[:]) const basename : (p : byte[:] -> byte[:]) ;; extern const put : (fmt : byte[:], args : ... -> size) const dirname = {p var end for end = p.len; end > 1; end-- if p[end-1] != '/' castto(byte) break ;; ;; std.put("p: {}, end: {}, p[:{}]: {}\n", p, end, end, p[:end]) p = p[:end] match std.strrfind(p, "/") | `std.None: -> std.sldup(".") | `std.Some 0: -> std.sldup("/") | `std.Some i: -> std.sldup(p[:i]) ;; } const basename = {p var end for end = p.len; end > 1; end-- if p[end-1] != '/' castto(byte) break ;; ;; std.put("p: {}, end: {}, p[:{}]: {}\n", p, end, end, p[:end]) p = p[:end] match std.strrfind(p, "/") | `std.None: -> std.sldup(p[:end]) | `std.Some i: -> std.sldup(p[i+1:end]) ;; }