src/fsm/log/oper.c fsm_add_log_event() fixing a bug

The bug was caused by pointers to local variables sended to fsm_add_log().
malloc() are now realized in fsm_add_log_event().

+ cleaning (checking that the sentence "This file is part of Gem-graph."
is systematicaly added to legal mentions.)
This commit is contained in:
Jean Sirmai 2024-11-13 17:17:36 +01:00
parent 05bb7c4ec2
commit e32427912d
Signed by: jean
GPG Key ID: FB3115C340E057E3
10 changed files with 113 additions and 51 deletions

View File

@ -67,6 +67,8 @@
* *
* *
* @cond LICENSE * @cond LICENSE
* This file is part of Gem-graph.
*
* Copyright © 2021 Libre en Communs <contact@a-lec.org> * Copyright © 2021 Libre en Communs <contact@a-lec.org>
* Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org> * Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org>
* Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org> * Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org>
@ -173,7 +175,7 @@ enum fsm_enum_log_source {
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
/** /**
* Structure of a log unit. * A log unit must include the followings:
* *
* @callergraph * @callergraph
* @see fsm_log_struct * @see fsm_log_struct
@ -182,9 +184,9 @@ typedef struct fsm_log_unit_struct
{ {
long yy_dd_mm; /**< * date of the event reported in the log */ long yy_dd_mm; /**< * date of the event reported in the log */
long usec; /**< * with microseconds precision */ long usec; /**< * with microseconds precision */
const char *file_source; /**< * emitter file */ char *file_source; /**< * emitter file */
const char *function_source; /**< * emitter function */ char *function_source; /**< * emitter function */
const char *string_value; /**< * any event descriptors */ char *string_value; /**< * any event descriptors */
struct fsm_log_unit_struct *prev; /**< * chained list */ struct fsm_log_unit_struct *prev; /**< * chained list */
struct fsm_log_unit_struct *next; /**< * chained list */ struct fsm_log_unit_struct *next; /**< * chained list */
} }
@ -220,31 +222,31 @@ void fsm_publish_log (fsm_log_struct jj);
void fsm_clear_log (fsm_log_struct *jj); void fsm_clear_log (fsm_log_struct *jj);
void fsm_add_log_event (fsm_log_struct *jj, void fsm_add_log_event (fsm_log_struct *jj,
const char *file_source, char *file_source,
const char *function_source, char *function_source,
const char *string_value); char *string_value);
int fsm_get_log_length(fsm_log_struct jj); int fsm_get_log_length(fsm_log_struct jj);
void fsm_seek_log (fsm_log_struct jj, void fsm_seek_log (fsm_log_struct jj,
long usec, long usec,
const char *file_source, char *file_source,
const char *function_source, char *function_source,
const char *string_value); char *string_value);
long fsm_remove_log (fsm_log_struct *jj, long fsm_remove_log (fsm_log_struct *jj,
const char *file_source, char *file_source,
const char *function_source, char *function_source,
const char *string_value); char *string_value);
void fsm_add_log (int severity, void fsm_add_log (int severity,
int source, int source,
const char *file_source, char *file_source,
const char *function_source, char *function_source,
const char *string_value); char *string_value);
void fsm_relay_init_log(); void fsm_relay_init_log();
void fsm_relay_close_log(); void fsm_relay_close_log();
void fsm_init (const char *initial_message_from_main); void fsm_init (char *initial_message_from_main);
void fsm_close (const char *final_message_from_main); void fsm_close (char *final_message_from_main);

View File

@ -3,6 +3,8 @@
* Widgets hierarchy header of the Gem-graph client; * Widgets hierarchy header of the Gem-graph client;
* *
* @cond LICENSE * @cond LICENSE
* This file is part of Gem-graph.
*
* Copyright © 2021 Libre en Communs <contact@a-lec.org> * Copyright © 2021 Libre en Communs <contact@a-lec.org>
* Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org> * Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org>
* Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org> * Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org>

View File

@ -42,6 +42,8 @@
* About code organization, see src/readme.dox * About code organization, see src/readme.dox
* *
* @cond LICENSE * @cond LICENSE
* This file is part of Gem-graph.
*
* Copyright © 2021 Libre en Communs <contact@a-lec.org> * Copyright © 2021 Libre en Communs <contact@a-lec.org>
* Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org> * Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org>
* Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org> * Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org>
@ -138,7 +140,7 @@ static void fsm_structures_close()
* *
* @param *initial_info_from_main * @param *initial_info_from_main
*/ */
void fsm_init (const char *initial_info_from_main) void fsm_init (char *initial_info_from_main)
{ {
fsm_relay_init_log(); fsm_relay_init_log();
@ -179,7 +181,7 @@ void fsm_init (const char *initial_info_from_main)
* *
* @param *closing_info_from_main * @param *closing_info_from_main
*/ */
void fsm_close (const char *closing_info_from_main) void fsm_close (char *closing_info_from_main)
{ {
fsm_add_log (INFO, FSM, "fsm/control", "fsm closing", "has began"); fsm_add_log (INFO, FSM, "fsm/control", "fsm closing", "has began");
fsm_structures_close(); fsm_structures_close();

View File

@ -9,6 +9,8 @@
* utility remains to evaluate in the case of a log list. * utility remains to evaluate in the case of a log list.
* *
* @cond LICENSE * @cond LICENSE
* This file is part of Gem-graph.
*
* Copyright © 2021 Libre en Communs <contact@a-lec.org> * Copyright © 2021 Libre en Communs <contact@a-lec.org>
* Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org> * Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org>
* Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org> * Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org>
@ -45,9 +47,9 @@
* @returns the removed event date microseconds * @returns the removed event date microseconds
*/ */
long fsm_remove_log (fsm_log_struct *jj, long fsm_remove_log (fsm_log_struct *jj,
const char *file_source, char *file_source,
const char *function_source, char *function_source,
const char *string_value) char *string_value)
{ {
long usec; long usec;
fsm_log_unit_struct *tmp = jj->last; fsm_log_unit_struct *tmp = jj->last;
@ -96,9 +98,9 @@ int fsm_get_log_length (fsm_log_struct jj)
*/ */
void fsm_seek_log (fsm_log_struct jj, void fsm_seek_log (fsm_log_struct jj,
long usec, long usec,
const char *file_source, char *file_source,
const char *function_source, char *function_source,
const char *string_value) char *string_value)
{ {
fsm_log_unit_struct *a_unit = jj.first; fsm_log_unit_struct *a_unit = jj.first;
int nb = 0; int nb = 0;

View File

@ -12,6 +12,8 @@
* -# the two relay functions that init and publish the log before closing it. * -# the two relay functions that init and publish the log before closing it.
* *
* @cond LICENSE * @cond LICENSE
* This file is part of Gem-graph.
*
* Copyright © 2021 Libre en Communs <contact@a-lec.org> * Copyright © 2021 Libre en Communs <contact@a-lec.org>
* Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org> * Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org>
* Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org> * Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org>
@ -92,9 +94,9 @@ static fsm_log_struct gg_logs;
*/ */
void fsm_add_log (int severity, void fsm_add_log (int severity,
int source, int source,
const char *file_source, char *file_source,
const char *function_source, char *function_source,
const char *string_value) char *string_value)
{ {
if if
( (

View File

@ -14,6 +14,8 @@
* It will be printed in chronological order in a file. * It will be printed in chronological order in a file.
* *
* @cond LICENSE * @cond LICENSE
* This file is part of Gem-graph.
*
* Copyright © 2021 Libre en Communs <contact@a-lec.org> * Copyright © 2021 Libre en Communs <contact@a-lec.org>
* Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org> * Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org>
* Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org> * Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org>
@ -41,6 +43,9 @@
#include <glib.h> #include <glib.h>
#include "../../../include/fsm.h" #include "../../../include/fsm.h"
static int string_1_size = 40;
static int string_2_size = 40;
static int string_3_size = 40;
/** /**
* Inits the log: a double chained list. * Inits the log: a double chained list.
@ -95,25 +100,33 @@ void fsm_clear_log (fsm_log_struct *jj)
* @param *string_value * @param *string_value
*/ */
void fsm_add_log_event (fsm_log_struct *jj, void fsm_add_log_event (fsm_log_struct *jj,
const char *file_source, char *file_source,
const char *function_source, char *function_source,
const char *string_value) char *string_value)
{ {
struct timeval tv; struct timeval tv;
gettimeofday (&tv, NULL); gettimeofday (&tv, NULL);
fsm_log_unit_struct *new_unit = malloc (sizeof(fsm_log_unit_struct)); fsm_log_unit_struct *new_unit = malloc (sizeof(fsm_log_unit_struct));
if (! new_unit) exit (EXIT_FAILURE); if (! new_unit) exit (EXIT_FAILURE);
new_unit->yy_dd_mm = tv.tv_sec; new_unit->yy_dd_mm = tv.tv_sec;
new_unit->usec = tv.tv_usec; new_unit->usec = tv.tv_usec;
new_unit->file_source = file_source;
new_unit->function_source = function_source; new_unit->file_source = malloc(string_1_size * sizeof(char));
new_unit->string_value = string_value; new_unit->function_source = malloc(string_2_size * sizeof(char));
new_unit->string_value = malloc(string_3_size * sizeof(char));
strncpy (new_unit->file_source, file_source, string_1_size - 1);
strncpy (new_unit->function_source, function_source, string_2_size - 1);
strncpy (new_unit->string_value, string_value, string_3_size - 1);
new_unit->next = jj->first; new_unit->next = jj->first;
new_unit->prev = NULL; new_unit->prev = NULL;
if (jj->first) jj->first->prev = new_unit; if (jj->first) jj->first->prev = new_unit;
else jj->last = new_unit; else jj->last = new_unit;
jj->first = new_unit; jj->first = new_unit;
} }
@ -124,6 +137,7 @@ void fsm_add_log_event (fsm_log_struct *jj,
* Publishes all the logs chronologically (using the g_lib function: g_message) * Publishes all the logs chronologically (using the g_lib function: g_message)
* *
* Today, simply printed in the console; TODO: print in a file * Today, simply printed in the console; TODO: print in a file
* NB string_3_size = 40 (this name can't be used for formatting in g_message()
* *
* @since 2024-09 * @since 2024-09
* *
@ -137,13 +151,14 @@ void fsm_publish_log (fsm_log_struct jj)
while (a_unit) while (a_unit)
{ {
strftime(buf, sizeof(buf), "%D %T", localtime(&a_unit->yy_dd_mm)); strftime(buf, sizeof(buf), "%D %T", localtime(&a_unit->yy_dd_mm));
g_message ("%s + %-6ld %6d %-32s %-38s %-50s", g_message ("%s + %-6ld %6d %-28s %-32s %-40s",
buf, buf,
a_unit->usec, a_unit->usec,
nb, nb,
a_unit->file_source, a_unit->file_source,
a_unit->function_source, a_unit->function_source,
a_unit->string_value); a_unit->string_value);
free (a_unit->string_value);
a_unit = a_unit->prev; a_unit = a_unit->prev;
nb ++; nb ++;
} }

View File

@ -3,13 +3,13 @@
* Main file of the Gem-graph client; contains only the main() function. * Main file of the Gem-graph client; contains only the main() function.
* *
* The main() function * The main() function
* - **initialise** * - **initialises**
* -# the log, * -# the log,
* -# the finite state machine (fsm), * -# the finite state machine (fsm),
* -# the application, * -# the application,
* -# the windows and * -# the windows and
* *
* - **close** all the elements it opened in reverse order * - **closes** all the elements it opened in reverse order
* before ending the program execution * before ending the program execution
* . * .
* *
@ -19,6 +19,8 @@
* About code organization, see src/readme.dox * About code organization, see src/readme.dox
* *
* @cond LICENSE * @cond LICENSE
* This file is part of Gem-graph.
*
* Copyright © 2021 Libre en Communs <contact@a-lec.org> * Copyright © 2021 Libre en Communs <contact@a-lec.org>
* Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org> * Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org>
* Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org> * Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org>

View File

@ -3,6 +3,8 @@
* Gem-graph-client quick documentation (NB see also the Manual) * Gem-graph-client quick documentation (NB see also the Manual)
* *
* @cond LICENSE * @cond LICENSE
* This file is part of Gem-graph.
*
* Copyright © 2021 Libre en Communs <contact@a-lec.org> * Copyright © 2021 Libre en Communs <contact@a-lec.org>
* Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org> * Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org>
* Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org> * Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org>

View File

@ -1,12 +1,14 @@
/** /**
* @file * @file
* Gem-graph client Main Window designer. * Gem-graph client Main window designer.
* *
* Initiates, designs and frees the Gem-graph client main window. * Initiates, designs and frees the Gem-graph client main window.
* *
* *
* *
* @cond LICENSE * @cond LICENSE
* This file is part of Gem-graph.
*
* Copyright © 2021 Libre en Communs <contact@a-lec.org> * Copyright © 2021 Libre en Communs <contact@a-lec.org>
* Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org> * Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org>
* Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org> * Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org>
@ -32,16 +34,15 @@
#include "../../../include/fsm.h" #include "../../../include/fsm.h"
/** /**
* @brief Main Window design() * @brief Main window design()
* *
* @param *main_window * @param *main_window
* @param *app * @param *app
*/ */
void widget_get_main_window (GtkWindow *main_window, void widget_get_main_window (GtkWindow *main_window, GtkApplication *app)
GtkApplication *app)
{ {
fsm_add_log (INFO, TOPBAR, "widget/main_window/design", fsm_add_log (INFO, TOPBAR, "widget/main_window/design",
"> main window", "has began"); "main window", "start of design");
GtkWidget *topbar = GTK_WIDGET (gtk_header_bar_new ()); GtkWidget *topbar = GTK_WIDGET (gtk_header_bar_new ());
@ -49,11 +50,14 @@ void widget_get_main_window (GtkWindow *main_window,
gtk_header_bar_set_title_widget (GTK_HEADER_BAR (topbar), gtk_header_bar_set_title_widget (GTK_HEADER_BAR (topbar),
gtk_label_new (title)); gtk_label_new (title));
gtk_window_set_child (main_window, GtkWidget *e_coli = GTK_WIDGET (gtk_picture_new_for_filename
GTK_WIDGET (gtk_picture_new_for_filename ("./docs/showcase/E coli (Goodsell).png"));
("./docs/showcase/E coli (Goodsell).png")));
gtk_window_set_child (main_window, e_coli);
// g_object_unref (e_coli);
fsm_add_log (INFO, TOPBAR, "widget/main_window/design", fsm_add_log (INFO, TOPBAR, "widget/main_window/design",
"> main window", "has ended"); "main window", "ready for presentation");
} }

View File

@ -1,12 +1,14 @@
/** /**
* @file * @file
* Gem-graph client Widgets general manager. * Gem-graph client manager for all widgets.
* *
* Initiates, designs and frees all the Gem-graph client windows. * Initiates, designs and frees all the Gem-graph client windows.
* *
* *
* *
* @cond LICENSE * @cond LICENSE
* This file is part of Gem-graph.
*
* Copyright © 2021 Libre en Communs <contact@a-lec.org> * Copyright © 2021 Libre en Communs <contact@a-lec.org>
* Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org> * Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org>
* Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org> * Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org>
@ -31,12 +33,13 @@
#include "../../include/widget.h" #include "../../include/widget.h"
#include "../../include/fsm.h" #include "../../include/fsm.h"
#include <stdio.h>
static GtkWindow *main_window; static GtkWindow *main_window;
/** /**
* @brief Main Window new(app) and present() * @brief 1) creates a new main window 2) presents this window
* *
* NB > on_windows_activation() is in: widget/manager NOT in: src/signal * NB > on_windows_activation() is in: widget/manager NOT in: src/signal
* *
@ -62,10 +65,37 @@ void on_windows_activation (GtkApplication *app)
// g_application_activate (G_APPLICATION (app)); < how ? > in main is // g_application_activate (G_APPLICATION (app)); < how ? > in main is
// g_signal_connect (app, "activate", G_CALLBACK (on_windows_activation), NULL); // g_signal_connect (app, "activate", G_CALLBACK (on_windows_activation), NULL);
// https://docs.gtk.org/gobject/method.Object.unref.html
// https://www.cs.hunter.cuny.edu/~sweiss/course_materials/csci493.70/lecture_notes/GTK_memory_mngmt.pdf
// Objects are reference counted in GTK.
//GtkWidget * widget = gtk_fixed_new();
//g_object_ref(widget);
//g_object_ref_sink(widget); // remove floating reference, and own this object ourselves
//g_object_unref(widget);
//gtk_widget_destroy(widget);
main_window = GTK_WINDOW (gtk_application_window_new (app)); main_window = GTK_WINDOW (gtk_application_window_new (app));
int window_int_id = gtk_application_window_get_id (GTK_APPLICATION_WINDOW (main_window));
char window_char_id[40];
sprintf(window_char_id, "%d", window_int_id);
//printf ("gtk_application_window_id = %s = %d\n", window_char_id, window_int_id);
fsm_add_log (INFO, WIDGETS, "widget/manager", "gtk_application_window_get_id",
window_char_id);//"sprintf(window_id,...) << fails. Why ?");
//printf ("gtk_application_window_get_id (main_window) = %d\n",
//gtk_application_window_get_id (GTK_APPLICATION_WINDOW (main_window)));
widget_get_main_window (main_window, app); widget_get_main_window (main_window, app);
gtk_window_present (GTK_WINDOW (main_window)); gtk_window_present (GTK_WINDOW (main_window));
// g_object_unref (main_window); TODO get the closing signal of the main window
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// For the breakdown between pages, see signal > switch_state_rules_data() // For the breakdown between pages, see signal > switch_state_rules_data()
@ -77,7 +107,6 @@ void on_windows_activation (GtkApplication *app)
// is selected in: widget/topbar/left window_design_topbar_left() // is selected in: widget/topbar/left window_design_topbar_left()
// until it is defined in the fsm (2024-09) // until it is defined in the fsm (2024-09)
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// widget_design_main_window (main_window, app); // def: widget/...
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
@ -89,6 +118,6 @@ void on_windows_activation (GtkApplication *app)
g_signal_connect (act_b, "activate", G_CALLBACK (action_b), app2);*/ g_signal_connect (act_b, "activate", G_CALLBACK (action_b), app2);*/
fsm_add_log (INFO, WIDGETS, "widget/manager", "windows activation()", fsm_add_log (INFO, WIDGETS, "widget/manager", "windows activation()",
"has ended 🧐️ | 👉️ a new session can be launched"); "has ended 🧐️ | 👉️ a new session starts");
} }