---
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;
+ if (!error) {
+ ret = 0;
fprintf(stdout, "Enabled %s\n", str);
- else
+ } else {
+ if (!strncmp("Already ",error,8))
+ ret = -2;
+ else
+ ret = -1;
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);
+ }
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);
--
2.1.4
_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman