cli: pass cmd to NMCCommand.func()

It is useful from inside a function to know the command that it belongs to.
Currently we have do_networking_on() and do_networking_off() as separate
functions. However, these are basically the same with a minor difference.
If the func callback could know the "cmd" that it was called for, these
function can be combined.

Of course, without passing the NMCCommand instance, you still can
achieve the same results, especially as the NMCCommand instances are
static and known at compile time: just have separate func
implementations. But by passing the command to the function, they
*can* be combined, which is a useful thing to do.
This commit is contained in:
Thomas Haller 2020-04-05 12:16:08 +02:00
parent e05f35f9f1
commit d39f5c264b
6 changed files with 70 additions and 70 deletions

View file

@ -122,7 +122,7 @@ secrets_requested (NMSecretAgentSimple *agent,
}
static NMCResultCode
do_agent_secret (NmCli *nmc, int argc, char **argv)
do_agent_secret (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
next_arg (nmc, &argc, &argv, NULL);
if (nmc->complete)
@ -164,7 +164,7 @@ polkit_error (gpointer instance,
}
static NMCResultCode
do_agent_polkit (NmCli *nmc, int argc, char **argv)
do_agent_polkit (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
gs_free_error GError *error = NULL;
@ -198,7 +198,7 @@ do_agent_polkit (NmCli *nmc, int argc, char **argv)
}
static NMCResultCode
do_agent_all (NmCli *nmc, int argc, char **argv)
do_agent_all (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMCResultCode secret_res;
@ -207,13 +207,13 @@ do_agent_all (NmCli *nmc, int argc, char **argv)
return nmc->return_value;
/* Run both secret and polkit agent */
secret_res = do_agent_secret (nmc, argc, argv);
secret_res = do_agent_secret (cmd, nmc, argc, argv);
if (secret_res != NMC_RESULT_SUCCESS) {
g_printerr ("%s\n", nmc->return_text->str);
g_string_truncate (nmc->return_text, 0);
}
nmc->return_value = do_agent_polkit (nmc, argc, argv);
nmc->return_value = do_agent_polkit (cmd, nmc, argc, argv);
if (nmc->return_value != NMC_RESULT_SUCCESS) {
g_printerr ("%s\n", nmc->return_text->str);
g_string_truncate (nmc->return_text, 0);
@ -226,7 +226,7 @@ do_agent_all (NmCli *nmc, int argc, char **argv)
}
NMCResultCode
nmc_command_func_agent (NmCli *nmc, int argc, char **argv)
nmc_command_func_agent (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
static const NMCCommand cmds[] = {
{ "secret", do_agent_secret, usage_agent_secret, TRUE, TRUE },

View file

@ -1263,7 +1263,7 @@ call_cmd (NmCli *nmc, GTask *task, const NMCCommand *cmd, int argc, char **argv)
g_task_return_new_error (task, NMCLI_ERROR, NMC_RESULT_ERROR_NM_NOT_RUNNING,
_("Error: NetworkManager is not running."));
} else {
nmc->return_value = cmd->func (nmc, argc, argv);
nmc->return_value = cmd->func (cmd, nmc, argc, argv);
g_task_return_boolean (task, TRUE);
}

View file

@ -2028,7 +2028,7 @@ get_connection (NmCli *nmc,
}
static NMCResultCode
do_connections_show (NmCli *nmc, int argc, char **argv)
do_connections_show (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
gs_free_error GError *err = NULL;
gs_free char *profile_flds = NULL;
@ -2855,7 +2855,7 @@ nmc_activate_connection (NmCli *nmc,
}
static NMCResultCode
do_connection_up (NmCli *nmc, int argc, char **argv)
do_connection_up (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMConnection *connection = NULL;
const char *ifname = NULL;
@ -3113,7 +3113,7 @@ connection_op_timeout_cb (gpointer user_data)
}
static NMCResultCode
do_connection_down (NmCli *nmc, int argc, char **argv)
do_connection_down (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMActiveConnection *active;
ConnectionCbInfo *info = NULL;
@ -5349,7 +5349,7 @@ again:
}
static NMCResultCode
do_connection_add (NmCli *nmc, int argc, char **argv)
do_connection_add (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
gs_unref_object NMConnection *connection = NULL;
NMSettingConnection *s_con;
@ -8355,7 +8355,7 @@ nmc_complete_connection_type (const char *prefix)
}
static NMCResultCode
do_connection_edit (NmCli *nmc, int argc, char **argv)
do_connection_edit (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
const GPtrArray *connections;
gs_unref_object NMConnection *connection = NULL;
@ -8574,9 +8574,7 @@ modify_connection_cb (GObject *connection,
}
static NMCResultCode
do_connection_modify (NmCli *nmc,
int argc,
char **argv)
do_connection_modify (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMConnection *connection = NULL;
NMRemoteConnection *rc = NULL;
@ -8644,7 +8642,7 @@ clone_connection_cb (GObject *client,
}
static NMCResultCode
do_connection_clone (NmCli *nmc, int argc, char **argv)
do_connection_clone (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMConnection *connection = NULL;
gs_unref_object NMConnection *new_connection = NULL;
@ -8745,7 +8743,7 @@ delete_cb (GObject *con, GAsyncResult *result, gpointer user_data)
}
static NMCResultCode
do_connection_delete (NmCli *nmc, int argc, char **argv)
do_connection_delete (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMConnection *connection;
ConnectionCbInfo *info = NULL;
@ -8891,7 +8889,7 @@ connection_removed (NMClient *client, NMRemoteConnection *con, NmCli *nmc)
}
static NMCResultCode
do_connection_monitor (NmCli *nmc, int argc, char **argv)
do_connection_monitor (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
GError *error = NULL;
guint i;
@ -8940,7 +8938,7 @@ do_connection_monitor (NmCli *nmc, int argc, char **argv)
}
static NMCResultCode
do_connection_reload (NmCli *nmc, int argc, char **argv)
do_connection_reload (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
gs_unref_variant GVariant *result = NULL;
gs_free_error GError *error = NULL;
@ -8966,7 +8964,7 @@ do_connection_reload (NmCli *nmc, int argc, char **argv)
}
static NMCResultCode
do_connection_load (NmCli *nmc, int argc, char **argv)
do_connection_load (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
GError *error = NULL;
char **filenames, **failures = NULL;
@ -9007,7 +9005,7 @@ do_connection_load (NmCli *nmc, int argc, char **argv)
#define PROMPT_IMPORT_FILE N_("File to import: ")
static NMCResultCode
do_connection_import (NmCli *nmc, int argc, char **argv)
do_connection_import (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
gs_free_error GError *error = NULL;
const char *type = NULL, *filename = NULL;
@ -9140,7 +9138,7 @@ do_connection_import (NmCli *nmc, int argc, char **argv)
}
static NMCResultCode
do_connection_export (NmCli *nmc, int argc, char **argv)
do_connection_export (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMConnection *connection = NULL;
const char *out_name = NULL;
@ -9343,7 +9341,7 @@ nmcli_con_tab_completion (const char *text, int start, int end)
}
NMCResultCode
nmc_command_func_connection (NmCli *nmc, int argc, char **argv)
nmc_command_func_connection (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
static const NMCCommand cmds[] = {
{ "show", do_connections_show, usage_connection_show, TRUE, TRUE },
@ -9376,5 +9374,5 @@ nmc_command_func_connection (NmCli *nmc, int argc, char **argv)
void
monitor_connections (NmCli *nmc)
{
do_connection_monitor (nmc, 0, NULL);
do_connection_monitor (NULL, nmc, 0, NULL);
}

View file

@ -1729,7 +1729,7 @@ nmc_device_state_to_color (NMDeviceState state)
}
static NMCResultCode
do_devices_status (NmCli *nmc, int argc, char **argv)
do_devices_status (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
GError *error = NULL;
gs_free NMDevice **devices = NULL;
@ -1769,7 +1769,7 @@ do_devices_status (NmCli *nmc, int argc, char **argv)
}
static NMCResultCode
do_device_show (NmCli *nmc, int argc, char **argv)
do_device_show (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
gs_free_error GError *error = NULL;
@ -2037,7 +2037,7 @@ connect_device_cb (GObject *client, GAsyncResult *result, gpointer user_data)
}
static NMCResultCode
do_device_connect (NmCli *nmc, int argc, char **argv)
do_device_connect (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMDevice *device = NULL;
AddAndActivateInfo *info;
@ -2207,7 +2207,7 @@ reapply_device_cb (GObject *object, GAsyncResult *result, gpointer user_data)
}
static NMCResultCode
do_device_reapply (NmCli *nmc, int argc, char **argv)
do_device_reapply (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMDevice *device;
DeviceCbInfo *info = NULL;
@ -2319,7 +2319,7 @@ modify_get_applied_cb (GObject *object,
}
static NMCResultCode
do_device_modify (NmCli *nmc, int argc, char **argv)
do_device_modify (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMDevice *device = NULL;
ModifyInfo *info = NULL;
@ -2386,7 +2386,7 @@ disconnect_device_cb (GObject *object, GAsyncResult *result, gpointer user_data)
}
static NMCResultCode
do_devices_disconnect (NmCli *nmc, int argc, char **argv)
do_devices_disconnect (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMDevice *device;
DeviceCbInfo *info = NULL;
@ -2458,7 +2458,7 @@ delete_device_cb (GObject *object, GAsyncResult *result, gpointer user_data)
}
static NMCResultCode
do_devices_delete (NmCli *nmc, int argc, char **argv)
do_devices_delete (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMDevice *device;
DeviceCbInfo *info = NULL;
@ -2499,7 +2499,7 @@ out:
}
static NMCResultCode
do_device_set (NmCli *nmc, int argc, char **argv)
do_device_set (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
#define DEV_SET_AUTOCONNECT 0
#define DEV_SET_MANAGED 1
@ -2658,7 +2658,7 @@ device_removed (NMClient *client, NMDevice *device, NmCli *nmc)
}
static NMCResultCode
do_devices_monitor (NmCli *nmc, int argc, char **argv)
do_devices_monitor (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
if (nmc->complete)
return nmc->return_value;
@ -3028,7 +3028,7 @@ nmc_complete_bssid (NMClient *client, const char *ifname, const char *bssid_pref
}
static NMCResultCode
do_device_wifi_list (NmCli *nmc, int argc, char **argv)
do_device_wifi_list (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
GError *error = NULL;
NMDevice *device = NULL;
@ -3294,7 +3294,7 @@ save_and_activate_connection (NmCli *nmc,
}
static NMCResultCode
do_device_wifi_connect (NmCli *nmc, int argc, char **argv)
do_device_wifi_connect (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMDevice *device = NULL;
NMAccessPoint *ap = NULL;
@ -3935,7 +3935,7 @@ create_hotspot_conn (const GPtrArray *connections,
}
static NMCResultCode
do_device_wifi_hotspot (NmCli *nmc, int argc, char **argv)
do_device_wifi_hotspot (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
const char *ifname = NULL;
const char *con_name = NULL;
@ -4138,7 +4138,7 @@ request_rescan_cb (GObject *object, GAsyncResult *result, gpointer user_data)
}
static NMCResultCode
do_device_wifi_rescan (NmCli *nmc, int argc, char **argv)
do_device_wifi_rescan (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMDevice *device;
const char *ifname = NULL;
@ -4369,7 +4369,7 @@ wifi_show_device (const NmcConfig *nmc_config, NMDevice *device, GError **error)
}
static NMCResultCode
do_device_wifi_show_password (NmCli *nmc, int argc, char **argv)
do_device_wifi_show_password (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
const char *ifname = NULL;
gs_free NMDevice **devices = NULL;
@ -4453,7 +4453,7 @@ static NMCCommand device_wifi_cmds[] = {
};
static NMCResultCode
do_device_wifi (NmCli *nmc, int argc, char **argv)
do_device_wifi (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
next_arg (nmc, &argc, &argv, NULL);
nmc_do_cmd (nmc, device_wifi_cmds, *argv, argc, argv);
@ -4547,7 +4547,7 @@ show_device_lldp_list (NMDevice *device, NmCli *nmc, const char *fields_str, int
}
static NMCResultCode
do_device_lldp_list (NmCli *nmc, int argc, char **argv)
do_device_lldp_list (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMDevice *device = NULL;
gs_free_error GError *error = NULL;
@ -4618,7 +4618,7 @@ static NMCCommand device_lldp_cmds[] = {
};
static NMCResultCode
do_device_lldp (NmCli *nmc, int argc, char **argv)
do_device_lldp (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
if (!nmc->mode_specified)
nmc->nmc_config_mutable.multiline_output = TRUE; /* multiline mode is default for 'device lldp' */
@ -4672,7 +4672,7 @@ nmcli_device_tab_completion (const char *text, int start, int end)
}
NMCResultCode
nmc_command_func_device (NmCli *nmc, int argc, char **argv)
nmc_command_func_device (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
static const NMCCommand cmds[] = {
{ "status", do_devices_status, usage_device_status, TRUE, TRUE },
@ -4702,5 +4702,5 @@ nmc_command_func_device (NmCli *nmc, int argc, char **argv)
void
monitor_devices (NmCli *nmc)
{
do_devices_monitor (nmc, 0, NULL);
do_devices_monitor (NULL, nmc, 0, NULL);
}

View file

@ -490,7 +490,7 @@ show_nm_status (NmCli *nmc, const char *pretty_header_name, const char *print_fl
}
static NMCResultCode
do_general_status (NmCli *nmc, int argc, char **argv)
do_general_status (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
next_arg (nmc, &argc, &argv, NULL);
if (nmc->complete)
@ -609,7 +609,7 @@ show_nm_permissions (NmCli *nmc)
}
static NMCResultCode
do_general_reload (NmCli *nmc, int argc, char **argv)
do_general_reload (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
gs_unref_variant GVariant *result = NULL;
gs_free_error GError *error = NULL;
@ -673,7 +673,7 @@ do_general_reload (NmCli *nmc, int argc, char **argv)
}
static NMCResultCode
do_general_permissions (NmCli *nmc, int argc, char **argv)
do_general_permissions (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
next_arg (nmc, &argc, &argv, NULL);
if (nmc->complete)
@ -747,7 +747,7 @@ _set_logging_cb (GObject *object, GAsyncResult *result, gpointer user_data)
}
static NMCResultCode
do_general_logging (NmCli *nmc, int argc, char **argv)
do_general_logging (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
next_arg (nmc, &argc, &argv, NULL);
if (argc == 0) {
@ -837,7 +837,7 @@ save_hostname_cb (GObject *object, GAsyncResult *result, gpointer user_data)
}
static NMCResultCode
do_general_hostname (NmCli *nmc, int argc, char **argv)
do_general_hostname (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
next_arg (nmc, &argc, &argv, NULL);
if (nmc->complete)
@ -867,7 +867,7 @@ do_general_hostname (NmCli *nmc, int argc, char **argv)
}
NMCResultCode
nmc_command_func_general (NmCli *nmc, int argc, char **argv)
nmc_command_func_general (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
static const NMCCommand cmds[] = {
{ "status", do_general_status, usage_general_status, TRUE, TRUE },
@ -973,21 +973,21 @@ do_networking_on_off (NmCli *nmc, int argc, char **argv, gboolean enable)
}
static NMCResultCode
do_networking_on (NmCli *nmc, int argc, char **argv)
do_networking_on (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
next_arg (nmc, &argc, &argv, NULL);
return do_networking_on_off (nmc, argc, argv, TRUE);
}
static NMCResultCode
do_networking_off (NmCli *nmc, int argc, char **argv)
do_networking_off (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
next_arg (nmc, &argc, &argv, NULL);
return do_networking_on_off (nmc, argc, argv, FALSE);
}
static NMCResultCode
do_networking_connectivity (NmCli *nmc, int argc, char **argv)
do_networking_connectivity (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
next_arg (nmc, &argc, &argv, NULL);
if (nmc->complete) {
@ -1021,7 +1021,7 @@ do_networking_connectivity (NmCli *nmc, int argc, char **argv)
}
static NMCResultCode
do_networking_show (NmCli *nmc, int argc, char **argv)
do_networking_show (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
next_arg (nmc, &argc, &argv, NULL);
if (nmc->complete)
@ -1033,7 +1033,7 @@ do_networking_show (NmCli *nmc, int argc, char **argv)
}
NMCResultCode
nmc_command_func_networking (NmCli *nmc, int argc, char **argv)
nmc_command_func_networking (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
static const NMCCommand cmds[] = {
{ "on", do_networking_on, usage_networking_on, TRUE, TRUE },
@ -1048,7 +1048,7 @@ nmc_command_func_networking (NmCli *nmc, int argc, char **argv)
}
static NMCResultCode
do_radio_all (NmCli *nmc, int argc, char **argv)
do_radio_all (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
gboolean enable_flag;
@ -1093,7 +1093,7 @@ _do_radio_wifi_cb (GObject *object, GAsyncResult *result, gpointer user_data)
}
static NMCResultCode
do_radio_wifi (NmCli *nmc, int argc, char **argv)
do_radio_wifi (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
gboolean enable_flag;
@ -1131,7 +1131,7 @@ do_radio_wifi (NmCli *nmc, int argc, char **argv)
}
static NMCResultCode
do_radio_wwan (NmCli *nmc, int argc, char **argv)
do_radio_wwan (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
gboolean enable_flag;
@ -1158,7 +1158,7 @@ do_radio_wwan (NmCli *nmc, int argc, char **argv)
}
NMCResultCode
nmc_command_func_radio (NmCli *nmc, int argc, char **argv)
nmc_command_func_radio (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
static const NMCCommand cmds[] = {
{ "all", do_radio_all, usage_radio_all, TRUE, TRUE },
@ -1413,7 +1413,7 @@ ac_overview (NmCli *nmc, NMActiveConnection *ac)
}
NMCResultCode
nmc_command_func_overview (NmCli *nmc, int argc, char **argv)
nmc_command_func_overview (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
NMDevice **devices;
const GPtrArray *p;
@ -1528,7 +1528,7 @@ nmc_command_func_overview (NmCli *nmc, int argc, char **argv)
}
NMCResultCode
nmc_command_func_monitor (NmCli *nmc, int argc, char **argv)
nmc_command_func_monitor (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv)
{
next_arg (nmc, &argc, &argv, NULL);

View file

@ -166,22 +166,24 @@ void nmc_empty_output_fields (NmcOutputData *output_data);
/*****************************************************************************/
typedef struct {
struct _NMCCommand;
typedef struct _NMCCommand {
const char *cmd;
NMCResultCode (*func) (NmCli *nmc, int argc, char **argv);
NMCResultCode (*func) (const struct _NMCCommand *cmd, NmCli *nmc, int argc, char **argv);
void (*usage) (void);
bool needs_client;
bool needs_nm_running;
} NMCCommand;
NMCResultCode nmc_command_func_agent (NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_general (NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_networking (NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_radio (NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_monitor (NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_overview (NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_connection (NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_device (NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_agent (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_general (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_networking (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_radio (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_monitor (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_overview (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_connection (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv);
NMCResultCode nmc_command_func_device (const NMCCommand *cmd, NmCli *nmc, int argc, char **argv);
/*****************************************************************************/