From 2495d8032eb6839a55080b79ac818383c2f75b79 Mon Sep 17 00:00:00 2001 From: Pacien TRAN-GIRARD Date: Fri, 5 May 2017 01:02:16 +0200 Subject: Import unversioned prototype --- app/src/main/c/exec.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 app/src/main/c/exec.c (limited to 'app/src/main/c') diff --git a/app/src/main/c/exec.c b/app/src/main/c/exec.c new file mode 100644 index 0000000..fdaec0f --- /dev/null +++ b/app/src/main/c/exec.c @@ -0,0 +1,34 @@ +#include +#include +#include + +static inline const char **to_string_array(JNIEnv *env, jobjectArray ja) { + const int len = (*env)->GetArrayLength(env, ja); + const char **ca = calloc((size_t) len + 1, sizeof(char *)); + + for (int i = 0; i < len; ++i) { + jstring jstr = (jstring) (*env)->GetObjectArrayElement(env, ja, i); + ca[i] = (*env)->GetStringUTFChars(env, jstr, NULL); + } + + ca[len] = NULL; + return ca; +} + +static inline void exec(const char **argcv) { + execv(argcv[0], (char *const *) argcv); + exit(1); +} + +JNIEXPORT jint JNICALL +Java_org_pacien_tincapp_commands_Executor_forkExec(JNIEnv *env, jclass class, jobjectArray argcv) { + pid_t pid = fork(); + switch (pid) { + case 0: + exec(to_string_array(env, argcv)); + return 0; + + default: + return pid; + } +} -- cgit v1.2.3