convert from svn repository: remove tags directory
[lttv.git] / trunk / lttv / lttv / modules / gui / tracecontrol / tracecontrol.c
index 768095cd387124fa6093e9b7c2d9d74771d302da..28e665567baf7374310868c7c8d9212091ba3e91 100644 (file)
@@ -79,6 +79,8 @@ void control_destroy_walk(gpointer data, gpointer user_data);
  * Callback functions
  */
 
+static void arm_clicked (GtkButton *button, gpointer user_data);
+static void disarm_clicked (GtkButton *button, gpointer user_data);
 static void start_clicked (GtkButton *button, gpointer user_data);
 static void pause_clicked (GtkButton *button, gpointer user_data);
 static void unpause_clicked (GtkButton *button, gpointer user_data);
@@ -96,6 +98,8 @@ struct _ControlData {
   GtkWidget *window;                  /**< window */
   
   GtkWidget *main_box;                /**< main container */
+  GtkWidget *ltt_armall_button;
+  GtkWidget *ltt_disarmall_button;
   GtkWidget *start_button;
   GtkWidget *pause_button;
   GtkWidget *unpause_button;
@@ -127,8 +131,10 @@ struct _ControlData {
   GtkWidget *lttctl_path_entry;
   GtkWidget *lttd_path_label;
   GtkWidget *lttd_path_entry;
-  GtkWidget *fac_path_label;
-  GtkWidget *fac_path_entry;
+  GtkWidget *ltt_armall_path_label;
+  GtkWidget *ltt_armall_path_entry;
+  GtkWidget *ltt_disarmall_path_label;
+  GtkWidget *ltt_disarmall_path_entry;
 };
 
 /**
@@ -184,8 +190,27 @@ gui_control(LttvPluginTab *ptab)
   /*
    * start/pause/stop buttons
    */
+
   GdkPixbuf *pixbuf;
   GtkWidget *image;
+  pixbuf = gdk_pixbuf_new_from_xpm_data((const char **)TraceControlStart_xpm);
+  image = gtk_image_new_from_pixbuf(pixbuf);
+  tcd->ltt_armall_button = gtk_button_new_with_label("Arm LTTng kernel probes");
+  //2.6 gtk_button_set_image(GTK_BUTTON(tcd->ltt_armall_button), image);
+  g_object_set(G_OBJECT(tcd->ltt_armall_button), "image", image, NULL);
+  gtk_button_set_alignment(GTK_BUTTON(tcd->ltt_armall_button), 0.0, 0.0);
+  gtk_widget_show (tcd->ltt_armall_button);
+  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->ltt_armall_button,6,7,0,1,GTK_FILL,GTK_FILL,2,2);
+  pixbuf = gdk_pixbuf_new_from_xpm_data((const char **)TraceControlStop_xpm);
+  image = gtk_image_new_from_pixbuf(pixbuf);
+  tcd->ltt_disarmall_button = gtk_button_new_with_label("Disarm LTTng kernel probes");
+  //2.6 gtk_button_set_image(GTK_BUTTON(tcd->ltt_disarmall_button), image);
+  g_object_set(G_OBJECT(tcd->ltt_disarmall_button), "image", image, NULL);
+  gtk_button_set_alignment(GTK_BUTTON(tcd->ltt_disarmall_button), 0.0, 0.0);
+  gtk_widget_show (tcd->ltt_disarmall_button);
+  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->ltt_disarmall_button,6,7,1,2,GTK_FILL,GTK_FILL,2,2);
+
   pixbuf = gdk_pixbuf_new_from_xpm_data((const char **)TraceControlStart_xpm);
   image = gtk_image_new_from_pixbuf(pixbuf);
   tcd->start_button = gtk_button_new_with_label("start");
@@ -193,7 +218,7 @@ gui_control(LttvPluginTab *ptab)
   g_object_set(G_OBJECT(tcd->start_button), "image", image, NULL);
   gtk_button_set_alignment(GTK_BUTTON(tcd->start_button), 0.0, 0.0);
   gtk_widget_show (tcd->start_button);
-  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->start_button,6,7,0,1,GTK_FILL,GTK_FILL,2,2);
+  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->start_button,6,7,2,3,GTK_FILL,GTK_FILL,2,2);
   
   pixbuf = gdk_pixbuf_new_from_xpm_data((const char **)TraceControlPause_xpm);
   image = gtk_image_new_from_pixbuf(pixbuf);
@@ -202,7 +227,7 @@ gui_control(LttvPluginTab *ptab)
   g_object_set(G_OBJECT(tcd->pause_button), "image", image, NULL);
   gtk_button_set_alignment(GTK_BUTTON(tcd->pause_button), 0.0, 0.0);
   gtk_widget_show (tcd->pause_button);
-  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->pause_button,6,7,1,2,GTK_FILL,GTK_FILL,2,2);
+  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->pause_button,6,7,3,4,GTK_FILL,GTK_FILL,2,2);
 
   pixbuf = gdk_pixbuf_new_from_xpm_data((const char **)TraceControlPause_xpm);
   image = gtk_image_new_from_pixbuf(pixbuf);
@@ -211,7 +236,7 @@ gui_control(LttvPluginTab *ptab)
   g_object_set(G_OBJECT(tcd->unpause_button), "image", image, NULL);
   gtk_button_set_alignment(GTK_BUTTON(tcd->unpause_button), 0.0, 0.0);
   gtk_widget_show (tcd->unpause_button);
-  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->unpause_button,6,7,2,3,GTK_FILL,GTK_FILL,2,2);
+  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->unpause_button,6,7,4,5,GTK_FILL,GTK_FILL,2,2);
 
   pixbuf = gdk_pixbuf_new_from_xpm_data((const char **)TraceControlStop_xpm);
   image = gtk_image_new_from_pixbuf(pixbuf);
@@ -220,7 +245,7 @@ gui_control(LttvPluginTab *ptab)
   g_object_set(G_OBJECT(tcd->stop_button), "image", image, NULL);
   gtk_button_set_alignment(GTK_BUTTON(tcd->stop_button), 0.0, 0.0);
   gtk_widget_show (tcd->stop_button);
-  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->stop_button,6,7,3,4,GTK_FILL,GTK_FILL,2,2);
+  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->stop_button,6,7,5,6,GTK_FILL,GTK_FILL,2,2);
   
   /*
    *  First half of the filter window
@@ -342,18 +367,26 @@ gui_control(LttvPluginTab *ptab)
   gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->lttd_path_label,0,2,13,14,GTK_FILL,GTK_FILL,2,2);
   gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->lttd_path_entry,2,6,13,14,GTK_FILL|GTK_EXPAND|GTK_SHRINK,GTK_FILL,0,0);
 
-  
-  tcd->fac_path_label = gtk_label_new("path to facilities:");
-  gtk_widget_show (tcd->fac_path_label);
-  tcd->fac_path_entry = gtk_entry_new();
-  gtk_entry_set_text(GTK_ENTRY(tcd->fac_path_entry),PACKAGE_DATA_DIR "/" "ltt-control" "/facilities");
-  gtk_widget_set_size_request(tcd->fac_path_entry, 250, -1);
-  gtk_widget_show (tcd->fac_path_entry);
-  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->fac_path_label,0,2,14,15,GTK_FILL,GTK_FILL,2,2);
-  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->fac_path_entry,2,6,14,15,GTK_FILL|GTK_EXPAND|GTK_SHRINK,GTK_FILL,0,0);
+  tcd->ltt_armall_path_label = gtk_label_new("path to ltt_armall:");
+  gtk_widget_show (tcd->ltt_armall_path_label);
+  tcd->ltt_armall_path_entry = gtk_entry_new();
+  gtk_entry_set_text(GTK_ENTRY(tcd->ltt_armall_path_entry),PACKAGE_BIN_DIR "/ltt-armall");
+  gtk_widget_show (tcd->ltt_armall_path_entry);
+  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->ltt_armall_path_label,0,2,14,15,GTK_FILL,GTK_FILL,2,2);
+  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->ltt_armall_path_entry,2,6,14,15,GTK_FILL|GTK_EXPAND|GTK_SHRINK,GTK_FILL,0,0);
+
+  tcd->ltt_disarmall_path_label = gtk_label_new("path to ltt_disarmall:");
+  gtk_widget_show (tcd->ltt_disarmall_path_label);
+  tcd->ltt_disarmall_path_entry = gtk_entry_new();
+  gtk_entry_set_text(GTK_ENTRY(tcd->ltt_disarmall_path_entry),PACKAGE_BIN_DIR "/ltt-disarmall");
+  gtk_widget_show (tcd->ltt_disarmall_path_entry);
+  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->ltt_disarmall_path_label,0,2,15,16,GTK_FILL,GTK_FILL,2,2);
+  gtk_table_attach( GTK_TABLE(tcd->main_box),tcd->ltt_disarmall_path_entry,2,6,15,16,GTK_FILL|GTK_EXPAND|GTK_SHRINK,GTK_FILL,0,0);
 
   focus_chain = g_list_append (focus_chain, tcd->username_entry);
   focus_chain = g_list_append (focus_chain, tcd->password_entry);
+  focus_chain = g_list_append (focus_chain, tcd->ltt_armall_path_entry);
+  focus_chain = g_list_append (focus_chain, tcd->ltt_disarmall_path_entry);
   focus_chain = g_list_append (focus_chain, tcd->start_button);
   focus_chain = g_list_append (focus_chain, tcd->pause_button);
   focus_chain = g_list_append (focus_chain, tcd->unpause_button);
@@ -369,7 +402,6 @@ gui_control(LttvPluginTab *ptab)
   focus_chain = g_list_append (focus_chain, tcd->lttd_threads_entry);
   focus_chain = g_list_append (focus_chain, tcd->lttctl_path_entry);
   focus_chain = g_list_append (focus_chain, tcd->lttd_path_entry);
-  focus_chain = g_list_append (focus_chain, tcd->fac_path_entry);
 
   gtk_container_set_focus_chain(GTK_CONTAINER(tcd->main_box), focus_chain);
 
@@ -383,6 +415,10 @@ gui_control(LttvPluginTab *ptab)
       (GCallback)unpause_clicked, tcd);
   g_signal_connect(G_OBJECT(tcd->stop_button), "clicked", 
       (GCallback)stop_clicked, tcd);
+  g_signal_connect(G_OBJECT(tcd->ltt_armall_button), "clicked", 
+      (GCallback)arm_clicked, tcd);
+  g_signal_connect(G_OBJECT(tcd->ltt_disarmall_button), "clicked", 
+      (GCallback)disarm_clicked, tcd);
 
   /* 
    * show main container 
@@ -433,7 +469,7 @@ gui_control_destructor(ControlData *tcd)
 }
 
 static int execute_command(const gchar *command, const gchar *username,
-    const gchar *password, const gchar *lttd_path, const gchar *fac_path)
+    const gchar *password, const gchar *lttd_path)
 {
   pid_t pid;
   int fdpty;
@@ -610,8 +646,6 @@ wait_child:
     /* Setup environment variables */
     if(strcmp(lttd_path, "") != 0)
       setenv("LTT_DAEMON", lttd_path, 1);
-    if(strcmp(fac_path, "") != 0)
-      setenv("LTT_FACILITIES", fac_path, 1);
    
                /* One comment line (must be only one) */
     g_printf("Executing (as %s) : %s\n", username, command);
@@ -674,8 +708,6 @@ void start_clicked (GtkButton *button, gpointer user_data)
   const gchar *lttctl_path =
     gtk_entry_get_text(GTK_ENTRY(tcd->lttctl_path_entry));
   const gchar *lttd_path = gtk_entry_get_text(GTK_ENTRY(tcd->lttd_path_entry));
-  const gchar *fac_path = gtk_entry_get_text(GTK_ENTRY(tcd->fac_path_entry));
-
 
   /* Setup arguments to su */
   /* child */
@@ -702,57 +734,48 @@ void start_clicked (GtkButton *button, gpointer user_data)
   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;
+  /* Start daemon ? */
+  if(start_daemon) {
+    strncat(args, "-C", 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;
 
-  /* 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);
+  /* channel dir */
+  strncat(args, "--channel_root ", args_left);
   args_left = MAX_ARGS_LEN - strlen(args) - 1;
-  strncat(args, trace_name, args_left);
+  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 mode */
-  strncat(args, "-m ", args_left);
+  /* trace dir */
+  strncat(args, "-w ", args_left);
   args_left = MAX_ARGS_LEN - strlen(args) - 1;
-  strncat(args, trace_mode, args_left);
+  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;
 
-  /* Start daemon ? */
-  if(start_daemon) {
-    strncat(args, "-d", args_left);
+  if(strcmp(trace_mode, "flight") == 0) {
+    strncat(args, "-o channel.all.overwrite=1", args_left);
     args_left = MAX_ARGS_LEN - strlen(args) - 1;
   } else {
-    /* Simply create the channel and then start tracing */
-    strncat(args, "-b", args_left);
+    strncat(args, "-o channel.all.overwrite=0", args_left);
     args_left = MAX_ARGS_LEN - strlen(args) - 1;
   }
 
-
   /* Append to trace ? */
   if(append) {
     /* space */
@@ -769,7 +792,7 @@ void start_clicked (GtkButton *button, gpointer user_data)
     strncat(args, " ", args_left);
     args_left = MAX_ARGS_LEN - strlen(args) - 1;
 
-    strncat(args, "-", args_left);
+    strncat(args, "-o channel.all.bufsize=", args_left);
     args_left = MAX_ARGS_LEN - strlen(args) - 1;
     strncat(args, subbuf_size, args_left);
     args_left = MAX_ARGS_LEN - strlen(args) - 1;
@@ -781,7 +804,7 @@ void start_clicked (GtkButton *button, gpointer user_data)
     strncat(args, " ", args_left);
     args_left = MAX_ARGS_LEN - strlen(args) - 1;
 
-    strncat(args, "-", args_left);
+    strncat(args, "-o channel.all.bufnum=", args_left);
     args_left = MAX_ARGS_LEN - strlen(args) - 1;
     strncat(args, subbuf_num, args_left);
     args_left = MAX_ARGS_LEN - strlen(args) - 1;
@@ -793,14 +816,21 @@ void start_clicked (GtkButton *button, gpointer user_data)
     strncat(args, " ", args_left);
     args_left = MAX_ARGS_LEN - strlen(args) - 1;
 
-    strncat(args, "-N ", args_left);
+    strncat(args, "-n ", args_left);
     args_left = MAX_ARGS_LEN - strlen(args) - 1;
     strncat(args, threads_num, args_left);
     args_left = MAX_ARGS_LEN - strlen(args) - 1;
   }
 
+  /* space */
+  strncat(args, " ", args_left);
+  args_left = MAX_ARGS_LEN - strlen(args) - 1;
   
-  int retval = execute_command(args, username, password, lttd_path, fac_path);
+  /* name */
+  strncat(args, trace_name, args_left);
+  args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+  int retval = execute_command(args, username, password, lttd_path);
 
   if(retval) {
     gchar msg[256];
@@ -832,7 +862,6 @@ void pause_clicked (GtkButton *button, gpointer user_data)
   const gchar *trace_name =
     gtk_entry_get_text(GTK_ENTRY(tcd->trace_name_entry));
   const gchar *lttd_path = "";
-  const gchar *fac_path = "";
   
   const gchar *lttctl_path =
     gtk_entry_get_text(GTK_ENTRY(tcd->lttctl_path_entry));
@@ -858,25 +887,23 @@ void pause_clicked (GtkButton *button, gpointer user_data)
     strncat(args, lttctl_path, args_left);
   args_left = MAX_ARGS_LEN - strlen(args) - 1;
 
 /* space */
+ /* 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);
+  /* Simply pause tracing */
+  strncat(args, "-p", args_left);
   args_left = MAX_ARGS_LEN - strlen(args) - 1;
 
   /* space */
   strncat(args, " ", args_left);
   args_left = MAX_ARGS_LEN - strlen(args) - 1;
-  /* Simply pause tracing */
-  strncat(args, "-q", args_left);
+  
+  /* name */
+  strncat(args, trace_name, args_left);
   args_left = MAX_ARGS_LEN - strlen(args) - 1;
 
-  int retval = execute_command(args, username, password, lttd_path, fac_path);
+  int retval = execute_command(args, username, password, lttd_path);
   if(retval) {
     gchar msg[256];
     guint msg_left = 256;
@@ -906,7 +933,6 @@ void unpause_clicked (GtkButton *button, gpointer user_data)
   const gchar *trace_name =
     gtk_entry_get_text(GTK_ENTRY(tcd->trace_name_entry));
   const gchar *lttd_path = "";
-  const gchar *fac_path = "";
   
   const gchar *lttctl_path =
     gtk_entry_get_text(GTK_ENTRY(tcd->lttctl_path_entry));
@@ -935,22 +961,20 @@ void unpause_clicked (GtkButton *button, gpointer user_data)
   /* 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);
+  /* Simply unpause tracing */
+  strncat(args, "-s", args_left);
   args_left = MAX_ARGS_LEN - strlen(args) - 1;
 
   /* space */
   strncat(args, " ", args_left);
   args_left = MAX_ARGS_LEN - strlen(args) - 1;
-  /* Simply unpause tracing */
-  strncat(args, "-s", args_left);
+  
+  /* name */
+  strncat(args, trace_name, args_left);
   args_left = MAX_ARGS_LEN - strlen(args) - 1;
 
-  int retval = execute_command(args, username, password, lttd_path, fac_path);
+  int retval = execute_command(args, username, password, lttd_path);
   if(retval) {
     gchar msg[256];
     guint msg_left = 256;
@@ -980,8 +1004,19 @@ void stop_clicked (GtkButton *button, gpointer user_data)
   const gchar *trace_name =
     gtk_entry_get_text(GTK_ENTRY(tcd->trace_name_entry));
   const gchar *lttd_path = "";
-  const gchar *fac_path = "";
+  const gchar *trace_mode;
+  const gchar *trace_mode_sel;
+  GtkTreeIter iter;
   
+  gtk_combo_box_get_active_iter(GTK_COMBO_BOX(tcd->trace_mode_combo), &iter);
+  gtk_tree_model_get(
+      gtk_combo_box_get_model(GTK_COMBO_BOX(tcd->trace_mode_combo)),
+      &iter, 0, &trace_mode_sel, -1);
+  if(strcmp(trace_mode_sel, "normal") == 0)
+    trace_mode = "normal";
+  else
+    trace_mode = "flight";
   const gchar *lttctl_path =
     gtk_entry_get_text(GTK_ENTRY(tcd->lttctl_path_entry));
   gchar *trace_dir = gtk_entry_get_text(GTK_ENTRY(tcd->trace_dir_entry));
@@ -1013,22 +1048,32 @@ void stop_clicked (GtkButton *button, gpointer user_data)
   /* 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);
+  /* Simply stop tracing and destroy channel */
+  strncat(args, "-D", args_left);
   args_left = MAX_ARGS_LEN - strlen(args) - 1;
 
+  if(strcmp(trace_mode, "flight") == 0) {
+    /* space */
+    strncat(args, " ", args_left);
+    args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+    /* trace dir */
+    strncat(args, "-w ", 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;
-  /* Simply stop tracing and destroy channel */
-  strncat(args, "-R", args_left);
+  
+  /* name */
+  strncat(args, trace_name, args_left);
   args_left = MAX_ARGS_LEN - strlen(args) - 1;
 
-  int retval = execute_command(args, username, password, lttd_path, fac_path);
+  int retval = execute_command(args, username, password, lttd_path);
   if(retval) {
     gchar msg[256];
     guint msg_left = 256;
@@ -1082,6 +1127,108 @@ void stop_clicked (GtkButton *button, gpointer user_data)
   g_slist_free(trace_list);
 }
 
+void arm_clicked (GtkButton *button, gpointer user_data)
+{
+  ControlData *tcd = (ControlData*)user_data;
+
+  const gchar *username = gtk_entry_get_text(GTK_ENTRY(tcd->username_entry));
+  const gchar *password = gtk_entry_get_text(GTK_ENTRY(tcd->password_entry));
+  const gchar *ltt_armall_path =
+    gtk_entry_get_text(GTK_ENTRY(tcd->ltt_armall_path_entry));
+
+  /* Setup arguments to su */
+  /* child */
+  gchar args[MAX_ARGS_LEN];
+  gint args_left = MAX_ARGS_LEN - 1; /* for \0 */
+  args[0] = '\0';
+
+  /* Command */
+  strncat(args, "exec", args_left);
+  args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+  /* space */
+  strncat(args, " ", args_left);
+  args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+  if(strcmp(ltt_armall_path, "") == 0)
+    strncat(args, "ltt-armall", args_left);
+  else
+    strncat(args, ltt_armall_path, args_left);
+  args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+  int retval = execute_command(args, username, password, "");
+  if(retval) {
+    gchar msg[256];
+    guint msg_left = 256;
+
+    strcpy(msg, "A problem occured when executing the su command : ");
+    msg_left = 256 - strlen(msg) - 1;
+    strncat(msg, strerror(retval), msg_left);
+    GtkWidget *dialogue = 
+      gtk_message_dialog_new(
+        GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(button))),
+        GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+        GTK_MESSAGE_ERROR,
+        GTK_BUTTONS_OK,
+        msg);
+    gtk_dialog_run(GTK_DIALOG(dialogue));
+    gtk_widget_destroy(dialogue);
+  }
+}
+
+void disarm_clicked (GtkButton *button, gpointer user_data)
+{
+  ControlData *tcd = (ControlData*)user_data;
+
+  const gchar *username = gtk_entry_get_text(GTK_ENTRY(tcd->username_entry));
+  const gchar *password = gtk_entry_get_text(GTK_ENTRY(tcd->password_entry));
+  const gchar *ltt_disarmall_path =
+    gtk_entry_get_text(GTK_ENTRY(tcd->ltt_disarmall_path_entry));
+
+  /* Setup arguments to su */
+  /* child */
+  gchar args[MAX_ARGS_LEN];
+  gint args_left = MAX_ARGS_LEN - 1; /* for \0 */
+  args[0] = '\0';
+
+  /* Command */
+  strncat(args, "exec", args_left);
+  args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+  /* space */
+  strncat(args, " ", args_left);
+  args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+  if(strcmp(ltt_disarmall_path, "") == 0)
+    strncat(args, "ltt-disarmall", args_left);
+  else
+    strncat(args, ltt_disarmall_path, args_left);
+  args_left = MAX_ARGS_LEN - strlen(args) - 1;
+
+  int retval = execute_command(args, username, password, "");
+  if(retval) {
+    gchar msg[256];
+    guint msg_left = 256;
+
+    strcpy(msg, "A problem occured when executing the su command : ");
+    msg_left = 256 - strlen(msg) - 1;
+    strncat(msg, strerror(retval), msg_left);
+    GtkWidget *dialogue = 
+      gtk_message_dialog_new(
+        GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(button))),
+        GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+        GTK_MESSAGE_ERROR,
+        GTK_BUTTONS_OK,
+        msg);
+    gtk_dialog_run(GTK_DIALOG(dialogue));
+    gtk_widget_destroy(dialogue);
+  }
+}
+
 
 /**
  *  @fn GtkWidget* h_guicontrol(Tab*)
This page took 0.030457 seconds and 4 git commands to generate.