* modifies several names:
* - in fsm_trigger_log_init(), fsm_trigger_log_close() the word **trigger** is
* replaced by **relay**
* - fsm_log_struct_unit is replaced by: fsm_log_unit_struct
*
* docs/rtfm/intro (previously 'Once upon a time'... 🙃️) is also renamed and
* extended.
*
This commit is contained in:
parent
236a54964f
commit
a92dbaf39d
|
@ -1,29 +1,15 @@
|
||||||
/**
|
/**
|
||||||
* @file
|
* @file
|
||||||
* Client fsm (finite state machine) header
|
* This file is part of Gem-graph; Client fsm (finite state machine) header.
|
||||||
*
|
|
||||||
* This file is part of Gem-graph.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* This commit introduces:
|
|
||||||
*
|
|
||||||
* - the two functions that enable main() to init and close the log:
|
|
||||||
* fsm_trigger_log_init() and fsm_trigger_log_close()
|
|
||||||
*
|
|
||||||
* - the two functions that enable main() to init and close the fsm:
|
|
||||||
* fsm_init() and fsm_close()
|
|
||||||
*
|
|
||||||
* - the two functions that enable the fsm to init and close its structures:
|
|
||||||
* fsm_structures_init() and fsm_structures_close()
|
|
||||||
*
|
|
||||||
*
|
*
|
||||||
* @see readme.docs and this text below.
|
* @see readme.docs and this text below.
|
||||||
*
|
*
|
||||||
* ---
|
* ---
|
||||||
*
|
*
|
||||||
* The two log structures and the two enums listed below stay in the fsm header.
|
* The two log structures and the two enums listed below are defined in the fsm
|
||||||
|
* header.
|
||||||
*
|
*
|
||||||
* All log functions are now in dedicated files.
|
* All log functions are in dedicated files.
|
||||||
*
|
*
|
||||||
* The most important function: fsm_add_log() is in the file:
|
* The most important function: fsm_add_log() is in the file:
|
||||||
* /src/fsm/log/manager.c
|
* /src/fsm/log/manager.c
|
||||||
|
@ -121,18 +107,18 @@
|
||||||
*/
|
*/
|
||||||
enum fsm_enum_log_severity {
|
enum fsm_enum_log_severity {
|
||||||
FATAL, /**< (or CRITICAL) an unrecoverable failure that prevents the whole
|
FATAL, /**< (or CRITICAL) an unrecoverable failure that prevents the whole
|
||||||
application from doing any further useful work */
|
application from doing any further useful work 🕳️☠️ */
|
||||||
ERROR, /**< an irremediable situation that hinders the execution of a
|
ERROR, /**< an irremediable situation that hinders the execution of a
|
||||||
specific operation within the application */
|
specific operation within the application 👀️😮️ */
|
||||||
WARN, /**< something unexpected has occurred, but the application can
|
WARN, /**< something unexpected has occurred, but the application can
|
||||||
continue to function normally for the time being */
|
continue to function normally for the time being 😅️ */
|
||||||
INFO, /**< (or MESSAGE) a significant event occurs while the system is
|
INFO, /**< (or MESSAGE) a significant event occurs while the system is
|
||||||
operating normally */
|
operating normally 📜️👌️ */
|
||||||
DEBUG, /**< a description of system states in sufficient detail to give
|
DEBUG, /**< a description of system states in sufficient detail to give
|
||||||
developers clues as to the cause of an error */
|
developers clues as to the cause of an error 🪳️👀️🧐️ */
|
||||||
TRACE /**< provides a systematic overview of code execution but comes at
|
TRACE /**< provides a systematic overview of code execution but comes at
|
||||||
a cost in terms of performance */
|
a cost in terms of performance 🥱️ */
|
||||||
};
|
};//.😮️🧐️👀️😅️😕️😱️😦️🕳️😵💫️
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A list of structures or states that may be involved in program events.
|
* A list of structures or states that may be involved in program events.
|
||||||
|
@ -192,22 +178,22 @@ enum fsm_enum_log_source {
|
||||||
* @callergraph
|
* @callergraph
|
||||||
* @see fsm_log_struct
|
* @see fsm_log_struct
|
||||||
*/
|
*/
|
||||||
typedef struct fsm_log_struct_unit
|
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 */
|
const char *file_source; /**< * emitter file */
|
||||||
const char *function_source; /**< * emitter function */
|
const char *function_source; /**< * emitter function */
|
||||||
const char *string_value; /**< * any event descriptors */
|
const char *string_value; /**< * any event descriptors */
|
||||||
struct fsm_log_struct_unit *prev; /**< * chained list */
|
struct fsm_log_unit_struct *prev; /**< * chained list */
|
||||||
struct fsm_log_struct_unit *next; /**< * chained list */
|
struct fsm_log_unit_struct *next; /**< * chained list */
|
||||||
}
|
}
|
||||||
fsm_log_struct_unit;
|
fsm_log_unit_struct;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Two links towards the previous and the next unit are required to initialize
|
* Log is a double-chained list. Two links towards the previous and the next unit
|
||||||
* and manage a double-chained list.
|
* are required to initialize and manage it.
|
||||||
*
|
*
|
||||||
* @callgraph
|
* @callgraph
|
||||||
* @see fsm_log_struct_unit
|
* @see fsm_log_struct_unit
|
||||||
|
@ -222,8 +208,8 @@ typedef struct fsm_log_struct_unit
|
||||||
* @see fsm_remove_log()
|
* @see fsm_remove_log()
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
fsm_log_struct_unit *first; /**< * required */
|
fsm_log_unit_struct *first; /**< * required */
|
||||||
fsm_log_struct_unit *last; /**< * required */
|
fsm_log_unit_struct *last; /**< * required */
|
||||||
}
|
}
|
||||||
fsm_log_struct;
|
fsm_log_struct;
|
||||||
|
|
||||||
|
@ -255,8 +241,8 @@ void fsm_add_log (int severity,
|
||||||
const char *function_source,
|
const char *function_source,
|
||||||
const char *string_value);
|
const char *string_value);
|
||||||
|
|
||||||
void fsm_trigger_log_init();
|
void fsm_relay_init_log();
|
||||||
void fsm_trigger_log_close();
|
void fsm_relay_close_log();
|
||||||
|
|
||||||
void fsm_init (const char *initial_message_from_main);
|
void fsm_init (const char *initial_message_from_main);
|
||||||
void fsm_close (const char *final_message_from_main);
|
void fsm_close (const char *final_message_from_main);
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
/**
|
/**
|
||||||
* @file
|
* @file
|
||||||
* Client fsm (Finite State Machine) control file.
|
* @brief This file is part of Gem-graph; it controls the client fsm
|
||||||
|
* (Finite State Machine).
|
||||||
*
|
*
|
||||||
* ---
|
* @details
|
||||||
*
|
*
|
||||||
* The fsm control instance
|
* The fsm control instance
|
||||||
* - **initialises** the log and the rest of the fsm when triggered by main()
|
* - **initialises** the log and the rest of the fsm when triggered by main()
|
||||||
|
@ -10,35 +11,8 @@
|
||||||
* - **closes** all the elements it opened before handing over to main()
|
* - **closes** all the elements it opened before handing over to main()
|
||||||
* .
|
* .
|
||||||
*
|
*
|
||||||
* About code organization, see src/readme.dox
|
|
||||||
*
|
|
||||||
* ---
|
* ---
|
||||||
*
|
*
|
||||||
* @cond LICENSE
|
|
||||||
* Copyright © 2021 Libre en Communs <contact@a-lec.org>
|
|
||||||
* Copyright © 2021-2024 Adrien Bourmault <neox@a-lec.org>
|
|
||||||
* Copyright © 2021-2024 Jean Sirmai <jean@a-lec.org>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify it under
|
|
||||||
* the terms of the GNU Affero General Public License as published by the Free
|
|
||||||
* Software Foundation, either version 3 of the License, or (at your option) any
|
|
||||||
* later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
||||||
* details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
* @endcond
|
|
||||||
*
|
|
||||||
* @file
|
|
||||||
* @brief
|
|
||||||
*
|
|
||||||
* This file is part of Gem-graph.
|
|
||||||
*
|
|
||||||
* @details
|
|
||||||
* The Finite State Machine (fsm) describes all the possible states of the
|
* The Finite State Machine (fsm) describes all the possible states of the
|
||||||
* Gem-graph client and all the transitions between them.
|
* Gem-graph client and all the transitions between them.
|
||||||
* It manages several kinds of exclusive states:
|
* It manages several kinds of exclusive states:
|
||||||
|
@ -64,6 +38,10 @@
|
||||||
*
|
*
|
||||||
* The journal is created, edited and published from here.
|
* The journal is created, edited and published from here.
|
||||||
*
|
*
|
||||||
|
* ---
|
||||||
|
*
|
||||||
|
* About code organization, see src/readme.dox
|
||||||
|
*
|
||||||
* @cond LICENSE
|
* @cond LICENSE
|
||||||
* 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>
|
||||||
|
@ -141,7 +119,10 @@ static void fsm_structures_close()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief fsm_init() is the first function called by main.c
|
* @brief fsm_init() is the first function called by main.c
|
||||||
* It initiates the journal and calls fsm_structures_init() that
|
* It initiates the journal and calls fsm_structures_init().
|
||||||
|
*
|
||||||
|
* It uses the relay function fsm_relay_init_log() in src/fsm/log/manager.c to
|
||||||
|
* reach the fsm_init_log().
|
||||||
*
|
*
|
||||||
* @since 2024-08
|
* @since 2024-08
|
||||||
*
|
*
|
||||||
|
@ -149,7 +130,7 @@ static void fsm_structures_close()
|
||||||
* @see main()
|
* @see main()
|
||||||
*
|
*
|
||||||
* @callgraph
|
* @callgraph
|
||||||
* @see trigger_fsm_log_init()
|
* @see fsm_relay_init_log()
|
||||||
* @see fsm_add_log()
|
* @see fsm_add_log()
|
||||||
* @see fsm_list_init_measures()
|
* @see fsm_list_init_measures()
|
||||||
* @see fsm_list_init_results()
|
* @see fsm_list_init_results()
|
||||||
|
@ -160,9 +141,7 @@ static void fsm_structures_close()
|
||||||
*/
|
*/
|
||||||
void fsm_init (const char *initial_info_from_main)
|
void fsm_init (const char *initial_info_from_main)
|
||||||
{
|
{
|
||||||
fsm_trigger_log_init(); /**< fsm_init_log(() can't be called from here
|
fsm_relay_init_log();
|
||||||
* because static fsm_log_struct gg_logs
|
|
||||||
* is in src/fsm/log/manager.c */
|
|
||||||
|
|
||||||
fsm_add_log (INFO, MAIN, "main", initial_info_from_main,
|
fsm_add_log (INFO, MAIN, "main", initial_info_from_main,
|
||||||
"👋️ (☕️) Hi everybody ! Here is Gem-Graph.");
|
"👋️ (☕️) Hi everybody ! Here is Gem-Graph.");
|
||||||
|
@ -194,7 +173,7 @@ void fsm_init (const char *initial_info_from_main)
|
||||||
*
|
*
|
||||||
* @callgraph
|
* @callgraph
|
||||||
* @see fsm_structures_close()
|
* @see fsm_structures_close()
|
||||||
* @see fsm_trigger_log_close()
|
* @see fsm_relay_close_log()
|
||||||
* @see fsm_add_log()
|
* @see fsm_add_log()
|
||||||
*
|
*
|
||||||
* @param *closing_info_from_main
|
* @param *closing_info_from_main
|
||||||
|
@ -208,7 +187,7 @@ void fsm_close (const char *closing_info_from_main)
|
||||||
fsm_add_log (INFO, MAIN, "main", closing_info_from_main,
|
fsm_add_log (INFO, MAIN, "main", closing_info_from_main,
|
||||||
"👋️😄️ That'all folks !");
|
"👋️😄️ That'all folks !");
|
||||||
|
|
||||||
fsm_trigger_log_close(); /**< fsm_clear_log(() can't be called from here
|
fsm_relay_close_log(); /**< fsm_clear_log(() can't be called from here
|
||||||
* because static fsm_log_struct gg_logs
|
* because static fsm_log_struct gg_logs
|
||||||
* is in src/fsm/log/manager.c */
|
* is in src/fsm/log/manager.c */
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
/**
|
/**
|
||||||
* @file
|
* @file
|
||||||
*
|
*
|
||||||
* This file is part of Gem-graph. The log (or journal) stores chronologically
|
* This file is part of Gem-graph; it contains only auxiliary functions.
|
||||||
* the events during a session run (rules exec, mainly)
|
*
|
||||||
|
* The log (or journal) stores chronologically the events during a session run.
|
||||||
*
|
*
|
||||||
* This file groups some functions that a typical list should implement but whose
|
* This file groups some functions that a typical list should implement but whose
|
||||||
* utility remains to evaluate in the case of a log list.
|
* utility remains to evaluate in the case of a log list.
|
||||||
|
@ -50,7 +51,7 @@ long fsm_remove_log (fsm_log_struct *jj,
|
||||||
const char *string_value)
|
const char *string_value)
|
||||||
{
|
{
|
||||||
long usec;
|
long usec;
|
||||||
fsm_log_struct_unit *tmp = jj->last;
|
fsm_log_unit_struct *tmp = jj->last;
|
||||||
if (! tmp) return -1;
|
if (! tmp) return -1;
|
||||||
usec = tmp->usec;
|
usec = tmp->usec;
|
||||||
jj->last = tmp->prev;
|
jj->last = tmp->prev;
|
||||||
|
@ -72,7 +73,7 @@ long fsm_remove_log (fsm_log_struct *jj,
|
||||||
*/
|
*/
|
||||||
int fsm_get_log_length (fsm_log_struct jj)
|
int fsm_get_log_length (fsm_log_struct jj)
|
||||||
{
|
{
|
||||||
fsm_log_struct_unit *a_unit = jj.first;
|
fsm_log_unit_struct *a_unit = jj.first;
|
||||||
int nb = 0;
|
int nb = 0;
|
||||||
while (a_unit)
|
while (a_unit)
|
||||||
{
|
{
|
||||||
|
@ -100,7 +101,7 @@ void fsm_seek_log (fsm_log_struct jj,
|
||||||
const char *function_source,
|
const char *function_source,
|
||||||
const char *string_value)
|
const char *string_value)
|
||||||
{
|
{
|
||||||
fsm_log_struct_unit *a_unit = jj.first;
|
fsm_log_unit_struct *a_unit = jj.first;
|
||||||
int nb = 0;
|
int nb = 0;
|
||||||
while (a_unit)
|
while (a_unit)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
/**
|
/**
|
||||||
* @file
|
* @file
|
||||||
* @brief fsm (Finite State Machine) log manager
|
* @brief This file is part of Gem-graph; fsm (Finite State Machine) log manager.
|
||||||
*
|
|
||||||
* This file is part of Gem-graph.
|
|
||||||
*
|
*
|
||||||
* @details
|
* @details
|
||||||
* The log (journal) is created, edited and published from here.
|
* The log (journal) is created, edited and published from here.
|
||||||
* This file contains only (1) the static fsm_log_struct gg_logs
|
*
|
||||||
* and (2) the function fsm_add_log() that all calls must pass through to send a
|
* This file contains only
|
||||||
* message to the log.
|
* -# the static fsm_log_struct **gg_logs**
|
||||||
|
* -# the function fsm_add_log() that all calls must pass through to send a
|
||||||
|
* message to the log and
|
||||||
|
* -# the two relay functions that init and publish the log before closing it.
|
||||||
*
|
*
|
||||||
* @cond LICENSE
|
* @cond LICENSE
|
||||||
* Copyright © 2021 Libre en Communs <contact@a-lec.org>
|
* Copyright © 2021 Libre en Communs <contact@a-lec.org>
|
||||||
|
@ -38,33 +39,34 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The fsm_struct_journal (gg_logs) is a static instance in the file
|
* The fsm_struct_journal (gg_logs) is a **static** instance in the file
|
||||||
* /src/fsm/log/manager.c
|
* /src/fsm/log/manager.c
|
||||||
* Therefore, all the functions that read or write it are in this file.
|
* Therefore, all the functions that read or write it must be in the same file.
|
||||||
* This helps to avoid uncontrolled operations.
|
*
|
||||||
|
* Limiting the access to gg_logs helps to avoid uncontrolled operations on it.
|
||||||
*/
|
*/
|
||||||
static fsm_log_struct gg_logs;
|
static fsm_log_struct gg_logs;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief It is mandatory for any event to call this function to be published in
|
* @brief To be published in the log, all events must pass through this function,
|
||||||
* the journal.
|
* which enables filtering.
|
||||||
*
|
*
|
||||||
* @details The fsm_struct_journal (gg_logs) is a static instance in the file
|
* @details This function is both a relay and a filter.
|
||||||
* /src/fsm/log/manager.c
|
|
||||||
* Therefore, all the functions that read or write it will be in this file.
|
|
||||||
* This is to avoid uncontrolled operations on it.
|
|
||||||
*
|
*
|
||||||
* A message is send to the log for each documented event.
|
* - It is a relay because it must call fsm_add_log_event() and pass it **gg_logs**
|
||||||
|
* to write to the log. As gg_logs is a **static** instance, this call can only
|
||||||
|
* be made from the same file.
|
||||||
*
|
*
|
||||||
* One or several filters can be applied here (and only here) before publication,
|
* - It's more than just a relay, because one or more filters can be applied here
|
||||||
* to select only some events of interest (during debugging, for example).
|
* (and only here) before publication to select only certain events.
|
||||||
|
* The interest of events can vary according to the type of session.
|
||||||
*
|
*
|
||||||
* These filters can operate on any the following five parameters:
|
* These filters can operate on any the following five parameters:
|
||||||
* severity, source, file_source (text), function_source (text),
|
* - severity, - source, - file_source (text), - function_source (text),
|
||||||
* string_value (text).
|
* - string_value (text).
|
||||||
*
|
*
|
||||||
* They can be combined using any logical operators and parentheses.
|
* The filters can be combined using any logical operators and parentheses.
|
||||||
*
|
*
|
||||||
* @since 2024-08
|
* @since 2024-08
|
||||||
*
|
*
|
||||||
|
@ -102,35 +104,44 @@ void fsm_add_log (int severity,
|
||||||
fsm_add_log_event (&gg_logs, file_source, function_source, string_value);
|
fsm_add_log_event (&gg_logs, file_source, function_source, string_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* this function is a relay: fsm_init_log() can't be called directly from
|
* This function is only a relay: it calls fsm_init_log() and this call couldn't
|
||||||
* fsm_init() in control because static fsm_log_struct gg_logs is in
|
* be written in another file because the fsm_log_struct **gg_logs** it transmits
|
||||||
* src/fsm/log/manager.c
|
* is **static** in src/fsm/log/manager.c
|
||||||
*
|
*
|
||||||
|
* Limiting the access to **gg_logs** helps to avoid uncontrolled operations on it.
|
||||||
|
*
|
||||||
|
* Functions which only relay should not send log.
|
||||||
*
|
*
|
||||||
* @since 2024-08
|
* @since 2024-08
|
||||||
*
|
*
|
||||||
* @callergraph
|
* @callergraph
|
||||||
* @see main()
|
* @see main()
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void fsm_trigger_log_init()
|
void fsm_relay_init_log()
|
||||||
{
|
{
|
||||||
fsm_init_log (&gg_logs);
|
fsm_init_log (&gg_logs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* this function is a relay: fsm_publish_log() and fsm_clear_log() can't be
|
* This function is only a relay: it calls fsm_publish_log() and fsm_clear_log()
|
||||||
* called directly from fsm_close() in control because static fsm_log_struct
|
* and this calls couldn't be written in another file because the fsm_log_struct
|
||||||
* gg_logs is in src/fsm/log/manager.c
|
* **gg_logs** they transmit is **static** in src/fsm/log/manager.c
|
||||||
|
*
|
||||||
|
* Limiting the access to **gg_logs** helps to avoid uncontrolled operations on it.
|
||||||
|
*
|
||||||
|
* Functions which only relay should not send log.
|
||||||
*
|
*
|
||||||
* @since 2024-08
|
* @since 2024-08
|
||||||
*
|
*
|
||||||
* @callergraph
|
* @callergraph
|
||||||
* @see main()
|
* @see main()
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void fsm_trigger_log_close()
|
void fsm_relay_close_log()
|
||||||
{
|
{
|
||||||
fsm_publish_log (gg_logs);
|
fsm_publish_log (gg_logs);
|
||||||
fsm_clear_log (&gg_logs);
|
fsm_clear_log (&gg_logs);
|
||||||
|
|
|
@ -68,8 +68,8 @@ void fsm_init_log (fsm_log_struct *jj)
|
||||||
*/
|
*/
|
||||||
void fsm_clear_log (fsm_log_struct *jj)
|
void fsm_clear_log (fsm_log_struct *jj)
|
||||||
{
|
{
|
||||||
fsm_log_struct_unit *tmp;
|
fsm_log_unit_struct *tmp;
|
||||||
fsm_log_struct_unit *a_unit = jj->first;
|
fsm_log_unit_struct *a_unit = jj->first;
|
||||||
while(a_unit)
|
while(a_unit)
|
||||||
{
|
{
|
||||||
tmp = a_unit;
|
tmp = a_unit;
|
||||||
|
@ -84,7 +84,7 @@ void fsm_clear_log (fsm_log_struct *jj)
|
||||||
/**
|
/**
|
||||||
* add an event
|
* add an event
|
||||||
*
|
*
|
||||||
* *new_unit = malloc (sizeof(fsm_log_struct_unit));
|
* *new_unit = malloc (sizeof(fsm_log_unit_struct));
|
||||||
*
|
*
|
||||||
* warn: is never free (as new log units are never removed)
|
* warn: is never free (as new log units are never removed)
|
||||||
*
|
*
|
||||||
|
@ -102,7 +102,7 @@ void fsm_add_log_event (fsm_log_struct *jj,
|
||||||
{
|
{
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
gettimeofday (&tv, NULL);
|
gettimeofday (&tv, NULL);
|
||||||
fsm_log_struct_unit *new_unit = malloc (sizeof(fsm_log_struct_unit));
|
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;
|
||||||
|
@ -132,7 +132,7 @@ void fsm_add_log_event (fsm_log_struct *jj,
|
||||||
*/
|
*/
|
||||||
void fsm_publish_log (fsm_log_struct jj)
|
void fsm_publish_log (fsm_log_struct jj)
|
||||||
{
|
{
|
||||||
fsm_log_struct_unit *a_unit = jj.last;
|
fsm_log_unit_struct *a_unit = jj.last;
|
||||||
char buf [LOG_MAX_LENGTH];
|
char buf [LOG_MAX_LENGTH];
|
||||||
int nb = 0;
|
int nb = 0;
|
||||||
while (a_unit)
|
while (a_unit)
|
||||||
|
|
Loading…
Reference in New Issue