diff --git a/lix/libcmd/legacy.hh b/lix/libcmd/legacy.hh index 93b8a5f9f..013baf963 100644 --- a/lix/libcmd/legacy.hh +++ b/lix/libcmd/legacy.hh @@ -5,18 +5,32 @@ #include #include #include +#include #include namespace nix { -typedef std::function)> MainFunction; - struct LegacyCommandRegistry { - using LegacyCommandMap = std::map; + typedef std::function)> MainFunction; + typedef std::function< + int(AsyncIoRoot &, std::string, std::list, std::span)> + RawMainFunction; + + using LegacyCommandMap = std::map; static LegacyCommandMap * commands; static void add(const std::string & name, MainFunction fun) + { + addWithRaw( + name, + [fun](AsyncIoRoot & aio, std::string name, std::list args, std::span) { + return fun(aio, name, args); + } + ); + } + + static void addWithRaw(const std::string & name, RawMainFunction fun) { if (!commands) commands = new LegacyCommandMap; (*commands)[name] = fun; diff --git a/lix/nix/main.cc b/lix/nix/main.cc index ab731b674..ad84d041f 100644 --- a/lix/nix/main.cc +++ b/lix/nix/main.cc @@ -491,7 +491,12 @@ int mainWrapped(AsyncIoRoot & aio, int argc, char ** argv) registerLegacyCommands(); auto legacy = (*LegacyCommandRegistry::commands)[programName]; if (legacy) { - return legacy(aio, std::string(baseNameOf(argv[0])), Strings(argv + 1, argv + argc)); + return legacy( + aio, + std::string(baseNameOf(argv[0])), + Strings(argv + 1, argv + argc), + {argv + 1, argv + argc} + ); } }