summaryrefslogtreecommitdiff
path: root/apt-private
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2015-11-29 13:12:38 +0100
committerDavid Kalnischkies <david@kalnischkies.de>2015-11-29 13:12:38 +0100
commit90986d4dbbd38e2e89f986d621e301304210452e (patch)
treecb7959bfc62be9765e55d2591f71a532f832a896 /apt-private
parent875a9e54ba956dace823866bca7935f6ab8e8d06 (diff)
use function pointers instead of weak symbols for cmdline parsing
Passing function pointers around while working on this was very icky, but if weak symbols are too much to ask for… Reverts "do not use "-Wl,-Bsymbolic-functions" during the build to avoid breakage" aka a5fc9be36211a290a7abc3ca2a8bf98943bc1f57.
Diffstat (limited to 'apt-private')
-rw-r--r--apt-private/private-cmndline.cc16
-rw-r--r--apt-private/private-cmndline.h3
2 files changed, 9 insertions, 10 deletions
diff --git a/apt-private/private-cmndline.cc b/apt-private/private-cmndline.cc
index 9c5eae470..6cffbcb48 100644
--- a/apt-private/private-cmndline.cc
+++ b/apt-private/private-cmndline.cc
@@ -378,7 +378,8 @@ static void ShowHelpListCommands(std::vector<aptDispatchWithHelp> const &Cmds)/*
}
}
/*}}}*/
-static bool ShowCommonHelp(APT_CMD const Binary, CommandLine &CmdL, std::vector<aptDispatchWithHelp> const &Cmds)/*{{{*/
+static bool ShowCommonHelp(APT_CMD const Binary, CommandLine &CmdL, std::vector<aptDispatchWithHelp> const &Cmds,/*{{{*/
+ bool (*ShowHelp)(CommandLine &))
{
std::cout << PACKAGE << " " << PACKAGE_VERSION << " (" << COMMON_ARCH << ")" << std::endl;
if (_config->FindB("version") == true && Binary != APT_CMD::APT_GET)
@@ -442,7 +443,8 @@ static void BinarySpecificConfiguration(char const * const Binary) /*{{{*/
}
/*}}}*/
std::vector<CommandLine::Dispatch> ParseCommandLine(CommandLine &CmdL, APT_CMD const Binary,/*{{{*/
- Configuration * const * const Cnf, pkgSystem ** const Sys, int const argc, const char *argv[])
+ Configuration * const * const Cnf, pkgSystem ** const Sys, int const argc, const char *argv[],
+ bool (*ShowHelp)(CommandLine &), std::vector<aptDispatchWithHelp> (*GetCommands)(void))
{
if (Cnf != NULL && pkgInitConfig(**Cnf) == false)
{
@@ -477,7 +479,7 @@ std::vector<CommandLine::Dispatch> ParseCommandLine(CommandLine &CmdL, APT_CMD c
(Sys != NULL && pkgInitSystem(*_config, *Sys) == false))
{
if (_config->FindB("version") == true)
- ShowCommonHelp(Binary, CmdL, CmdsWithHelp);
+ ShowCommonHelp(Binary, CmdL, CmdsWithHelp, ShowHelp);
_error->DumpErrors();
exit(100);
@@ -487,12 +489,12 @@ std::vector<CommandLine::Dispatch> ParseCommandLine(CommandLine &CmdL, APT_CMD c
if (_config->FindB("help") == true || _config->FindB("version") == true ||
(CmdL.FileSize() > 0 && strcmp(CmdL.FileList[0], "help") == 0))
{
- ShowCommonHelp(Binary, CmdL, CmdsWithHelp);
+ ShowCommonHelp(Binary, CmdL, CmdsWithHelp, ShowHelp);
exit(0);
}
if (Cmds.empty() == false && CmdL.FileSize() == 0)
{
- ShowCommonHelp(Binary, CmdL, CmdsWithHelp);
+ ShowCommonHelp(Binary, CmdL, CmdsWithHelp, ShowHelp);
exit(1);
}
return Cmds;
@@ -514,7 +516,3 @@ unsigned short DispatchCommandLine(CommandLine &CmdL, std::vector<CommandLine::D
return Errors == true ? 100 : 0;
}
/*}}}*/
-
-// weak symbols
-bool ShowHelp(CommandLine &) { return false; }
-std::vector<aptDispatchWithHelp> GetCommands() { return {}; }
diff --git a/apt-private/private-cmndline.h b/apt-private/private-cmndline.h
index 4819adce1..05690964d 100644
--- a/apt-private/private-cmndline.h
+++ b/apt-private/private-cmndline.h
@@ -33,7 +33,8 @@ struct aptDispatchWithHelp
APT_PUBLIC std::vector<aptDispatchWithHelp> GetCommands() APT_WEAK;
APT_PUBLIC std::vector<CommandLine::Dispatch> ParseCommandLine(CommandLine &CmdL, APT_CMD const Binary,
- Configuration * const * const Cnf, pkgSystem ** const Sys, int const argc, const char * argv[]);
+ Configuration * const * const Cnf, pkgSystem ** const Sys, int const argc, const char * argv[],
+ bool (*ShowHelp)(CommandLine &), std::vector<aptDispatchWithHelp> (*GetCommands)(void));
APT_PUBLIC unsigned short DispatchCommandLine(CommandLine &CmdL, std::vector<CommandLine::Dispatch> const &Cmds);
APT_PUBLIC std::vector<CommandLine::Args> getCommandArgs(APT_CMD const Program, char const * const Cmd);