diff options
Diffstat (limited to 'dev')
-rw-r--r-- | dev/Makefile.am | 6 | ||||
-rw-r--r-- | dev/lckdclient.c | 64 |
2 files changed, 55 insertions, 15 deletions
diff --git a/dev/Makefile.am b/dev/Makefile.am index c1d2b45..bc3843b 100644 --- a/dev/Makefile.am +++ b/dev/Makefile.am @@ -4,11 +4,7 @@ AM_CFLAGS = $(GLOBAL_CFLAGS) $(libgnutls_CFLAGS) $(libtasn1_CFLAGS) $(LFS_CFLAGS AM_LDFLAGS = $(libgnutls_LIBS) $(libtasn1_LIBS) $(libpthread_LIBS) if ENABLE_DEVTOOLS -noinst_PROGRAMS = ideviceclient afccheck filerelaytest housearresttest - -if HAVE_GLIB2 -noinst_PROGRAMS += lckd-client -endif +noinst_PROGRAMS = ideviceclient afccheck filerelaytest housearresttest lckd-client ideviceclient_SOURCES = ideviceclient.c ideviceclient_CFLAGS = $(AM_CFLAGS) diff --git a/dev/lckdclient.c b/dev/lckdclient.c index 773de9f..5ca72f8 100644 --- a/dev/lckdclient.c +++ b/dev/lckdclient.c @@ -22,13 +22,60 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <glib.h> #include <readline/readline.h> #include <readline/history.h> #include <libimobiledevice/libimobiledevice.h> #include <libimobiledevice/lockdown.h> +static char** get_tokens(const char *str) +{ + char *strcp = strdup(str); + char *p; + char res_max = 8; + char **result = NULL; + int cnt = 0; + + p = strtok(strcp, " "); + if (!p) { + result = (char**)malloc(2 * sizeof(char*)); + result[0] = strdup(str); + result[1] = NULL; + return result; + } + + result = (char**)malloc(res_max * sizeof(char*)); + memset(result, 0, res_max * sizeof(char*)); + + while (p) { + if (cnt >= res_max) { + res_max += 8; + result = (char**)realloc(result, res_max * sizeof(char*)); + } + result[cnt] = strdup(p); + cnt++; + p = strtok(NULL, " "); + } + + if (cnt >= res_max) { + res_max += 1; + result = (char**)realloc(result, res_max * sizeof(char*)); + result[cnt] = NULL; + } + + return result; +} + +static void strfreev(char **strs) +{ + int i = 0; + while (strs && strs[i]) { + free(strs[i]); + i++; + } + free(strs); +} + int main(int argc, char *argv[]) { lockdownd_client_t client = NULL; @@ -54,25 +101,22 @@ int main(int argc, char *argv[]) } using_history(); - int loop = TRUE; + int loop = 1; while (loop) { char *cmd = readline("> "); if (cmd) { - gchar **args = g_strsplit(cmd, " ", 0); + char **args = get_tokens(cmd); int len = 0; - if (args) { - while (*(args + len)) { - g_strstrip(*(args + len)); - len++; - } + while (args && args[len]) { + len++; } if (len > 0) { add_history(cmd); if (!strcmp(*args, "quit")) - loop = FALSE; + loop = 0; if (!strcmp(*args, "get") && len >= 2) { plist_t value = NULL; @@ -102,7 +146,7 @@ int main(int argc, char *argv[]) } } } - g_strfreev(args); + strfreev(args); } free(cmd); cmd = NULL; |