return -EIO;
}
+int netconfig_execute_cmd(const char *cmd)
+{
+ if (cmd == NULL)
+ return -EIO;
+
+ pid_t pid = 0;
+ int status = 0;
+ int rv = 0;
+ errno = 0;
+ char error_buf[MAX_SIZE_ERROR_BUFFER] = {0, };
+ gchar **args = NULL;
+
+ DBG("command: %s", cmd);
+
+ args = g_strsplit_set(cmd, " ", -1);
+
+ if (!(pid = fork())) {
+ DBG("pid(%d), ppid (%d)", getpid(), getppid());
+
+ errno = 0;
+ if (execv(args[0], args) == -1) {
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
+ DBG("Fail to execute command (%s)", error_buf);
+ g_strfreev(args);
+ exit(1);
+ }
+ } else if (pid > 0) {
+ if (waitpid(pid, &status, 0) == -1)
+ DBG("wait pid (%u) status (%d)", pid, status);
+
+ if (WIFEXITED(status)) {
+ rv = WEXITSTATUS(status);
+ DBG("exited, status=%d", rv);
+ } else if (WIFSIGNALED(status)) {
+ DBG("killed by signal %d", WTERMSIG(status));
+ } else if (WIFSTOPPED(status)) {
+ DBG("stopped by signal %d", WSTOPSIG(status));
+ } else if (WIFCONTINUED(status)) {
+ DBG("continued");
+ }
+
+ g_strfreev(args);
+ return rv;
+ }
+
+ strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
+ DBG("failed to fork(%s)", error_buf);
+ g_strfreev(args);
+
+ return -EIO;
+}
+
static void on_clat_handler()
{
pid_t clat_pid = 0;