Enlightenment CVS committal

Author  : devilhorns
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_apps_error.c 


Log Message:
Add a way to save error messages from e_app_error dialogue. Logs default to 
~/<appname>.log . Add 2 missing function protos. Some formatting.
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_apps_error.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- e_apps_error.c      18 Feb 2006 04:35:26 -0000      1.12
+++ e_apps_error.c      18 Feb 2006 12:14:41 -0000      1.13
@@ -3,7 +3,6 @@
  */
 #include "e.h"
 
-
 struct _E_Config_Dialog_Data
 {
    char *label;
@@ -11,12 +10,14 @@
    char *signal;
 };
 
-
 /* Protos */
 static void *       _e_app_error_dialog_create_data(E_Config_Dialog *cfd);
 static void         _e_app_error_dialog_free_data(E_Config_Dialog *cfd, 
E_Config_Dialog_Data *cfdata);
 static Evas_Object *_e_app_error_dialog_basic_create_widgets(E_Config_Dialog 
*cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
 static Evas_Object 
*_e_app_error_dialog_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata);
+static void         _e_app_error_dialog_resize(void *data, Evas *e, 
Evas_Object *obj, void *event_info);
+static Evas_Object *_e_app_error_dialog_scrolltext_create(Evas *evas, char 
*title, Ecore_Exe_Event_Data_Line *lines);
+static void         _e_app_error_dialog_save_cb(void *data, void *data2);
 
 EAPI void 
 e_app_error_dialog(E_Container *con, E_App_Autopsy *app)
@@ -26,17 +27,17 @@
 
    v = E_NEW(E_Config_Dialog_View, 1);  /* This gets freed by e_config_dialog. 
*/
    if (v)
-      {
-         /* Dialog Methods */
-         v->create_cfdata = _e_app_error_dialog_create_data;
-         v->free_cfdata = _e_app_error_dialog_free_data;
-         v->basic.create_widgets = _e_app_error_dialog_basic_create_widgets;
-         v->advanced.create_widgets = 
_e_app_error_dialog_advanced_create_widgets;
-
-         /* Create The Dialog */
-         cfd = e_config_dialog_new(con, _("Application Execution Error"), 
NULL, 0, v, app);
-         app->error_dialog = cfd;
-      }
+     {
+       /* Dialog Methods */
+       v->create_cfdata = _e_app_error_dialog_create_data;
+       v->free_cfdata = _e_app_error_dialog_free_data;
+       v->basic.create_widgets = _e_app_error_dialog_basic_create_widgets;
+       v->advanced.create_widgets = 
_e_app_error_dialog_advanced_create_widgets;
+
+       /* Create The Dialog */
+       cfd = e_config_dialog_new(con, _("Application Execution Error"), NULL, 
0, v, app);
+       app->error_dialog = cfd;
+     }
 }
 
 static void 
@@ -45,72 +46,72 @@
    char buf[4096];
 
    if (!cfdata->label)
-      {
-        snprintf(buf, sizeof(buf), _("%s stopped running unexpectedly."), 
-                 app->app->name);
-         cfdata->label = strdup(buf);
-      }
+     {
+       snprintf(buf, sizeof(buf), _("%s stopped running unexpectedly."), 
+                app->app->name);
+       cfdata->label = strdup(buf);
+     }
 
    if ((app->del.exited) && (!cfdata->exit))
-      {
-        snprintf(buf, sizeof(buf), _("An exit code of %i was returned from 
%s"),
-                 app->del.exit_code, app->app->exe);
-         cfdata->exit = strdup(buf);
-      }
+     {
+       snprintf(buf, sizeof(buf), _("An exit code of %i was returned from %s"),
+                app->del.exit_code, app->app->exe);
+       cfdata->exit = strdup(buf);
+     }
    if ((app->del.signalled) && (!cfdata->signal))
-      {
-        if (app->del.exit_signal == SIGINT)
-          snprintf(buf, sizeof(buf), _("%s was interrupted by an Interrupt 
Signal"),
-                   app->app->exe);
-        else if (app->del.exit_signal == SIGQUIT)
-          snprintf(buf, sizeof(buf), _("%s was interrupted by a Quit Signal"),
-                   app->app->exe);
-        else if (app->del.exit_signal == SIGABRT)
-          snprintf(buf, sizeof(buf), _("%s was interrupted by an Abort 
Signal"),
-                   app->app->exe);
-        else if (app->del.exit_signal == SIGFPE)
-          snprintf(buf, sizeof(buf), _("%s was interrupted by a Floating Point 
Error"),
-                   app->app->exe);
-        else if (app->del.exit_signal == SIGKILL)
-          snprintf(buf, sizeof(buf), _("%s was interrupted by an 
Uninterruptable Kill Signal"),
-                   app->app->exe);
-        else if (app->del.exit_signal == SIGSEGV)
-          snprintf(buf, sizeof(buf), _("%s was interrupted by a Segmentation 
Fault"),
-                   app->app->exe);
-        else if (app->del.exit_signal == SIGPIPE)
-          snprintf(buf, sizeof(buf), _("%s was interrupted by a Broken Pipe"),
-                   app->app->exe);
-        else if (app->del.exit_signal == SIGTERM)
-          snprintf(buf, sizeof(buf), _("%s was interrupted by a Termination 
Singal"),
-                   app->app->exe);
-        else if (app->del.exit_signal == SIGBUS)
-          snprintf(buf, sizeof(buf), _("%s was interrupted by a Bus Error"),
-                   app->app->exe);
-        else
-          snprintf(buf, sizeof(buf), _("%s was interrupted by the signal 
number %i"),
-                   app->app->exe, app->del.exit_signal);
-         cfdata->signal = strdup(buf);
-/* FIXME: Add  sigchld_info stuff
- * app->del.data
- *    siginfo_t
- *    {
- *       int      si_signo;     Signal number 
- *       int      si_errno;     An errno value 
- *       int      si_code;      Signal code 
- *       pid_t    si_pid;       Sending process ID 
- *       uid_t    si_uid;       Real user ID of sending process 
- *       int      si_status;    Exit value or signal 
- *       clock_t  si_utime;     User time consumed 
- *       clock_t  si_stime;     System time consumed 
- *       sigval_t si_value;     Signal value 
- *       int      si_int;       POSIX.1b signal 
- *       void *   si_ptr;       POSIX.1b signal 
- *       void *   si_addr;      Memory location which caused fault 
- *       int      si_band;      Band event 
- *       int      si_fd;        File descriptor 
- *    }
- */
-      }
+     {
+       if (app->del.exit_signal == SIGINT)
+         snprintf(buf, sizeof(buf), _("%s was interrupted by an Interrupt 
Signal"),
+                  app->app->exe);
+       else if (app->del.exit_signal == SIGQUIT)
+         snprintf(buf, sizeof(buf), _("%s was interrupted by a Quit Signal"),
+                  app->app->exe);
+       else if (app->del.exit_signal == SIGABRT)
+         snprintf(buf, sizeof(buf), _("%s was interrupted by an Abort Signal"),
+                  app->app->exe);
+       else if (app->del.exit_signal == SIGFPE)
+         snprintf(buf, sizeof(buf), _("%s was interrupted by a Floating Point 
Error"),
+                  app->app->exe);
+       else if (app->del.exit_signal == SIGKILL)
+         snprintf(buf, sizeof(buf), _("%s was interrupted by an 
Uninterruptable Kill Signal"),
+                  app->app->exe);
+       else if (app->del.exit_signal == SIGSEGV)
+         snprintf(buf, sizeof(buf), _("%s was interrupted by a Segmentation 
Fault"),
+                  app->app->exe);
+       else if (app->del.exit_signal == SIGPIPE)
+         snprintf(buf, sizeof(buf), _("%s was interrupted by a Broken Pipe"),
+                  app->app->exe);
+       else if (app->del.exit_signal == SIGTERM)
+         snprintf(buf, sizeof(buf), _("%s was interrupted by a Termination 
Singal"),
+                  app->app->exe);
+       else if (app->del.exit_signal == SIGBUS)
+         snprintf(buf, sizeof(buf), _("%s was interrupted by a Bus Error"),
+                  app->app->exe);
+       else
+         snprintf(buf, sizeof(buf), _("%s was interrupted by the signal number 
%i"),
+                  app->app->exe, app->del.exit_signal);
+       cfdata->signal = strdup(buf);
+       /* FIXME: Add  sigchld_info stuff
+        * app->del.data
+        *    siginfo_t
+        *    {
+        *       int      si_signo;     Signal number 
+        *       int      si_errno;     An errno value 
+        *       int      si_code;      Signal code 
+        *       pid_t    si_pid;       Sending process ID 
+        *       uid_t    si_uid;       Real user ID of sending process 
+        *       int      si_status;    Exit value or signal 
+        *       clock_t  si_utime;     User time consumed 
+        *       clock_t  si_stime;     System time consumed 
+        *       sigval_t si_value;     Signal value 
+        *       int      si_int;       POSIX.1b signal 
+        *       void *   si_ptr;       POSIX.1b signal 
+        *       void *   si_addr;      Memory location which caused fault 
+        *       int      si_band;      Band event 
+        *       int      si_fd;        File descriptor 
+        *    }
+        */
+     }
 }
 
 static void *
@@ -133,20 +134,20 @@
    app = cfd->data;
 
    if(app)
-      {
-         app->error_dialog = NULL;
-         if (app->error)
-            ecore_exe_event_data_free(app->error);
-         if (app->read)
-            ecore_exe_event_data_free(app->read);
-         free(app);
-      }
+     {
+       app->error_dialog = NULL;
+       if (app->error)
+         ecore_exe_event_data_free(app->error);
+       if (app->read)
+         ecore_exe_event_data_free(app->read);
+       free(app);
+     }
    if (cfdata->signal)
-      free(cfdata->signal);
+     free(cfdata->signal);
    if (cfdata->exit)
-      free(cfdata->exit);
+     free(cfdata->exit);
    if (cfdata->label)
-      free(cfdata->label);
+     free(cfdata->label);
 
    free(cfdata);
 }
@@ -214,17 +215,20 @@
    e_widget_list_object_append(o, ob, 1, 1, 0.5);
 
    if (app->error)
-      error_length = app->error->size;
+     error_length = app->error->size;
    if (error_length)
-      {
-         os = _e_app_error_dialog_scrolltext_create(evas, _("Error Logs"), 
app->error->lines);
-         e_widget_list_object_append(o, os, 1, 1, 0.5);
-      }
+     {
+       os = _e_app_error_dialog_scrolltext_create(evas, _("Error Logs"), 
app->error->lines);
+       e_widget_list_object_append(o, os, 1, 1, 0.5);
+     }
    else
-      {
-         ob = e_widget_label_add(evas, _("There was no error message."));
-         e_widget_list_object_append(o, ob, 1, 1, 0.5);
-      }
+     {
+       ob = e_widget_label_add(evas, _("There was no error message."));
+       e_widget_list_object_append(o, ob, 1, 1, 0.5);
+     }
+
+   ob = e_widget_button_add(evas, _("Save This Message"), "enlightenment/run", 
_e_app_error_dialog_save_cb, app, cfdata);
+   e_widget_list_object_append(o, ob, 0, 0, 0.5);
 
    return o;
 }
@@ -247,55 +251,150 @@
    e_widget_list_object_append(o, ob, 1, 1, 0.5);
 
    if (cfdata->exit)
-      {
-         of = e_widget_framelist_add(evas, _("Error Information"), 0);
-         ob = e_widget_label_add(evas, _(cfdata->exit));
-         e_widget_framelist_object_append(of, ob);
-         e_widget_list_object_append(o, of, 1, 1, 0.5);
-      }
+     {
+       of = e_widget_framelist_add(evas, _("Error Information"), 0);
+       ob = e_widget_label_add(evas, _(cfdata->exit));
+       e_widget_framelist_object_append(of, ob);
+       e_widget_list_object_append(o, of, 1, 1, 0.5);
+     }
 
    if (cfdata->signal)
-      {
-         of = e_widget_framelist_add(evas, _("Error Signal Information"), 0);
-         ob = e_widget_label_add(evas, _(cfdata->signal));
-         e_widget_framelist_object_append(of, ob);
-         e_widget_list_object_append(o, of, 1, 1, 0.5);
-      }
+     {
+       of = e_widget_framelist_add(evas, _("Error Signal Information"), 0);
+       ob = e_widget_label_add(evas, _(cfdata->signal));
+       e_widget_framelist_object_append(of, ob);
+       e_widget_list_object_append(o, of, 1, 1, 0.5);
+     }
 
    if (app->read)
-      read_length = app->read->size;
+     read_length = app->read->size;
 
    if (read_length)
-      {
-         of = _e_app_error_dialog_scrolltext_create(evas, _("Output Data"), 
app->read->lines);
-/* FIXME: Add stdout "start". */
-/* FIXME: Add stdout "end". */
-      }
+     {
+       of = _e_app_error_dialog_scrolltext_create(evas, _("Output Data"), 
app->read->lines);
+       /* FIXME: Add stdout "start". */
+       /* FIXME: Add stdout "end". */
+     }
    else
-      {
-         of = e_widget_framelist_add(evas, _("Output Data"), 0);
-         ob = e_widget_label_add(evas, _("There was no output."));
-         e_widget_framelist_object_append(of, ob);
-      }
+     {
+       of = e_widget_framelist_add(evas, _("Output Data"), 0);
+       ob = e_widget_label_add(evas, _("There was no output."));
+       e_widget_framelist_object_append(of, ob);
+     }
    e_widget_table_object_append(ot, of, 0, 0, 1, 1, 1, 1, 1, 1);
    
    if (app->error)
-      error_length = app->error->size;
+     error_length = app->error->size;
    if (error_length)
-      {
-         of = _e_app_error_dialog_scrolltext_create(evas, _("Error Logs"), 
app->error->lines);
-/* FIXME: Add stderr "start". */
-/* FIXME: Add stderr "end". */
-      }
+     {
+       of = _e_app_error_dialog_scrolltext_create(evas, _("Error Logs"), 
app->error->lines);
+       /* FIXME: Add stderr "start". */
+       /* FIXME: Add stderr "end". */
+     }
    else
-      {
-         of = e_widget_framelist_add(evas, _("Error Logs"), 0);
-         ob = e_widget_label_add(evas, _("There was no error message."));
-         e_widget_framelist_object_append(of, ob);
-      }
+     {
+       of = e_widget_framelist_add(evas, _("Error Logs"), 0);
+       ob = e_widget_label_add(evas, _("There was no error message."));
+       e_widget_framelist_object_append(of, ob);
+     }
    e_widget_table_object_append(ot, of, 1, 0, 1, 1, 1, 1, 1, 1);
 
    e_widget_list_object_append(o, ot, 1, 1, 0.5);
+
+   ob = e_widget_button_add(evas, _("Save This Message"), "enlightenment/run", 
_e_app_error_dialog_save_cb, app, cfdata);
+   e_widget_list_object_append(o, ob, 0, 0, 0.5);
    
    return o;
 }
+
+static void 
+_e_app_error_dialog_save_cb(void *data, void *data2)
+{
+   E_App_Autopsy *app;
+   E_Config_Dialog_Data *cfdata;
+   FILE *f;
+   char *text;
+   char buf[1024];
+   char buffer[4096];
+   int read_length = 0;
+   int i, tlen;
+   
+   app = data;
+   cfdata = data2;
+   
+   snprintf(buf, sizeof(buf), "%s/%s.log", e_user_homedir_get(), 
app->app->name);
+   f = fopen(buf, "w");
+   if (!f)
+     return;
+
+   if (cfdata->exit)
+     {
+       snprintf(buffer, sizeof(buffer), "Error Information:\n\t%s\n\n", 
cfdata->exit);
+       fwrite(buffer, sizeof(char), strlen(buffer), f);
+     }
+   if (cfdata->signal)
+     {
+       snprintf(buffer, sizeof(buffer), "Error Signal Information:\n\t%s\n\n", 
cfdata->signal);
+       fwrite(buffer, sizeof(char), strlen(buffer), f);        
+     }
+
+   if (app->read)
+     read_length = app->read->size;
+
+   if (read_length)
+     {
+       tlen = 0;
+       for (i = 0; app->read->lines[i].line != NULL; i++)
+         tlen += app->read->lines[i].size + 1;
+       text = alloca(tlen + 1);
+       if (text)
+         {
+            text[0] = 0;
+            for (i = 0; app->read->lines[i].line != NULL; i++)
+              {
+                 strcat(text, "\t");
+                 strcat(text, app->read->lines[i].line);
+                 strcat(text, "\n");
+              }
+            snprintf(buffer, sizeof(buffer), "Output Data:\n%s\n\n", text);
+            fwrite(buffer, sizeof(char), strlen(buffer), f);
+         }
+     }
+   else
+     {
+       snprintf(buffer, sizeof(buffer), "Output Data:\n\tThere was no 
output\n\n");
+       fwrite(buffer, sizeof(char), strlen(buffer), f);        
+     }
+   
+   /* Reusing this var */
+   read_length = 0;
+   if (app->error)
+     read_length = app->error->size;
+
+   if (read_length)
+     {
+       tlen = 0;
+       for (i = 0; app->error->lines[i].line != NULL; i++)
+         tlen += app->error->lines[i].size + 1;
+       text = alloca(tlen + 1);
+       if (text)
+         {
+            text[0] = 0;
+            for (i = 0; app->error->lines[i].line != NULL; i++)
+              {
+                 strcat(text, "\t");
+                 strcat(text, app->error->lines[i].line);
+                 strcat(text, "\n");
+              }
+            snprintf(buffer, sizeof(buffer), "Error Logs:\n%s\n", text);
+            fwrite(buffer, sizeof(char), strlen(buffer), f);
+         }
+     }
+   else 
+     {
+       snprintf(buffer, sizeof(buffer), "Error Logs:\n\tThere was no error 
message\n");
+       fwrite(buffer, sizeof(char), strlen(buffer), f);
+     }
+   
+   fclose(f);
+}




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to