+
+ /* Setup arguments to su */
+ if(strcmp(lttctl_path, "") == 0) {
+ strncpy(args, "lttctl", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+ } else {
+ strncpy(args, lttctl_path, args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+ }
+
+ /* space */
+ strncat(args, " ", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+ /* channel dir */
+ strncat(args, "-l ", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+ strncat(args, channel_dir, args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+ /* space */
+ strncat(args, " ", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+ /* trace dir */
+ strncat(args, "-t ", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+ strncat(args, trace_dir, args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+ /* space */
+ strncat(args, " ", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+ /* name */
+ strncat(args, "-n ", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+ strncat(args, trace_name, args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+ /* space */
+ strncat(args, " ", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+ /* trace mode */
+ strncat(args, "-m ", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+ strncat(args, trace_mode, args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+ /* space */
+ strncat(args, " ", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+ /* Start daemon ? */
+ if(start_daemon) {
+ strncat(args, "-d", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+ } else {
+ /* Simply create the channel and then start tracing */
+ strncat(args, "-b", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+ }
+
+ /* space */
+ strncat(args, " ", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+ /* optional arguments */
+ /* subbuffer size */
+ if(strcmp(subbuf_size, "") != 0) {
+ strncat(args, "-z ", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+ strncat(args, subbuf_size, args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+ }
+
+ /* space */
+ strncat(args, " ", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+ /* number of subbuffers */
+ if(strcmp(subbuf_num, "") != 0) {
+ strncat(args, "-x ", args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+ strncat(args, subbuf_num, args_left);
+ args_left = MAX_ARGS_LEN - strlen(args) - 1;
+ }
+
+ g_message("Executing (as %s) : %s", username, args);
+
+ //execlp("su", "-p", );
+ //exit(-1): /* not supposed to happen! */
+ system(args);