Upload tizen_2.1 source tizen_2.1 2.1b_release
authorkh5325.kim <kh5325.kim@samsung.com>
Mon, 22 Apr 2013 10:48:43 +0000 (19:48 +0900)
committerkh5325.kim <kh5325.kim@samsung.com>
Mon, 22 Apr 2013 10:48:43 +0000 (19:48 +0900)
Change-Id: I8262e3ac3aee1fbeb5a2805c452b8e682051d0a2

12 files changed:
Makefile
Makefile.win
package/changelog
package/pkginfo.manifest
src/commandline.c
src/properties.c
src/sdb.h
src/strutils.c [new file with mode: 0644]
src/strutils.h [new file with mode: 0644]
src/transport_local.c
src/utils.c
src/utils.h

index 60389b8d2fab53e33827946df06c6b9fdad42428..2127c92b7c9a634a79378f5530990f2a1689dc9d 100644 (file)
--- 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
index 99de9ca6a099812698738ac4a8e323cf9b338600..d9c8974a1dab4de52a33b44a787aa238a984cc57 100644 (file)
@@ -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 \
index 8d07796af7e742fec12b2013e4b111f512999c48..6010e7aeffec99a89f9d7c93b0f4207c06dc78a0 100644 (file)
@@ -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
index 95d57d7cb27bb7a9c9b1a14974e1d0625fc4108c..cf3affb74eed76b2cdc5983f562737d41d312893 100644 (file)
@@ -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>
 
index 6e11d00c04129e28ff83c0c7cb212c55d104200f..400525b8561cb070c7ed0375c8b31bfd6bf0142c 100755 (executable)
@@ -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) {
index 886669ab32a657729b25bccc834bdb77a67d76a9..2c36dded576b8571a07345b21466339e54fb9cba 100644 (file)
@@ -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_
index 3533da6b3fff1c94225a84c861c5521eebeea5b3..f7cf3c1fb195f9f29b4cceba95f940da7dc47172 100755 (executable)
--- 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 (file)
index 0000000..40fee05
--- /dev/null
@@ -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 (file)
index 0000000..897579f
--- /dev/null
@@ -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
+
index a87f39f5f9073eb4abe43bc7735aa01dd3464329..f1e7dc0c06932d36a73b69993bc8be2429738c14 100644 (file)
@@ -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)
index 1e71e839484bb17d4758df0db497910cb5649ddb..963e9bc7d32f617511763cb4eabd5d169e0a9ed4 100644 (file)
@@ -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;
-}
index 262f91b10d476732139298b0974a48536dca8b7d..e6755487da5e260658bddedd4a9bdb888990c8d3 100644 (file)
@@ -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 */