summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkh5325.kim <kh5325.kim@samsung.com>2013-04-22 19:48:43 +0900
committerkh5325.kim <kh5325.kim@samsung.com>2013-04-22 19:48:43 +0900
commitecee380290852652657e00ad4f58eb59b503a31f (patch)
tree10b3554250fb805da3aa18d96c1538652508be68
parent075901b39b851fbc04e68e668b5070477cda7d1c (diff)
downloadsdb-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--Makefile6
-rw-r--r--Makefile.win4
-rw-r--r--package/changelog6
-rw-r--r--package/pkginfo.manifest2
-rwxr-xr-xsrc/commandline.c118
-rw-r--r--src/properties.c19
-rwxr-xr-xsrc/sdb.h1
-rw-r--r--src/strutils.c84
-rw-r--r--src/strutils.h11
-rw-r--r--src/transport_local.c17
-rw-r--r--src/utils.c20
-rw-r--r--src/utils.h1
12 files changed, 212 insertions, 77 deletions
diff --git a/Makefile b/Makefile
index 60389b8..2127c92 100644
--- a/Makefile
+++ b/Makefile
@@ -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_
diff --git a/src/sdb.h b/src/sdb.h
index 3533da6..f7cf3c1 100755
--- a/src/sdb.h
+++ b/src/sdb.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 */