Upload tizen_2.1 source
authorkh5325.kim <kh5325.kim@samsung.com>
Wed, 17 Apr 2013 09:10:05 +0000 (18:10 +0900)
committerkh5325.kim <kh5325.kim@samsung.com>
Wed, 17 Apr 2013 09:10:05 +0000 (18:10 +0900)
Change-Id: Ie923537a288ec102eddf8405c0f313721d644f8a

package/changelog
package/pkginfo.manifest
src/commandline.c
src/utils.c
src/utils.h

index 18cfe9b931e7d74cf7bd7667985b9803669e6cc0..8d07796af7e742fec12b2013e4b111f512999c48 100644 (file)
@@ -1,3 +1,6 @@
+* 2.1.24
+- support launch command
+== yoonki.park <yoonki.park@samsung.com> 2013-04-17
 * 2.1.23
 - change pkgcmd path
 == yoonki.park <yoonki.park@samsung.com> 2013-04-13
index 29ab7df6e92ec42cb870f9fb4e2deec5812d8b49..95d57d7cb27bb7a9c9b1a14974e1d0625fc4108c 100644 (file)
@@ -1,4 +1,4 @@
-Version:2.1.23
+Version:2.1.24
 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 1b6bba83327b4a5244012ce35d256f579d2b2409..6e11d00c04129e28ff83c0c7cb212c55d104200f 100755 (executable)
@@ -36,6 +36,7 @@
 #include "sdb.h"
 #include "sdb_client.h"
 #include "file_sync_service.h"
+#include "utils.h"
 
 static int do_cmd(transport_type ttype, char* serial, char *cmd, ...);
 
@@ -1760,33 +1761,139 @@ cleanup_apk:
 
 int launch_app(transport_type transport, char* serial, int argc, char** argv)
 {
-    static const char *const SHELL_LAUNCH_CMD = "shell:/usr/bin/sdk_launch_app ";
-    char full_cmd[PATH_MAX];
+    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];
+    int mode = 0;
+    int port = 0;
+    int type = 0;
+    char fullcommand[4096] = {'s','h','e','l','l',':',};
+    char buf[128];
+    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");
+        return -1;
+    }
+    for (i = 1; i < argc; i++) {
+        if (!strcmp(argv[i], "-p")) {
+            flag = 'p';
+            continue;
+        }
+        if (!strcmp(argv[i], "-e")) {
+            flag = 'e';
+            continue;
+        }
+        if (!strcmp(argv[i], "-m")) {
+            flag = 'm';
+            continue;
+        }
+        if (!strcmp(argv[i], "-P")) {
+            flag = 'P';
+            continue;
+        }
+        if (!strcmp(argv[i], "-t")) {
+            flag = 't';
+            continue;
+        }
 
-    snprintf(full_cmd, sizeof full_cmd, "%s", SHELL_LAUNCH_CMD);
-
-    //TODO: check argument validation
+        D("launch cmd args: %c : %s\n", flag, argv[i]);
 
-    for (i=1 ; i<argc ; i++) {
-        strncat(full_cmd, " ", sizeof(full_cmd)-strlen(" ")-1);
-        strncat(full_cmd, argv[i], sizeof(full_cmd)-strlen(argv[i])-1);
+        switch (flag) {
+        case 'p' :
+            s_strncpy(pkgid, argv[i], sizeof(pkgid));
+            flag = 0;
+            break;
+        case 'e':
+            s_strncpy(exe, argv[i], sizeof(exe));
+            flag = 0;
+            break;
+        case 'm': {
+            if (!strcmp(argv[i], "run")) {
+                mode = 0;
+            } else if (!strcmp(argv[i], "debug")) {
+                mode = 1;
+            } else {
+                fprintf(stderr,"The -m option accepts arguments only run or debug options\n");
+                return -1;
+            }
+            flag = 0;
+            break;
+        }
+        case 'P': {
+            if (mode != 1) {
+                fprintf(stderr,"The -P option should be used in debug mode\n");
+                return -1;
+            }
+            port = atoi(argv[i]);
+            flag = 0;
+            break;
+        }
+        case 't': {
+            char *str = argv[i];
+            for (; *str; str++) {
+                if (!memcmp(str, "gtest", 5)) {
+                    snprintf(buf, sizeof(buf), "export LD_LIBRARY_PATH=%s/gtest/usr/lib && ", SDK_TOOL_PATH);
+                    strncat(fullcommand, buf, sizeof(fullcommand) - 1);
+                    type = 1;
+                }
+                if (!memcmp(str, "gcov", 4)) {
+                    snprintf(buf, sizeof(buf), "export GCOV_PREFIX=/tmp/%s/data && export GCOV_PREFIX_STRIP=0 && ", pkgid);
+                    strncat(fullcommand, buf, sizeof(fullcommand) - 1);
+                    type = 2;
+                }
+                char *ptr = strstr(str, ",");
+                if (ptr) {
+                    str = ptr;
+                }
+            }
+            flag = 0;
+        }
+        break;
+        default : {
+            while (i < argc) {
+                strncat(args, " ", sizeof(args)-1);
+                strncat(args, argv[i], sizeof(args)-1);
+                i++;
+            }
+            break;
+        }
+        }
     }
 
-    D("launch command: %s\n", full_cmd);
-    result = sdb_command2(full_cmd);
-
-    if(result < 0) {
-        fprintf(stderr, "error: %s\n", sdb_error());
-        return result;
+    if (mode == 0) {
+        if (type == 0) {
+            snprintf(buf, sizeof(buf), "/usr/bin/launch_app %s.%s", pkgid, exe);
+            strncat(fullcommand, buf, sizeof(fullcommand)-1);
+        } else {
+            snprintf(buf, sizeof(buf), "%s/%s/bin/%s", APP_PATH_PREFIX, pkgid, exe);
+            strncat(fullcommand, buf, sizeof(fullcommand)-1);
+        }
+    } else if (mode == 1) {
+        if (!port) {
+            //return usage();
+        }
+        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) {
+        strncat(fullcommand, " ", sizeof(fullcommand)-1);
+        strncat(fullcommand, args, sizeof(fullcommand)-1);
     }
 
+    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;
 
 }
index 4b510f3a21ec855c26c9888da0d37be1887faf66..1e71e839484bb17d4758df0db497910cb5649ddb 100644 (file)
  * limitations under the License.
  */
 
-#include "utils.h"
 #include <stdarg.h>
 #include <stdio.h>
 #include <string.h>
+
+#include "utils.h"
 #define STRING_MAXLEN 1024
 char*
 buff_addc (char*  buff, char*  buffEnd, int  c)
@@ -124,3 +125,23 @@ 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 3df520ecf809ec88cb4255508844ec8cec0c773c..262f91b10d476732139298b0974a48536dca8b7d 100644 (file)
@@ -67,4 +67,6 @@ char*   buff_add  (char*  buff, char*  buffEnd, const char*  format, ... );
     char   _buff[_size], *_cursor=_buff, *_end = _cursor + (_size)
 
 char *str_trim(const char* string);
+
+char *s_strncpy(char *dest, const char *source, size_t n);
 #endif /* _SDB_UTILS_H */