xml 1.0
[lttv.git] / ltt / branches / poly / lttctl / lttctl.c
index 080518d840ffb85ef6ec6c43e163a74f9fcc7937..11483c99a7002dd5834a76ffa45a6234824ad0b3 100644 (file)
@@ -12,7 +12,7 @@
 #include <config.h>
 #endif
 
-#include <libltt/libltt.h>
+#include <liblttctl/lttctl.h>
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -25,7 +25,7 @@
 #include <sys/stat.h>
 
 /* Buffer for file copy : 4k seems optimal. */
-#define BUF_SIZE 4194304
+#define BUF_SIZE 4096
 
 enum trace_ctl_op {
   CTL_OP_CREATE_START,
@@ -48,6 +48,7 @@ static enum trace_mode mode = LTT_TRACE_NORMAL;
 static enum trace_ctl_op op = CTL_OP_NONE;
 static char *channel_root = NULL;
 static char *trace_root = NULL;
+static char *num_threads = "1";
 
 static int sigchld_received = 0;
 
@@ -85,6 +86,7 @@ void show_arguments(void)
        printf("-x            Number of subbuffers\n");
        printf("-e            Get XML facilities description\n");
        printf("-a            Append to trace\n");
+       printf("-N            Number of lttd threads\n");
        printf("\n");
 }
 
@@ -117,7 +119,7 @@ int parse_arguments(int argc, char **argv)
                                                        trace_name = argv[argn+1];
                                                        argn++;
                                                } else {
-                                                       printf("Specify a trace name after -n.\n", argv[argn]);
+                                                       printf("Specify a trace name after -n.\n");
                                                        printf("\n");
                                                        ret = EINVAL;
                                                }
@@ -125,6 +127,7 @@ int parse_arguments(int argc, char **argv)
                                                break;
           case 'b':
             op = CTL_OP_CREATE_START;
+                                               break;
                                        case 'c':
                                                op = CTL_OP_CREATE;
             break;
@@ -208,6 +211,12 @@ int parse_arguments(int argc, char **argv)
           case 'a':
             append_trace = 1;
             break;
+          case 'N':
+                                               if(argn+1 < argc) {
+                                                       num_threads = argv[argn+1];
+                                                       argn++;
+                                               }
+                                               break;
                                        default:
                                                printf("Invalid argument '%s'.\n", argv[argn]);
                                                printf("\n");
@@ -282,9 +291,9 @@ int create_eventdefs(void)
 
   ret = mkdir(trace_root, S_IRWXU|S_IRWXG|S_IRWXO);
   if(ret == -1 && errno != EEXIST) {
+    ret = errno;
     perror("Cannot create trace_root directory");
     printf("trace_root is %s\n", trace_root);
-    ret = errno;
     goto error;
   }
   ret = 0;
@@ -295,8 +304,8 @@ int create_eventdefs(void)
   size_t eventdefs_path_len = strlen(eventdefs_path);
   ret = mkdir(eventdefs_path, S_IRWXU|S_IRWXG|S_IRWXO);
   if(ret == -1 && (!append_trace || errno != EEXIST)) {
-    perror("Cannot create eventdefs directory");
     ret = errno;
+    perror("Cannot create eventdefs directory");
     goto error;
   }
   ret = 0;
@@ -327,8 +336,8 @@ int create_eventdefs(void)
     strncat(facilities_file, entry->d_name, PATH_MAX - facilities_dir_len-1);
     FILE *src = fopen(facilities_file, "r");
     if(!src) {
-      perror("Cannot open eventdefs file for reading");
       ret = errno;
+      perror("Cannot open eventdefs file for reading");
       goto close_dest;
     }
 
@@ -336,14 +345,14 @@ int create_eventdefs(void)
       size_t read_size, write_size;
       read_size = fread(read_buf, sizeof(char), BUF_SIZE, src);
       if(ferror(src)) {
-        perror("Cannot read eventdefs file");
         ret = errno;
+        perror("Cannot read eventdefs file");
         goto close_src;
       }
       write_size = fwrite(read_buf, sizeof(char), read_size, dest);
       if(ferror(dest)) {
-        perror("Cannot write eventdefs file");
         ret = errno;
+        perror("Cannot write eventdefs file");
         goto close_src;
       }
     } while(!feof(src));
@@ -411,13 +420,14 @@ int lttctl_daemon(struct lttctl_handle *handle, char *trace_name)
     int ret;
     if(append_trace) 
                ret =   execlp(lttd_path, lttd_path, "-t", trace_root, "-c",
-                       channel_path, "-d", "-a", NULL);
+                       channel_path, "-d", "-a", "-N", num_threads, NULL);
     else
                ret =   execlp(lttd_path, lttd_path, "-t", trace_root, "-c",
-                       channel_path, "-d", NULL);
+                       channel_path, "-d", "-N", num_threads, NULL);
                if(ret) {
+      ret = errno;
                        perror("Error in executing the lttd daemon");
-                       exit(errno);
+                       exit(ret);
                }
        } else {
                /* error */
This page took 0.02733 seconds and 4 git commands to generate.