Hi, On Tue, 2015-10-27 at 09:58 +0200, Mikko Tuumanen wrote: > --- > client/agent.c | 2 +- > client/commands.c | 27 +++++++++++++++++++++------ > client/dbus_helpers.c | 5 +++-- > client/input.c | 6 ++++-- > client/input.h | 2 +- > 5 files changed, 30 insertions(+), 12 deletions(-) > > diff --git a/client/agent.c b/client/agent.c > index d020889..b87d5bb 100644 > --- a/client/agent.c > +++ b/client/agent.c > @@ -235,7 +235,7 @@ static DBusMessage *agent_release(DBusConnection > *connection, > "VPNd\n"); > > if (__connmanctl_is_interactive() == false) > - __connmanctl_quit(); > + __connmanctl_quit(0); > > return dbus_message_new_method_return(message); > } > diff --git a/client/commands.c b/client/commands.c > index 3bfdfd7..ee56d46 100644 > --- a/client/commands.c > +++ b/client/commands.c > @@ -153,14 +153,21 @@ static int enable_return(DBusMessageIter *iter, const > char *error, > else > str = tech; > > - if (!error) > + int ret;
int ret = 0; should be declared together with the other variables. As a nitpick the convention has been that variables with values were declared first, then uninitialized variables. > + if (!error) { > + ret = 0; > fprintf(stdout, "Enabled %s\n", str); > - else > + } else { > + if (!strncmp("Already ",error,8)) > + ret = -2; > + else > + ret = -1; I don't think one can rely on the string here. It's a semi-descriptive one that may be used for logging or other purposes, but not much else. The code is looking for -EINPROGRESS in dbus_method_reply(), so "proper" values from errno*.h shall be used. What if this just sets the return value to -EOPNOTSUPP? > fprintf(stderr, "Error %s: %s\n", str, error); > + } > > g_free(user_data); > > - return 0; > + return ret; > } > > static int cmd_enable(char *args[], int num, struct connman_option *options) > @@ -202,14 +209,22 @@ static int disable_return(DBusMessageIter *iter, const > char *error, > else > str = tech; > > - if (!error) > + int ret; > + if (!error) { > + ret = 0; > fprintf(stdout, "Disabled %s\n", str); > - else > + } else { > + if (!strncmp("Already ", error, 8)) > + ret = -2; > + else > + ret = -1; > + > fprintf(stderr, "Error %s: %s\n", str, error); > + } Same here. > g_free(user_data); > > - return 0; > + return ret; > } > > static int cmd_disable(char *args[], int num, struct connman_option *options) > diff --git a/client/dbus_helpers.c b/client/dbus_helpers.c > index 9c4cfee..fe55abf 100644 > --- a/client/dbus_helpers.c > +++ b/client/dbus_helpers.c > @@ -141,6 +141,7 @@ static void dbus_method_reply(DBusPendingCall *call, void > *user_data) > int res = 0; > DBusMessage *reply; > DBusMessageIter iter; > + int exit_value = 0; > > __connmanctl_save_rl(); > > @@ -152,7 +153,7 @@ static void dbus_method_reply(DBusPendingCall *call, void > *user_data) > dbus_error_init(&err); > dbus_set_error_from_message(&err, reply); > > - callback->cb(NULL, err.message, callback->user_data); > + exit_value = callback->cb(NULL, err.message, > callback->user_data); > > dbus_error_free(&err); > goto end; > @@ -164,7 +165,7 @@ static void dbus_method_reply(DBusPendingCall *call, void > *user_data) > end: > __connmanctl_redraw_rl(); > if (__connmanctl_is_interactive() == false && res != -EINPROGRESS) > - __connmanctl_quit(); > + __connmanctl_quit(exit_value); > > g_free(callback); > dbus_message_unref(reply); > diff --git a/client/input.c b/client/input.c > index e59df8a..f310d15 100644 > --- a/client/input.c > +++ b/client/input.c > @@ -42,9 +42,11 @@ static bool interactive = false; > static bool save_input; > static char *saved_line; > static int saved_point; > +static int exit_status = 0; > > -void __connmanctl_quit(void) > +void __connmanctl_quit(int status) > { > + exit_status = status; > if (main_loop) > g_main_loop_quit(main_loop); > } > @@ -264,7 +266,7 @@ int __connmanctl_input_init(int argc, char *argv[]) > main_loop = g_main_loop_new(NULL, FALSE); > g_main_loop_run(main_loop); > > - err = 0; > + err = exit_status; > } > > if (interactive) { > diff --git a/client/input.h b/client/input.h > index c7256a4..2136d13 100644 > --- a/client/input.h > +++ b/client/input.h > @@ -29,7 +29,7 @@ > extern "C" { > #endif > > -void __connmanctl_quit(void); > +void __connmanctl_quit(int status); > bool __connmanctl_is_interactive(void); > void __connmanctl_save_rl(void); > void __connmanctl_redraw_rl(void); Cheers, Patrik _______________________________________________ connman mailing list connman@connman.net https://lists.connman.net/mailman/listinfo/connman