SDB: Added journal log support for 'sdb dlog' 62/26662/1
authorAlice Liu <alice.liu@intel.com>
Wed, 27 Aug 2014 10:44:39 +0000 (18:44 +0800)
committerAlice Liu <alice.liu@intel.com>
Wed, 27 Aug 2014 11:04:08 +0000 (19:04 +0800)
In Tizen 3, it started to use journalctl command instead of
dlogutil command to check log. This patch will determine
whether journalctl binary exists in the system. If it does,
'sdb dlog' will call journalctl, or else it will call dlogutil.

Change-Id: Ic1eec3259e7f489fe6bd1dc2f23914bc9e9830d4
Signed-off-by: Alice Liu <alice.liu@intel.com>
src/command_function.c

index abd3c5709ab3212bef226780634beb1465ddfec3..884f4c994d170ada88ce4cca1b1ee67f1071f587 100644 (file)
@@ -52,6 +52,7 @@ static int get_pkgtype_file_name(const char* file_name);
 static int get_pkgtype_from_app_id(const char* app_id);
 static int kill_gdbserver_if_running(const char* process_cmd);
 static int verify_gdbserver_exist();
+static int verify_journalctl_exist();
 static int get_pkg_tmp_dir(char* pkg_tmp_dir);
 
 int da(int argc, char ** argv) {
@@ -494,7 +495,12 @@ int forward_remove_all() {
 int dlog(int argc, char ** argv) {
     D("dlog with serial: %s\n", target_serial);
 
-    char full_cmd[PATH_MAX] = "shell:/usr/bin/dlogutil";
+    char full_cmd[PATH_MAX];
+    if (verify_journalctl_exist() < 0) {
+        snprintf(full_cmd, sizeof full_cmd, "shell:/usr/bin/dlogutil");
+    } else {
+        snprintf(full_cmd, sizeof full_cmd, "shell:/usr/bin/journalctl");
+    }
 
     int i;
     for(i = 1; i<argc; i++) {
@@ -833,7 +839,7 @@ static void __inline__ format_host_command(char* buffer, size_t  buflen, const c
 
 
 /*
- * returns -1 if gdbserver exists
+ * returns -1 if gdbserver does not exist
  */
 static int verify_gdbserver_exist() {
     char cmd[512] = {};
@@ -854,3 +860,26 @@ static int verify_gdbserver_exist() {
     sdb_close(result);
     return result;
 }
+
+/*
+ * returns -1 if journalctl does not exist
+ */
+static int verify_journalctl_exist() {
+    char cmd[512] = {};
+    char buf[512] = {};
+
+    snprintf(cmd, sizeof(cmd), "shell:ls /usr/bin/journalctl 1>/dev/null");
+    int result = sdb_connect(cmd);
+
+    if(result < 0) {
+        sdb_close(result);
+        return -1;
+    }
+    if (read_line(result, buf, sizeof(buf)) > 0) {
+        print_error(SDB_MESSAGE_ERROR, buf, NULL);
+        sdb_close(result);
+        return -1;
+    }
+    sdb_close(result);
+    return result;
+}