From 7c355cef047b69f488370c3fa29ef1a3d6aef386 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Niemier?= <~@hauleth.dev> Date: Wed, 21 Jan 2026 11:28:03 +0100 Subject: [PATCH] Fix map merge order in stat encoding --- nix/kamid/default.nix | 4 +++- nix/kamid/mode_format.patch | 18 ++++++++++++++++++ src/e9p_msg.erl | 3 +-- 3 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 nix/kamid/mode_format.patch diff --git a/nix/kamid/default.nix b/nix/kamid/default.nix index 28d594d..216388a 100644 --- a/nix/kamid/default.nix +++ b/nix/kamid/default.nix @@ -25,7 +25,9 @@ kamid.overrideAttrs (old: { bison ]; - patches = lib.optionals stdenv.isDarwin [ ./macos.patch ]; + patches = lib.optionals stdenv.isDarwin [ + ./macos.patch + ]; meta.package.platforms = old.meta.package.platforms ++ [ "aarch64-darwin" diff --git a/nix/kamid/mode_format.patch b/nix/kamid/mode_format.patch new file mode 100644 index 0000000..ac8057d --- /dev/null +++ b/nix/kamid/mode_format.patch @@ -0,0 +1,18 @@ +diff --git i/kamiftp/ftp.c w/kamiftp/ftp.c +index f776ea7..8119db0 100644 +--- i/kamiftp/ftp.c ++++ w/kamiftp/ftp.c +@@ -1005,9 +1005,10 @@ print_dirent(const struct np_stat *st) + printf("d"); + else + printf("-"); +- printf("%s", pp_perm(st->mode >> 6)); +- printf("%s", pp_perm(st->mode >> 3)); +- printf("%s", pp_perm(st->mode)); ++ printf("%o", st->mode); ++ // printf("%s", pp_perm(st->mode >> 6)); ++ // printf("%s", pp_perm(st->mode >> 3)); ++ // printf("%s", pp_perm(st->mode)); + printf(" %8s %12s %s%s\n", fmt, tim, st->name, + st->qid.type & QTDIR ? "/" : ""); + diff --git a/src/e9p_msg.erl b/src/e9p_msg.erl index a2789af..9e98275 100644 --- a/src/e9p_msg.erl +++ b/src/e9p_msg.erl @@ -288,7 +288,6 @@ encode_stat(Stat) -> gid := Gid, muid := MUid } = maps:merge( - Stat, #{ type => 0, dev => 0, @@ -298,7 +297,7 @@ encode_stat(Stat) -> uid => ~"", gid => ~"", muid => ~"" - }), + }, Stat), Encoded = [<< Type:2/?int, Dev:4/?int -- 2.51.2