From e4d9ee3fbc58c5993db0c75c647fdf904c520918 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Tue, 12 Aug 2025 14:04:42 +0100 Subject: [PATCH] generator: Allow StringList(Pathname) parameters This was previously not implemented. It just requires us to call ABS_PATH on each parameter. ABS_PATH checks the parameter is an absolute path. --- generator/checks.ml | 1 - generator/daemon.ml | 16 ++++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/generator/checks.ml b/generator/checks.ml index d64d49d66..4207c0677 100644 --- a/generator/checks.ml +++ b/generator/checks.ml @@ -166,7 +166,6 @@ let () = | StringList (FileIn, _) | StringList (FileOut, _) | StringList (Mountable, _) - | StringList (Pathname, _) | StringList (Dev_or_Path, _) | StringList (Mountable_or_Path, _) | StringList (Key, _) diff --git a/generator/daemon.ml b/generator/daemon.ml index 2b74f3059..6197288df 100644 --- a/generator/daemon.ml +++ b/generator/daemon.ml @@ -173,7 +173,7 @@ let generate_daemon_stubs actions () = | String ((Mountable|Mountable_or_Path), n) -> pr " CLEANUP_FREE_MOUNTABLE mountable_t %s\n" n; pr " = { .device = NULL, .volume = NULL };\n" - | StringList ((PlainString|Filename), n) -> + | StringList ((PlainString|Filename|Pathname), n) -> pr " char **%s;\n" n | StringList (Device, n) -> pr " CLEANUP_FREE_STRING_LIST char **%s = NULL;\n" n @@ -184,7 +184,7 @@ let generate_daemon_stubs actions () = pr " const char *%s;\n" n; pr " size_t %s_size;\n" n | String ((FileIn|FileOut|Filename), _) - | StringList ((Mountable|Pathname|FileIn|FileOut|Key|GUID + | StringList ((Mountable|FileIn|FileOut|Key|GUID |Dev_or_Path|Mountable_or_Path), _) | Pointer _ -> assert false ) args_passed_to_daemon @@ -260,7 +260,7 @@ let generate_daemon_stubs actions () = n n is_filein; | String ((PlainString|Key|GUID), n) -> pr_args n | OptString n -> pr " %s = args.%s ? *args.%s : NULL;\n" n n n - | StringList ((PlainString|Filename) as arg, n) -> + | StringList ((PlainString|Filename|Pathname) as arg, n) -> (match arg with | Filename -> pr " {\n"; @@ -275,6 +275,14 @@ let generate_daemon_stubs actions () = pr " }\n"; pr " }\n"; pr " }\n" + | Pathname -> + pr " {\n"; + pr " size_t i;\n"; + pr " for (i = 0; i < args.%s.%s_len; ++i) {\n" n n; + pr " ABS_PATH (args.%s.%s_val[i], %b, return);\n" + n n is_filein; + pr " }\n"; + pr " }\n" | _ -> () ); pr " /* Ugly, but safe and avoids copying the strings. */\n"; @@ -307,7 +315,7 @@ let generate_daemon_stubs actions () = pr " %s = args.%s.%s_val;\n" n n n; pr " %s_size = args.%s.%s_len;\n" n n n | String ((FileIn|FileOut|Filename), _) - | StringList ((Mountable|Pathname|FileIn|FileOut|Key|GUID + | StringList ((Mountable|FileIn|FileOut|Key|GUID |Dev_or_Path|Mountable_or_Path), _) | Pointer _ -> assert false ) args_passed_to_daemon; -- 2.47.1