diff options
author | kh5325.kim <kh5325.kim@samsung.com> | 2013-04-22 19:48:43 +0900 |
---|---|---|
committer | kh5325.kim <kh5325.kim@samsung.com> | 2013-04-22 19:48:43 +0900 |
commit | ecee380290852652657e00ad4f58eb59b503a31f (patch) | |
tree | 10b3554250fb805da3aa18d96c1538652508be68 | |
parent | 075901b39b851fbc04e68e668b5070477cda7d1c (diff) | |
download | sdb-tizen_2.1.tar.gz sdb-tizen_2.1.tar.bz2 sdb-tizen_2.1.zip |
Upload tizen_2.1 source2.1b_releasetizen_2.1
Change-Id: I8262e3ac3aee1fbeb5a2805c452b8e682051d0a2
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | Makefile.win | 4 | ||||
-rw-r--r-- | package/changelog | 6 | ||||
-rw-r--r-- | package/pkginfo.manifest | 2 | ||||
-rwxr-xr-x | src/commandline.c | 118 | ||||
-rw-r--r-- | src/properties.c | 19 | ||||
-rwxr-xr-x | src/sdb.h | 1 | ||||
-rw-r--r-- | src/strutils.c | 84 | ||||
-rw-r--r-- | src/strutils.h | 11 | ||||
-rw-r--r-- | src/transport_local.c | 17 | ||||
-rw-r--r-- | src/utils.c | 20 | ||||
-rw-r--r-- | src/utils.h | 1 |
12 files changed, 212 insertions, 77 deletions
@@ -55,7 +55,8 @@ SDB_SRC_FILES := \ src/socket_local_server.c \ src/socket_loopback_client.c \ src/socket_loopback_server.c \ - src/socket_network_client.c + src/socket_network_client.c \ + src/strutils.c SDB_CFLAGS := -O2 -g -DSDB_HOST=1 -DSDB_HOST_ON_TARGET=1 -Wall -Wno-unused-parameter SDB_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE @@ -82,7 +83,8 @@ SDBD_SRC_FILES := \ src/socket_loopback_server.c \ src/socket_network_client.c \ src/properties.c \ - src/android_reboot.c + src/android_reboot.c \ + src/strutils.c SDBD_CFLAGS := -O2 -g -DSDB_HOST=0 -Wall -Wno-unused-parameter SDBD_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE diff --git a/Makefile.win b/Makefile.win index 99de9ca..d9c8974 100644 --- a/Makefile.win +++ b/Makefile.win @@ -15,7 +15,9 @@ SRC_FILES := \ src/utils.c \ src/usb_vendors.c \ src/socket_local_client.c \ - src/sysdeps_win32.c + src/sysdeps_win32.c \ + src/strutils.c + INCS := \ -I/mingw/include/ddk \ -Isrc/sdbwinapi \ diff --git a/package/changelog b/package/changelog index 8d07796..6010e7a 100644 --- a/package/changelog +++ b/package/changelog @@ -1,3 +1,9 @@ +* 2.1.26 +- support debug command +== yoonki.park <yoonki.park@samsung.com> 2013-04-22 +* 2.1.25 +- show error pretty in sdb root command +== yoonki.park <yoonki.park@samsung.com> 2013-04-18 * 2.1.24 - support launch command == yoonki.park <yoonki.park@samsung.com> 2013-04-17 diff --git a/package/pkginfo.manifest b/package/pkginfo.manifest index 95d57d7..cf3affb 100644 --- a/package/pkginfo.manifest +++ b/package/pkginfo.manifest @@ -1,4 +1,4 @@ -Version:2.1.24 +Version:2.1.26 Source:sdb Maintainer:Kangho Kim <kh5325.kim@samsung.com>, Yoonki Park<yoonki.park@samsung.com>, Hyunsik Noh<hyunsik.noh@samsung.com>, Gun Kim<gune.kim@samsung.com>, Ho Namkoong<ho.namkoong@samsung.com>, Taeyoung Son<taeyoung2.son@samsung.com> diff --git a/src/commandline.c b/src/commandline.c index 6e11d00..400525b 100755 --- a/src/commandline.c +++ b/src/commandline.c @@ -27,6 +27,7 @@ #include <assert.h> #include "sysdeps.h" +#include "strutils.h" #ifdef HAVE_TERMIO_H #include <termios.h> @@ -52,8 +53,12 @@ int get_pkgtype_from_app_id(const char* app_id); int sdb_command2(const char* cmd); int launch_app(transport_type transport, char* serial, int argc, char** argv); void version_sdbd(transport_type ttype, char* serial); +int verify_gdbserver_exist(); +int kill_gdbserver_if_running(); static const char *gProductOutPath = NULL; +static const char *APP_PATH_PREFIX="/opt/apps"; +static const char *SDK_TOOL_PATH="/home/developer/sdk_tools"; static char *product_file(const char *extra) { @@ -1123,8 +1128,8 @@ top: sdb_close(fd); return 0; } - //TODO: it may be here due to connection fail not version mis-match - fprintf(stderr, "root command requires at least version 2.1.0\n"); + //TODO: it may be here due to version mis-match + fprintf(stderr, "error: %s\n", sdb_error()); return 1; } @@ -1761,22 +1766,21 @@ cleanup_apk: int launch_app(transport_type transport, char* serial, int argc, char** argv) { - const char *APP_PATH_PREFIX="/opt/apps"; - const char *SDK_TOOL_PATH="/home/developer/sdk_tools"; int i; int result = 0; - char pkgid[11]; - char exe[512]; - char args[512]; + char pkgid[11] = {0,}; + char exe[512] = {0,}; + char args[512] = {0,}; int mode = 0; int port = 0; + int pid = 0; int type = 0; char fullcommand[4096] = {'s','h','e','l','l',':',}; - char buf[128]; + char buf[128] = {0,}; char flag = 0; if (argc < 7 || argc > 15 ) { - fprintf(stderr,"usage: sdb launch -p <pkgid> -e <executable> -m <run|debug> [-P <port>] [-t <gtest,gcov>] [<args...>]\n"); + fprintf(stderr,"usage: sdb launch -p <pkgid> -e <executable> -m <run|debug> [-P <port>] [-attach <pid>] [-t <gtest,gcov>] [<args...>]\n"); return -1; } for (i = 1; i < argc; i++) { @@ -1800,7 +1804,10 @@ int launch_app(transport_type transport, char* serial, int argc, char** argv) flag = 't'; continue; } - + if (!strcmp(argv[i], "-attach")) { + flag = 'a'; + continue; + } D("launch cmd args: %c : %s\n", flag, argv[i]); switch (flag) { @@ -1833,6 +1840,15 @@ int launch_app(transport_type transport, char* serial, int argc, char** argv) flag = 0; break; } + case 'a': { + if (mode != 1) { + fprintf(stderr, "The -attach option should be used in debug mode\n"); + return -1; + } + pid = atoi(argv[i]); + flag = 0; + break; + } case 't': { char *str = argv[i]; for (; *str; str++) { @@ -1853,7 +1869,7 @@ int launch_app(transport_type transport, char* serial, int argc, char** argv) } flag = 0; } - break; + break; default : { while (i < argc) { strncat(args, " ", sizeof(args)-1); @@ -1874,10 +1890,22 @@ int launch_app(transport_type transport, char* serial, int argc, char** argv) strncat(fullcommand, buf, sizeof(fullcommand)-1); } } else if (mode == 1) { + if (verify_gdbserver_exist() < 0) { + return -1; + } if (!port) { - //return usage(); + fprintf(stderr,"The port number is not valid\n"); + return -1; + } + if (pid) { + snprintf(buf, sizeof(buf), "%s/gdbserver/gdbserver :%d --attach %d", SDK_TOOL_PATH, port, pid); + } else { + snprintf(buf, sizeof(buf), "%s/gdbserver/gdbserver :%d %s/%s/bin/%s", SDK_TOOL_PATH, port, APP_PATH_PREFIX, pkgid, exe); + } + if (kill_gdbserver_if_running(buf) < 0) { + fprintf(stderr, "Gdbserver is already running on your target.\nAn gdb is going to connect the previous gdbserver process.\n"); + return -1; } - snprintf(buf, sizeof(buf), "%s/gdbserver/gdbserver :%d %s/%s/bin/%s", SDK_TOOL_PATH, port, APP_PATH_PREFIX, pkgid, exe); strncat(fullcommand, buf, sizeof(fullcommand)-1); } if (strlen(args) > 1) { @@ -1885,17 +1913,75 @@ int launch_app(transport_type transport, char* serial, int argc, char** argv) strncat(fullcommand, args, sizeof(fullcommand)-1); } - D("launch command: %s\n", fullcommand); + D("launch command: [%s]\n", fullcommand); result = sdb_command2(fullcommand); if(result < 0) { fprintf(stderr, "error: %s\n", sdb_error()); - return result; } sdb_close(result); - return 0; + return result; + +} + +/* + * kill gdbserver if running + */ + +int kill_gdbserver_if_running(const char* process_cmd) { + char cmd[512] = {}; + char buf[512] = {}; + + // hopefully, it is not going to happen, but check executable gdbserver is existed + snprintf(cmd, sizeof(cmd), "shell:/usr/bin/da_command process | grep '%s' | grep -v grep | wc -l", process_cmd); + int result = sdb_connect(cmd); + if(result < 0) { + fprintf(stderr, "error: %s\n", sdb_error()); + return -1; + } + if (read_line(result, buf, sizeof(buf)) < 0) { + sdb_close(result); + return -1; + } + if(memcmp(buf, "0", 1)) { +/* + // TODO: check cmd return code + snprintf(cmd, sizeof(cmd), "shell:/usr/bin/da_command killapp '%s'", process_cmd); + result = sdb_connect(cmd); + if (read_line(result, buf, sizeof(buf)) < 0) { + sdb_close(result); + return -1; + } +*/ + } + sdb_close(result); + return 1; +} + +/* + * returns -1 if gdbserver exists + */ +int verify_gdbserver_exist() { + char cmd[512] = {}; + char buf[512] = {}; + + snprintf(cmd, sizeof(cmd), "shell:%s/gdbserver/gdbserver --version 1>/dev/null", SDK_TOOL_PATH); + int result = sdb_connect(cmd); + + if(result < 0) { + fprintf(stderr, "error: %s\n", sdb_error()); + sdb_close(result); + return -1; + } + if (read_line(result, buf, sizeof(buf)) > 0) { + fprintf(stderr, "error: %s\n", buf); + sdb_close(result); + return -1; + } + sdb_close(result); + return result; } void version_sdbd(transport_type ttype, char* serial) { diff --git a/src/properties.c b/src/properties.c index 886669a..2c36dde 100644 --- a/src/properties.c +++ b/src/properties.c @@ -28,6 +28,7 @@ #include "sysdeps.h" #define TRACE_TAG TRACE_PROPERTIES #include "sdb.h" +#include "strutils.h" #define HAVE_TIZEN_PROPERTY @@ -151,24 +152,6 @@ int property_list(void (*propfn)(const char *key, const char *value, void *cooki return 0; } -int read_line(const int fd, char* ptr, const unsigned int maxlen) -{ - unsigned int n = 0; - char c[2]; - - while(n != maxlen) { - if(sdb_read(fd, c, 1) != 1) - return -1; // eof or read err - - if(*c == '\n') { - ptr[n] = 0; - return n; - } - ptr[n++] = *c; - } - return -1; // no space -} - #elif defined(HAVE_LIBC_SYSTEM_PROPERTIES) #define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ @@ -474,6 +474,5 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r #define DEFAULT_DEVICENAME "<unknown>" void register_device_name(const char *device_type, const char *device_name, int port); int get_devicename_from_shdmem(int port, char *device_name); -int read_line(const int fd, char* ptr, const size_t maxlen); #endif #endif diff --git a/src/strutils.c b/src/strutils.c new file mode 100644 index 0000000..40fee05 --- /dev/null +++ b/src/strutils.c @@ -0,0 +1,84 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "sysdeps.h" +#include "strutils.h" + +#ifndef PATH_MAX +#define PATH_MAX 4096 +#endif + +size_t tokenize(const char *str, const char *delim, char *tokens[], size_t max_tokens ) { + int cnt = 0; + + char tmp[PATH_MAX]; + + strncpy(tmp, str, PATH_MAX); + char *p = strtok(tmp, delim); + if (max_tokens < 1 || max_tokens > MAX_TOKENS) { + max_tokens = 1; + } + + if (p != NULL) { + tokens[cnt++] = strdup(p); + while(cnt < max_tokens && p != NULL) { + p = strtok(NULL, delim); + if (p != NULL) { + tokens[cnt++] = strdup(p); + } + } + } + return cnt; +} + +void free_strings(char **array, int n) +{ + int i; + + for(i = 0; i < n; i++) { + if (array[i] != NULL) { + free(array[i]); + } + } +} + +int read_line(const int fd, char* ptr, const unsigned int maxlen) +{ + unsigned int n = 0; + char c[2]; + + while(n != maxlen) { + if(sdb_read(fd, c, 1) != 1) { + break; + } + if(*c == '\r') { + continue; + } + if(*c == '\n') { + ptr[n] = 0; + return n; + } + ptr[n++] = *c; + } + return -1; // no space +} + +/** + * The standard strncpy() function does not guarantee that the resulting string is null terminated. + * char ntbs[NTBS_SIZE]; + * strncpy(ntbs, source, sizeof(ntbs)-1); + * ntbs[sizeof(ntbs)-1] = '\0' + */ +char *s_strncpy(char *dest, const char *source, size_t n) { + char *start = dest; + + while (n && (*dest++ = *source++)) { + n--; + } + if (n) { + while (--n) { + *dest++ = '\0'; + } + } + return start; +} diff --git a/src/strutils.h b/src/strutils.h new file mode 100644 index 0000000..897579f --- /dev/null +++ b/src/strutils.h @@ -0,0 +1,11 @@ +#ifndef _STRUTILS_H_ +#define _STRUTILS_H_ + +#define MAX_TOKENS 30 + +size_t tokenize(const char *str, const char *delim, char *tokens[], size_t max_tokens); +void free_strings(char **array, int n); +int read_line(const int fd, char* ptr, const unsigned int maxlen); +char *s_strncpy(char *dest, const char *source, size_t n); +#endif + diff --git a/src/transport_local.c b/src/transport_local.c index a87f39f..f1e7dc0 100644 --- a/src/transport_local.c +++ b/src/transport_local.c @@ -204,23 +204,6 @@ int get_devicename_from_shdmem(int port, char *device_name) return 0; } -int read_line(const int fd, char* ptr, size_t maxlen) -{ - unsigned int n = 0; - char c[2]; - - while(n != maxlen) { - if(sdb_read(fd, c, 1) != 1) - return -1; // eof or read err - - if(*c == '\n') { - ptr[n] = 0; - return n; - } - ptr[n++] = *c; - } - return -1; // no space -} #endif static void *client_socket_thread(void *x) diff --git a/src/utils.c b/src/utils.c index 1e71e83..963e9bc 100644 --- a/src/utils.c +++ b/src/utils.c @@ -125,23 +125,3 @@ char *str_trim(const char* string) return ret; } - -/** - * The standard strncpy() function does not guarantee that the resulting string is null terminated. - * char ntbs[NTBS_SIZE]; - * strncpy(ntbs, source, sizeof(ntbs)-1); - * ntbs[sizeof(ntbs)-1] = '\0' - */ -char *s_strncpy(char *dest, const char *source, size_t n) { - char *start = dest; - - while (n && (*dest++ = *source++)) { - n--; - } - if (n) { - while (--n) { - *dest++ = '\0'; - } - } - return start; -} diff --git a/src/utils.h b/src/utils.h index 262f91b..e675548 100644 --- a/src/utils.h +++ b/src/utils.h @@ -68,5 +68,4 @@ char* buff_add (char* buff, char* buffEnd, const char* format, ... ); char *str_trim(const char* string); -char *s_strncpy(char *dest, const char *source, size_t n); #endif /* _SDB_UTILS_H */ |