ref: beab0276a94c684f938ae5ea3d2c29c3dc331386
dir: /lib/inifile/write.myr/
use std use bio use "types" pkg inifile = const write : (ini : inifile#, path : byte[:] -> bool) const writef : (ini : inifile#, fd : std.fd -> bool) ;; const write = {ini, path var ret match bio.create(path, bio.Wr, 0o666) | `std.Err e: -> false | `std.Ok f: ret = writeini(f, ini) bio.close(f) ;; -> ret } const writef = {ini, fd var f, ret f = bio.mkfile(fd, bio.Wr) ret = writeini(f, ini) bio.close(f) -> ret } const writeini = {f, ini var oldsect, val var keys keys = std.htkeys(ini.elts) std.sort(keys, {a, b var sa, sb (sa, _) = a (sb, _) = b -> std.strcmp(sa, sb) }) oldsect = "" for (sect, key) : keys if !std.eq(sect, oldsect) bio.put(f, "[{}]\n", sect) ;; oldsect = sect val = std.htgetv(ini.elts, (sect, key), "") match bio.put(f, "\t{} = {}\n", key, val) | `std.Err e: -> false | _: ;; ;; std.slfree(keys) -> true }