diff --git a/common/utils/itti_analyzer/Makefile.am b/common/utils/itti_analyzer/Makefile.am index 6fa0fe69b0fd84ebcaf4d68a9d0f2ffb52540c21..b1a371cfe8743e8aebbedf2ab1d02d00b68f2bbf 100644 --- a/common/utils/itti_analyzer/Makefile.am +++ b/common/utils/itti_analyzer/Makefile.am @@ -1,5 +1,6 @@ AM_CFLAGS = \ @ADD_CFLAGS@ \ + -I$(top_srcdir)/common \ -I$(top_srcdir)/libparser \ -I$(top_srcdir)/libresolver \ -I$(top_srcdir)/libbuffers \ diff --git a/common/utils/itti_analyzer/itti_analyzer.c b/common/utils/itti_analyzer/itti_analyzer.c index 31a0faaba360032a78327e69ed0419cd60681f57..bd9d80f16c8bb294b158c4f8e02e96d3886485a6 100644 --- a/common/utils/itti_analyzer/itti_analyzer.c +++ b/common/utils/itti_analyzer/itti_analyzer.c @@ -16,10 +16,76 @@ int debug_buffers = 1; int debug_parser = 0; +static void +console_log_handler(const char *log_domain, GLogLevelFlags log_level, + const char *message, gpointer user_data) +{ + time_t curr; + struct tm *today; + const char *level; + + switch(log_level & G_LOG_LEVEL_MASK) { + case G_LOG_LEVEL_ERROR: + level = "Err "; + break; + case G_LOG_LEVEL_CRITICAL: + level = "Crit"; + break; + case G_LOG_LEVEL_WARNING: + level = "Warn"; + break; + case G_LOG_LEVEL_MESSAGE: + level = "Msg "; + break; + case G_LOG_LEVEL_INFO: + level = "Info"; + break; + case G_LOG_LEVEL_DEBUG: + level = "Dbg "; + break; + default: + fprintf(stderr, "unknown log_level %u\n", log_level); + level = NULL; + g_assert_not_reached(); + } + + /* create a "timestamp" */ + time(&curr); + today = localtime(&curr); + + fprintf(stderr, "%02u:%02u:%02u %8s %s %s\n", + today->tm_hour, today->tm_min, today->tm_sec, + log_domain != NULL ? log_domain : "", + level, message); +} + int main(int argc, char *argv[]) { int ret = 0; + GLogLevelFlags log_flags; + + log_flags = (GLogLevelFlags) + (G_LOG_LEVEL_ERROR | + G_LOG_LEVEL_CRITICAL | + G_LOG_LEVEL_WARNING | + G_LOG_LEVEL_MESSAGE | + G_LOG_LEVEL_INFO | + G_LOG_LEVEL_DEBUG | + G_LOG_FLAG_FATAL | + G_LOG_FLAG_RECURSION); + + if (!g_thread_supported()) + g_thread_init(NULL); + + /* Secure gtk */ + gdk_threads_init(); + + /* Initialize the widget set */ + gtk_init(&argc, &argv); + + g_log_set_handler(NULL, log_flags, console_log_handler, NULL); + CHECK_FCT(ui_gtk_initialize(argc, argv)); return ret; diff --git a/common/utils/itti_analyzer/libbuffers/Makefile.am b/common/utils/itti_analyzer/libbuffers/Makefile.am index 3a54bd3c38a41ce761bac4bb030dd773eb91ee2b..7af612e5e74221acec7113ea25a5adcd248829ea 100644 --- a/common/utils/itti_analyzer/libbuffers/Makefile.am +++ b/common/utils/itti_analyzer/libbuffers/Makefile.am @@ -1,6 +1,6 @@ AM_CFLAGS = \ @ADD_CFLAGS@ \ - -I$(top_srcdir) \ + -I$(top_srcdir)/common \ -I$(top_srcdir)/libparser \ -I$(top_srcdir)/libui diff --git a/common/utils/itti_analyzer/libbuffers/buffers.c b/common/utils/itti_analyzer/libbuffers/buffers.c index 1d7ad911b4efe2ee99c1124f9a40c389430bb257..60af2b54450e416f7b825f9f5f15ca2da85ac5f6 100644 --- a/common/utils/itti_analyzer/libbuffers/buffers.c +++ b/common/utils/itti_analyzer/libbuffers/buffers.c @@ -3,7 +3,9 @@ #include <stdio.h> #include <string.h> -#include "../rc.h" +#include <glib.h> + +#include "rc.h" #include "buffers.h" extern int debug_buffers; @@ -57,7 +59,7 @@ int buffer_fetch(buffer_t *buffer, uint32_t offset, int size, void *value) return -1; if (buffer->size_bytes < ((offset >> 3) + size)) { - printf("Not enough data to fetch\n"); + g_debug("Not enough data to fetch"); return -1; } @@ -190,8 +192,8 @@ int buffer_has_enouch_data(buffer_t *buffer, uint32_t offset, uint32_t to_get) return -1; underflow = (buffer->size_bytes >= ((offset + to_get) / 8)) ? 0 : -1; if (underflow && debug_buffers) - printf("Detected Underflow offset %u, to_get %u, buffer size %u\n", - offset, to_get, buffer->size_bytes); + g_debug("Detected Underflow offset %u, to_get %u, buffer size %u\n", + offset, to_get, buffer->size_bytes); return underflow; } diff --git a/common/utils/itti_analyzer/libbuffers/file.c b/common/utils/itti_analyzer/libbuffers/file.c index 6106e9719f27c702f4d81d6f8f08b71497a664ac..730735890a832cf0a68eddc97fe1f3d9cdc8f3ee 100644 --- a/common/utils/itti_analyzer/libbuffers/file.c +++ b/common/utils/itti_analyzer/libbuffers/file.c @@ -5,7 +5,9 @@ #include <sys/stat.h> #include <fcntl.h> -#include "../rc.h" +#include <glib.h> + +#include "rc.h" #include "buffers.h" #include "file.h" @@ -22,7 +24,7 @@ int file_read_dump(buffer_t **buffer, const char *filename) return RC_BAD_PARAM; if ((fd = open(filename, O_RDONLY)) == -1) { - fprintf(stderr, "Cannot open %s for reading, returned %d:%s\n", + g_debug("Cannot open %s for reading, returned %d:%s\n", filename, errno, strerror(errno)); return RC_FAIL; } @@ -33,7 +35,7 @@ int file_read_dump(buffer_t **buffer, const char *filename) current_read = read(fd, data, READ_BUFFER_SIZE); if (current_read == -1) { - fprintf(stderr, "Failed to read data from file, returned %d:%s\n", + g_debug("Failed to read data from file, returned %d:%s\n", errno, strerror(errno)); return RC_FAIL; } diff --git a/common/utils/itti_analyzer/libbuffers/socket.c b/common/utils/itti_analyzer/libbuffers/socket.c index f22f71e2e1dba362a708f9689282b7ee68942767..18f76295e891c55e52f9e04657488a9faebbff19 100644 --- a/common/utils/itti_analyzer/libbuffers/socket.c +++ b/common/utils/itti_analyzer/libbuffers/socket.c @@ -8,7 +8,7 @@ #include <gtk/gtk.h> -#include "../rc.h" +#include "rc.h" #include "ui_interface.h" #include "ui_notifications.h" diff --git a/common/utils/itti_analyzer/libparser/Makefile.am b/common/utils/itti_analyzer/libparser/Makefile.am index cb975b6ce2afb127f33ed745c5203fd8e3a3f5b4..bf80db28674040aff8e62e810335a2b661fe3024 100644 --- a/common/utils/itti_analyzer/libparser/Makefile.am +++ b/common/utils/itti_analyzer/libparser/Makefile.am @@ -1,6 +1,6 @@ AM_CFLAGS = \ @ADD_CFLAGS@ \ - -I$(top_srcdir) \ + -I$(top_srcdir)/common \ -I$(top_srcdir)/libbuffers \ -I$(top_srcdir)/libui diff --git a/common/utils/itti_analyzer/libparser/field_type.c b/common/utils/itti_analyzer/libparser/field_type.c index 8434540cd682987e6462292db59131540506d158..a8cc5a0ebb9ac5b166328366444ca90391b83fc5 100644 --- a/common/utils/itti_analyzer/libparser/field_type.c +++ b/common/utils/itti_analyzer/libparser/field_type.c @@ -3,7 +3,7 @@ #include <assert.h> #include <string.h> -#include "../rc.h" +#include "rc.h" #include "field_type.h" #include "buffers.h" diff --git a/common/utils/itti_analyzer/libparser/xml_parse.h b/common/utils/itti_analyzer/libparser/xml_parse.h index 982e357dc26a0a256845be273831672400fa1f41..b1df13ea898ff777d4d791c9f49b20055f1ce3b6 100644 --- a/common/utils/itti_analyzer/libparser/xml_parse.h +++ b/common/utils/itti_analyzer/libparser/xml_parse.h @@ -1,4 +1,4 @@ -#include "../rc.h" +#include "rc.h" #include "types.h" #ifndef XML_PARSE_H_ diff --git a/common/utils/itti_analyzer/libresolver/Makefile.am b/common/utils/itti_analyzer/libresolver/Makefile.am index eb8c34abc092c45cc85f4ce7fd64dcbde3e99e5b..5911c3c4df57059a4cf8245c5175b718e8fe3200 100644 --- a/common/utils/itti_analyzer/libresolver/Makefile.am +++ b/common/utils/itti_analyzer/libresolver/Makefile.am @@ -1,6 +1,6 @@ AM_CFLAGS = \ @ADD_CFLAGS@ \ - -I$(top_srcdir) \ + -I$(top_srcdir)/common \ -I$(top_srcdir)/libparser \ -I$(top_srcdir)/libbuffers diff --git a/common/utils/itti_analyzer/libresolver/locate_root.c b/common/utils/itti_analyzer/libresolver/locate_root.c index a42e33fffca56c96a4d4bced97a3c6ea1aedfc6a..e0eaadfdffbe7bd531f5f44dbfbc6d0a148fa613 100644 --- a/common/utils/itti_analyzer/libresolver/locate_root.c +++ b/common/utils/itti_analyzer/libresolver/locate_root.c @@ -1,7 +1,9 @@ #include <stdio.h> #include <string.h> -#include "../rc.h" +#include <glib.h> + +#include "rc.h" #include "types.h" #include "locate_root.h" @@ -13,15 +15,15 @@ int locate_root(const char *root_name, types_t *head, types_t **root) { * This element is the entry for other sub-types. */ if (!root_name || (strlen (root_name) == 0)) { - printf ("FATAL: no root element name provided\n"); + g_warning("FATAL: no root element name provided"); return -1; } if (!head) { - printf ("Empty list detected\n"); + g_warning("Empty list detected"); return -1; } if (!root) { - printf ("NULL root reference\n"); + g_warning("NULL root reference"); return -1; } @@ -44,11 +46,11 @@ int locate_type(const char *type_name, types_t *head, types_t **type) { * This element is the entry for other sub-types. */ if (!type_name) { - printf ("FATAL: no root element name provided\n"); + g_warning("FATAL: no root element name provided"); return RC_BAD_PARAM; } if (!head) { - printf ("Empty list detected\n"); + g_warning("Empty list detected"); return RC_BAD_PARAM; } diff --git a/common/utils/itti_analyzer/libresolver/resolve_typedef.c b/common/utils/itti_analyzer/libresolver/resolve_typedef.c deleted file mode 100644 index 24036e7a2f207581a46b0205c7c235208901a941..0000000000000000000000000000000000000000 --- a/common/utils/itti_analyzer/libresolver/resolve_typedef.c +++ /dev/null @@ -1,25 +0,0 @@ -#include <stdio.h> -#include <string.h> - -#include "types.h" - -int resolve_typedefs(types_t **head) -{ - types_t *next_type; - - if (!head) { - printf("Empty list detected\n"); - return -1; - } - - for (next_type = head; next_type; next_type = next_type->next) - { - /* Only resolve typedef */ - if (next_type->type != TYPE_TYPEDEF) - continue; - - printf("Trying to resolve typedef %s\n", next_type->name); - } - - return 0; -} diff --git a/common/utils/itti_analyzer/libresolver/resolvers.c b/common/utils/itti_analyzer/libresolver/resolvers.c index ffc143096ae76765174a5fcc5127985605b29f02..e707fa49ea17a041de4ab1927f950f49d72c0dec 100644 --- a/common/utils/itti_analyzer/libresolver/resolvers.c +++ b/common/utils/itti_analyzer/libresolver/resolvers.c @@ -2,6 +2,8 @@ #include <stdlib.h> #include <string.h> +#include <glib.h> + #include "types.h" #include "resolvers.h" @@ -17,7 +19,7 @@ int search_id(types_t *head, types_t **found, int id) types_t *next_type; if (!head) { - printf("Empty list detected\n"); + g_warning("Empty list detected"); return RESOLV_LIST_EMPTY; } @@ -37,7 +39,7 @@ int search_file(types_t *head, types_t **found, int file_id) types_t *next_type; if (!head) { - printf("Empty list detected\n"); + g_warning("Empty list detected"); return RESOLV_LIST_EMPTY; } @@ -59,7 +61,7 @@ int resolve_typedefs(types_t **head) types_t *next_type; if (!head) { - printf("Empty list detected\n"); + g_warning("Empty list detected"); return RESOLV_LIST_EMPTY; } @@ -86,7 +88,7 @@ int resolve_struct(types_t **head) types_t *next_type; if (!head) { - printf("Empty list detected\n"); + g_warning("Empty list detected"); return RESOLV_LIST_EMPTY; } @@ -144,7 +146,7 @@ int resolve_union(types_t **head) types_t *next_type; if (!head) { - printf("Empty list detected\n"); + g_warning("Empty list detected"); return RESOLV_LIST_EMPTY; } @@ -194,7 +196,7 @@ int resolve_pointer_type(types_t **head) types_t *next_type; if (!head) { - printf("Empty list detected\n"); + g_warning("Empty list detected"); return RESOLV_LIST_EMPTY; } @@ -221,7 +223,7 @@ int resolve_reference(types_t **head) types_t *next_type; if (!head) { - printf("Empty list detected\n"); + g_warning("Empty list detected"); return RESOLV_LIST_EMPTY; } @@ -248,7 +250,7 @@ int resolve_field(types_t **head) types_t *next_type; if (!head) { - printf("Empty list detected\n"); + g_warning("Empty list detected"); return RESOLV_LIST_EMPTY; } @@ -275,7 +277,7 @@ int resolve_array(types_t **head) types_t *next_type; if (!head) { - printf("Empty list detected\n"); + g_warning("Empty list detected"); return RESOLV_LIST_EMPTY; } @@ -302,7 +304,7 @@ int resolve_file(types_t **head) types_t *next_type; if (!head) { - printf("Empty list detected\n"); + g_warning("Empty list detected"); return RESOLV_LIST_EMPTY; } diff --git a/common/utils/itti_analyzer/libui/Makefile.am b/common/utils/itti_analyzer/libui/Makefile.am index 5ff5826156c1edf858ca1a3bd67fd205fcbbb957..4c42ead836ada39629d7c58d6af322858b5443dc 100644 --- a/common/utils/itti_analyzer/libui/Makefile.am +++ b/common/utils/itti_analyzer/libui/Makefile.am @@ -1,5 +1,6 @@ AM_CFLAGS = \ @ADD_CFLAGS@ \ + -I$(top_srcdir)/common \ -I$(top_srcdir)/libbuffers \ -I$(top_srcdir)/libparser diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.c b/common/utils/itti_analyzer/libui/ui_callbacks.c index 7331d696c58f5ad1fdfc9df83fd8da96440a93c3..9975d1352b2a86fc659c20c108fb1f79f64c0c02 100644 --- a/common/utils/itti_analyzer/libui/ui_callbacks.c +++ b/common/utils/itti_analyzer/libui/ui_callbacks.c @@ -3,7 +3,7 @@ #include <gtk/gtk.h> -#include "../rc.h" +#include "rc.h" #include "ui_main_screen.h" #include "ui_callbacks.h" @@ -16,7 +16,7 @@ gboolean ui_callback_on_open(GtkWidget *widget, GdkEvent *event, gpointer data) { - g_print ("Open event occurred\n"); + g_debug("Open event occurred"); CHECK_FCT(ui_file_chooser()); return TRUE; } @@ -61,7 +61,7 @@ ui_callback_on_select_signal(GtkTreeSelection *selection, } else { - g_print ("%s is going to be unselected.\n", name); + g_debug("%s is going to be unselected", name); } g_free(name); @@ -77,7 +77,7 @@ gboolean ui_callback_on_connect(GtkWidget *widget, uint16_t port; const char *ip; - g_print ("Connect event occurred\n"); + g_debug("Connect event occurred"); port = atoi(gtk_entry_get_text(GTK_ENTRY(ui_main_data.portentry))); ip = gtk_entry_get_text(GTK_ENTRY(ui_main_data.ipentry)); @@ -94,7 +94,7 @@ gboolean ui_callback_on_disconnect(GtkWidget *widget, { /* We have to retrieve the ip address and port of remote host */ - g_print ("Disconnect event occurred\n"); + g_debug("Disconnect event occurred"); ui_interface.socket_disconnect(); return TRUE; } @@ -104,8 +104,7 @@ gboolean ui_callback_on_tree_view_select(GtkWidget *widget, gpointer data) { /* We have to retrieve the ip address and port of remote host */ - - g_print ("List selection event occurred\n"); + g_debug("List selection event occurred"); return TRUE; } diff --git a/common/utils/itti_analyzer/libui/ui_main_screen.c b/common/utils/itti_analyzer/libui/ui_main_screen.c index fd4973a2225b6be599613edbf8004f7ac6ba1073..288c75551d531e0eb5e9968596204dde748521ed 100644 --- a/common/utils/itti_analyzer/libui/ui_main_screen.c +++ b/common/utils/itti_analyzer/libui/ui_main_screen.c @@ -9,7 +9,7 @@ #include <gtk/gtk.h> -#include "../rc.h" +#include "rc.h" #include "ui_interface.h" #include "ui_main_screen.h" @@ -26,20 +26,8 @@ int ui_gtk_initialize(int argc, char *argv[]) memset(&ui_main_data, 0, sizeof(ui_main_data_t)); - if (!g_thread_supported()) - g_thread_init(NULL); - - /* Secure gtk */ - gdk_threads_init(); - - /* Obtain gtk's global lock */ - gdk_threads_enter(); - - /* Initialize the widget set */ - gtk_init(&argc, &argv); - /* Create the main window */ - ui_main_data.window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + ui_main_data.window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(ui_main_data.window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(ui_main_data.window), 1024, 800); diff --git a/common/utils/itti_analyzer/libui/ui_menu_bar.c b/common/utils/itti_analyzer/libui/ui_menu_bar.c index 485a65e872745d0a39305d32e3b9b4f036279616..2ea1506d795e067112f4268a46a3d4bfa5215bda 100644 --- a/common/utils/itti_analyzer/libui/ui_menu_bar.c +++ b/common/utils/itti_analyzer/libui/ui_menu_bar.c @@ -1,6 +1,6 @@ #include <gtk/gtk.h> -#include "../rc.h" +#include "rc.h" #include "ui_main_screen.h" #include "ui_menu_bar.h" #include "ui_callbacks.h" diff --git a/common/utils/itti_analyzer/libui/ui_notebook.c b/common/utils/itti_analyzer/libui/ui_notebook.c index 9aaa480e62c267950df84dfb68248c5bb50f677d..524200f9fd2150c6e9a3e3b8fa6f5f8955f42164 100644 --- a/common/utils/itti_analyzer/libui/ui_notebook.c +++ b/common/utils/itti_analyzer/libui/ui_notebook.c @@ -6,7 +6,7 @@ #include <stdint.h> #include <gtk/gtk.h> -#include "../rc.h" +#include "rc.h" #include "ui_notebook.h" #include "ui_tree_view.h" diff --git a/common/utils/itti_analyzer/libui/ui_notifications.c b/common/utils/itti_analyzer/libui/ui_notifications.c index d900ceac05525f42d708559b0ada1bfc2a8dc82e..17f0d9d3b2e8bd3096ff9b891267f92107c8202c 100644 --- a/common/utils/itti_analyzer/libui/ui_notifications.c +++ b/common/utils/itti_analyzer/libui/ui_notifications.c @@ -4,7 +4,7 @@ #include <gtk/gtk.h> -#include "../rc.h" +#include "rc.h" #include "ui_interface.h" #include "ui_main_screen.h" diff --git a/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c b/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c index 82f6af0ae1e884226a0c9c7dd52d3de4a0c7ea0c..54bc91a5d59ab0d66699f5691a6dc7b1f8e7a207 100644 --- a/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c +++ b/common/utils/itti_analyzer/libui/ui_signal_dissect_view.c @@ -2,7 +2,7 @@ #include <gtk/gtk.h> -#include "../rc.h" +#include "rc.h" #include "ui_main_screen.h" #include "ui_menu_bar.h" diff --git a/common/utils/itti_analyzer/libui/ui_tree_view.c b/common/utils/itti_analyzer/libui/ui_tree_view.c index 0963950eb8ebcc1112b8f72afd04ea2fe50a54f9..8544b68d4f312b0afcf4646ca3806fec63da5d81 100644 --- a/common/utils/itti_analyzer/libui/ui_tree_view.c +++ b/common/utils/itti_analyzer/libui/ui_tree_view.c @@ -3,7 +3,7 @@ #include <gtk/gtk.h> -#include "../rc.h" +#include "rc.h" #include "ui_main_screen.h" #include "ui_tree_view.h" diff --git a/common/utils/itti_analyzer/queue.h b/common/utils/itti_analyzer/queue.h deleted file mode 100644 index 294d48511086b20eb321e07641eb0599db4b75da..0000000000000000000000000000000000000000 --- a/common/utils/itti_analyzer/queue.h +++ /dev/null @@ -1,592 +0,0 @@ -/* - * Copyright (c) 1991, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)queue.h 8.5 (Berkeley) 8/20/94 - */ - -#ifndef _SYS_QUEUE_H_ -#define _SYS_QUEUE_H_ - -/* - * This file defines five types of data structures: singly-linked lists, - * lists, simple queues, tail queues, and circular queues. - * - * A singly-linked list is headed by a single forward pointer. The - * elements are singly linked for minimum space and pointer manipulation - * overhead at the expense of O(n) removal for arbitrary elements. New - * elements can be added to the list after an existing element or at the - * head of the list. Elements being removed from the head of the list - * should use the explicit macro for this purpose for optimum - * efficiency. A singly-linked list may only be traversed in the forward - * direction. Singly-linked lists are ideal for applications with large - * datasets and few or no removals or for implementing a LIFO queue. - * - * A list is headed by a single forward pointer (or an array of forward - * pointers for a hash table header). The elements are doubly linked - * so that an arbitrary element can be removed without a need to - * traverse the list. New elements can be added to the list before - * or after an existing element or at the head of the list. A list - * may only be traversed in the forward direction. - * - * A simple queue is headed by a pair of pointers, one the head of the - * list and the other to the tail of the list. The elements are singly - * linked to save space, so elements can only be removed from the - * head of the list. New elements can be added to the list after - * an existing element, at the head of the list, or at the end of the - * list. A simple queue may only be traversed in the forward direction. - * - * A tail queue is headed by a pair of pointers, one to the head of the - * list and the other to the tail of the list. The elements are doubly - * linked so that an arbitrary element can be removed without a need to - * traverse the list. New elements can be added to the list before or - * after an existing element, at the head of the list, or at the end of - * the list. A tail queue may be traversed in either direction. - * - * A circle queue is headed by a pair of pointers, one to the head of the - * list and the other to the tail of the list. The elements are doubly - * linked so that an arbitrary element can be removed without a need to - * traverse the list. New elements can be added to the list before or after - * an existing element, at the head of the list, or at the end of the list. - * A circle queue may be traversed in either direction, but has a more - * complex end of list detection. - * - * For details on the use of these macros, see the queue(3) manual page. - * SLIST LIST STAILQ TAILQ CIRCLEQ - * _HEAD + + + + + - * _HEAD_INITIALIZER + + + + + - * _ENTRY + + + + + - * _INIT + + + + + - * _EMPTY + + + + + - * _FIRST + + + + + - * _NEXT + + + + + - * _PREV - - - + + - * _LAST - - + + + - * _FOREACH + + + + + - * _FOREACH_REVERSE - - - + + - * _INSERT_HEAD + + + + + - * _INSERT_BEFORE - + - + + - * _INSERT_AFTER + + + + + - * _INSERT_TAIL - - + + + - * _REMOVE_HEAD + - + - - - * _REMOVE + + + + + - */ - -/* - * List definitions. - */ -#define LIST_HEAD(name, type) \ -struct name { \ - struct type *lh_first; /* first element */ \ -} - -#define LIST_HEAD_INITIALIZER(head) \ - { NULL } - -#define LIST_ENTRY(type) \ -struct { \ - struct type *le_next; /* next element */ \ - struct type **le_prev; /* address of previous next element */ \ -} - -/* - * List functions. - */ -#define LIST_INIT(head) do { \ - (head)->lh_first = NULL; \ -} while (/*CONSTCOND*/0) - -#define LIST_INSERT_AFTER(listelm, elm, field) do { \ - if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ - (listelm)->field.le_next->field.le_prev = \ - &(elm)->field.le_next; \ - (listelm)->field.le_next = (elm); \ - (elm)->field.le_prev = &(listelm)->field.le_next; \ -} while (/*CONSTCOND*/0) - -#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ - (elm)->field.le_prev = (listelm)->field.le_prev; \ - (elm)->field.le_next = (listelm); \ - *(listelm)->field.le_prev = (elm); \ - (listelm)->field.le_prev = &(elm)->field.le_next; \ -} while (/*CONSTCOND*/0) - -#define LIST_INSERT_HEAD(head, elm, field) do { \ - if (((elm)->field.le_next = (head)->lh_first) != NULL) \ - (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ - (head)->lh_first = (elm); \ - (elm)->field.le_prev = &(head)->lh_first; \ -} while (/*CONSTCOND*/0) - -#define LIST_REMOVE(elm, field) do { \ - if ((elm)->field.le_next != NULL) \ - (elm)->field.le_next->field.le_prev = \ - (elm)->field.le_prev; \ - *(elm)->field.le_prev = (elm)->field.le_next; \ -} while (/*CONSTCOND*/0) - -#define LIST_FOREACH(var, head, field) \ - for ((var) = ((head)->lh_first); \ - (var); \ - (var) = ((var)->field.le_next)) - -/* - * List access methods. - */ -#define LIST_EMPTY(head) ((head)->lh_first == NULL) -#define LIST_FIRST(head) ((head)->lh_first) -#define LIST_NEXT(elm, field) ((elm)->field.le_next) - - -/* - * Singly-linked List definitions. - */ -#define SLIST_HEAD(name, type) \ -struct name { \ - struct type *slh_first; /* first element */ \ -} - -#define SLIST_HEAD_INITIALIZER(head) \ - { NULL } - -#define SLIST_ENTRY(type) \ -struct { \ - struct type *sle_next; /* next element */ \ -} - -/* - * Singly-linked List functions. - */ -#define SLIST_INIT(head) do { \ - (head)->slh_first = NULL; \ -} while (/*CONSTCOND*/0) - -#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ - (elm)->field.sle_next = (slistelm)->field.sle_next; \ - (slistelm)->field.sle_next = (elm); \ -} while (/*CONSTCOND*/0) - -#define SLIST_INSERT_HEAD(head, elm, field) do { \ - (elm)->field.sle_next = (head)->slh_first; \ - (head)->slh_first = (elm); \ -} while (/*CONSTCOND*/0) - -#define SLIST_REMOVE_HEAD(head, field) do { \ - (head)->slh_first = (head)->slh_first->field.sle_next; \ -} while (/*CONSTCOND*/0) - -#define SLIST_REMOVE(head, elm, type, field) do { \ - if ((head)->slh_first == (elm)) { \ - SLIST_REMOVE_HEAD((head), field); \ - } \ - else { \ - struct type *curelm = (head)->slh_first; \ - while(curelm->field.sle_next != (elm)) \ - curelm = curelm->field.sle_next; \ - curelm->field.sle_next = \ - curelm->field.sle_next->field.sle_next; \ - } \ -} while (/*CONSTCOND*/0) - -#define SLIST_FOREACH(var, head, field) \ - for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next) - -/* - * Singly-linked List access methods. - */ -#define SLIST_EMPTY(head) ((head)->slh_first == NULL) -#define SLIST_FIRST(head) ((head)->slh_first) -#define SLIST_NEXT(elm, field) ((elm)->field.sle_next) - - -/* - * Singly-linked Tail queue declarations. - */ -#define STAILQ_HEAD(name, type) \ -struct name { \ - struct type *stqh_first; /* first element */ \ - struct type **stqh_last; /* addr of last next element */ \ -} - -#define STAILQ_HEAD_INITIALIZER(head) \ - { NULL, &(head).stqh_first } - -#define STAILQ_ENTRY(type) \ -struct { \ - struct type *stqe_next; /* next element */ \ -} - -/* - * Singly-linked Tail queue functions. - */ -#define STAILQ_INIT(head) do { \ - (head)->stqh_first = NULL; \ - (head)->stqh_last = &(head)->stqh_first; \ -} while (/*CONSTCOND*/0) - -#define STAILQ_INSERT_HEAD(head, elm, field) do { \ - if (((elm)->field.stqe_next = (head)->stqh_first) == NULL) \ - (head)->stqh_last = &(elm)->field.stqe_next; \ - (head)->stqh_first = (elm); \ -} while (/*CONSTCOND*/0) - -#define STAILQ_INSERT_TAIL(head, elm, field) do { \ - (elm)->field.stqe_next = NULL; \ - *(head)->stqh_last = (elm); \ - (head)->stqh_last = &(elm)->field.stqe_next; \ -} while (/*CONSTCOND*/0) - -#define STAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ - if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\ - (head)->stqh_last = &(elm)->field.stqe_next; \ - (listelm)->field.stqe_next = (elm); \ -} while (/*CONSTCOND*/0) - -#define STAILQ_REMOVE_HEAD(head, field) do { \ - if (((head)->stqh_first = (head)->stqh_first->field.stqe_next) == NULL) \ - (head)->stqh_last = &(head)->stqh_first; \ -} while (/*CONSTCOND*/0) - -#define STAILQ_REMOVE(head, elm, type, field) do { \ - if ((head)->stqh_first == (elm)) { \ - STAILQ_REMOVE_HEAD((head), field); \ - } else { \ - struct type *curelm = (head)->stqh_first; \ - while (curelm->field.stqe_next != (elm)) \ - curelm = curelm->field.stqe_next; \ - if ((curelm->field.stqe_next = \ - curelm->field.stqe_next->field.stqe_next) == NULL) \ - (head)->stqh_last = &(curelm)->field.stqe_next; \ - } \ -} while (/*CONSTCOND*/0) - -#define STAILQ_FOREACH(var, head, field) \ - for ((var) = ((head)->stqh_first); \ - (var); \ - (var) = ((var)->field.stqe_next)) - -#define STAILQ_CONCAT(head1, head2) do { \ - if (!STAILQ_EMPTY((head2))) { \ - *(head1)->stqh_last = (head2)->stqh_first; \ - (head1)->stqh_last = (head2)->stqh_last; \ - STAILQ_INIT((head2)); \ - } \ -} while (/*CONSTCOND*/0) - -/* - * Singly-linked Tail queue access methods. - */ -#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL) -#define STAILQ_FIRST(head) ((head)->stqh_first) -#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) - - -/* - * Simple queue definitions. - */ -#define SIMPLEQ_HEAD(name, type) \ -struct name { \ - struct type *sqh_first; /* first element */ \ - struct type **sqh_last; /* addr of last next element */ \ -} - -#define SIMPLEQ_HEAD_INITIALIZER(head) \ - { NULL, &(head).sqh_first } - -#define SIMPLEQ_ENTRY(type) \ -struct { \ - struct type *sqe_next; /* next element */ \ -} - -/* - * Simple queue functions. - */ -#define SIMPLEQ_INIT(head) do { \ - (head)->sqh_first = NULL; \ - (head)->sqh_last = &(head)->sqh_first; \ -} while (/*CONSTCOND*/0) - -#define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \ - if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \ - (head)->sqh_last = &(elm)->field.sqe_next; \ - (head)->sqh_first = (elm); \ -} while (/*CONSTCOND*/0) - -#define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \ - (elm)->field.sqe_next = NULL; \ - *(head)->sqh_last = (elm); \ - (head)->sqh_last = &(elm)->field.sqe_next; \ -} while (/*CONSTCOND*/0) - -#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ - if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\ - (head)->sqh_last = &(elm)->field.sqe_next; \ - (listelm)->field.sqe_next = (elm); \ -} while (/*CONSTCOND*/0) - -#define SIMPLEQ_REMOVE_HEAD(head, field) do { \ - if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \ - (head)->sqh_last = &(head)->sqh_first; \ -} while (/*CONSTCOND*/0) - -#define SIMPLEQ_REMOVE(head, elm, type, field) do { \ - if ((head)->sqh_first == (elm)) { \ - SIMPLEQ_REMOVE_HEAD((head), field); \ - } else { \ - struct type *curelm = (head)->sqh_first; \ - while (curelm->field.sqe_next != (elm)) \ - curelm = curelm->field.sqe_next; \ - if ((curelm->field.sqe_next = \ - curelm->field.sqe_next->field.sqe_next) == NULL) \ - (head)->sqh_last = &(curelm)->field.sqe_next; \ - } \ -} while (/*CONSTCOND*/0) - -#define SIMPLEQ_FOREACH(var, head, field) \ - for ((var) = ((head)->sqh_first); \ - (var); \ - (var) = ((var)->field.sqe_next)) - -/* - * Simple queue access methods. - */ -#define SIMPLEQ_EMPTY(head) ((head)->sqh_first == NULL) -#define SIMPLEQ_FIRST(head) ((head)->sqh_first) -#define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next) - - -/* - * Tail queue definitions. - */ -#define _TAILQ_HEAD(name, type, qual) \ -struct name { \ - qual type *tqh_first; /* first element */ \ - qual type *qual *tqh_last; /* addr of last next element */ \ -} -#define TAILQ_HEAD(name, type) _TAILQ_HEAD(name, struct type,) - -#define TAILQ_HEAD_INITIALIZER(head) \ - { NULL, &(head).tqh_first } - -#define _TAILQ_ENTRY(type, qual) \ -struct { \ - qual type *tqe_next; /* next element */ \ - qual type *qual *tqe_prev; /* address of previous next element */\ -} -#define TAILQ_ENTRY(type) _TAILQ_ENTRY(struct type,) - -/* - * Tail queue functions. - */ -#define TAILQ_INIT(head) do { \ - (head)->tqh_first = NULL; \ - (head)->tqh_last = &(head)->tqh_first; \ -} while (/*CONSTCOND*/0) - -#define TAILQ_INSERT_HEAD(head, elm, field) do { \ - if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ - (head)->tqh_first->field.tqe_prev = \ - &(elm)->field.tqe_next; \ - else \ - (head)->tqh_last = &(elm)->field.tqe_next; \ - (head)->tqh_first = (elm); \ - (elm)->field.tqe_prev = &(head)->tqh_first; \ -} while (/*CONSTCOND*/0) - -#define TAILQ_INSERT_TAIL(head, elm, field) do { \ - (elm)->field.tqe_next = NULL; \ - (elm)->field.tqe_prev = (head)->tqh_last; \ - *(head)->tqh_last = (elm); \ - (head)->tqh_last = &(elm)->field.tqe_next; \ -} while (/*CONSTCOND*/0) - -#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ - if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ - (elm)->field.tqe_next->field.tqe_prev = \ - &(elm)->field.tqe_next; \ - else \ - (head)->tqh_last = &(elm)->field.tqe_next; \ - (listelm)->field.tqe_next = (elm); \ - (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ -} while (/*CONSTCOND*/0) - -#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ - (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ - (elm)->field.tqe_next = (listelm); \ - *(listelm)->field.tqe_prev = (elm); \ - (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ -} while (/*CONSTCOND*/0) - -#define TAILQ_REMOVE(head, elm, field) do { \ - if (((elm)->field.tqe_next) != NULL) \ - (elm)->field.tqe_next->field.tqe_prev = \ - (elm)->field.tqe_prev; \ - else \ - (head)->tqh_last = (elm)->field.tqe_prev; \ - *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ -} while (/*CONSTCOND*/0) - -#define TAILQ_FOREACH(var, head, field) \ - for ((var) = ((head)->tqh_first); \ - (var); \ - (var) = ((var)->field.tqe_next)) - -#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ - for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last)); \ - (var); \ - (var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last))) - -#define TAILQ_CONCAT(head1, head2, field) do { \ - if (!TAILQ_EMPTY(head2)) { \ - *(head1)->tqh_last = (head2)->tqh_first; \ - (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \ - (head1)->tqh_last = (head2)->tqh_last; \ - TAILQ_INIT((head2)); \ - } \ -} while (/*CONSTCOND*/0) - -/* - * Tail queue access methods. - */ -#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL) -#define TAILQ_FIRST(head) ((head)->tqh_first) -#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) - -#define TAILQ_LAST(head, headname) \ - (*(((struct headname *)((head)->tqh_last))->tqh_last)) -#define TAILQ_PREV(elm, headname, field) \ - (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) - - -/* - * Circular queue definitions. - */ -#define CIRCLEQ_HEAD(name, type) \ -struct name { \ - struct type *cqh_first; /* first element */ \ - struct type *cqh_last; /* last element */ \ -} - -#define CIRCLEQ_HEAD_INITIALIZER(head) \ - { (void *)&head, (void *)&head } - -#define CIRCLEQ_ENTRY(type) \ -struct { \ - struct type *cqe_next; /* next element */ \ - struct type *cqe_prev; /* previous element */ \ -} - -/* - * Circular queue functions. - */ -#define CIRCLEQ_INIT(head) do { \ - (head)->cqh_first = (void *)(head); \ - (head)->cqh_last = (void *)(head); \ -} while (/*CONSTCOND*/0) - -#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ - (elm)->field.cqe_next = (listelm)->field.cqe_next; \ - (elm)->field.cqe_prev = (listelm); \ - if ((listelm)->field.cqe_next == (void *)(head)) \ - (head)->cqh_last = (elm); \ - else \ - (listelm)->field.cqe_next->field.cqe_prev = (elm); \ - (listelm)->field.cqe_next = (elm); \ -} while (/*CONSTCOND*/0) - -#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ - (elm)->field.cqe_next = (listelm); \ - (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ - if ((listelm)->field.cqe_prev == (void *)(head)) \ - (head)->cqh_first = (elm); \ - else \ - (listelm)->field.cqe_prev->field.cqe_next = (elm); \ - (listelm)->field.cqe_prev = (elm); \ -} while (/*CONSTCOND*/0) - -#define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ - (elm)->field.cqe_next = (head)->cqh_first; \ - (elm)->field.cqe_prev = (void *)(head); \ - if ((head)->cqh_last == (void *)(head)) \ - (head)->cqh_last = (elm); \ - else \ - (head)->cqh_first->field.cqe_prev = (elm); \ - (head)->cqh_first = (elm); \ -} while (/*CONSTCOND*/0) - -#define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ - (elm)->field.cqe_next = (void *)(head); \ - (elm)->field.cqe_prev = (head)->cqh_last; \ - if ((head)->cqh_first == (void *)(head)) \ - (head)->cqh_first = (elm); \ - else \ - (head)->cqh_last->field.cqe_next = (elm); \ - (head)->cqh_last = (elm); \ -} while (/*CONSTCOND*/0) - -#define CIRCLEQ_REMOVE(head, elm, field) do { \ - if ((elm)->field.cqe_next == (void *)(head)) \ - (head)->cqh_last = (elm)->field.cqe_prev; \ - else \ - (elm)->field.cqe_next->field.cqe_prev = \ - (elm)->field.cqe_prev; \ - if ((elm)->field.cqe_prev == (void *)(head)) \ - (head)->cqh_first = (elm)->field.cqe_next; \ - else \ - (elm)->field.cqe_prev->field.cqe_next = \ - (elm)->field.cqe_next; \ -} while (/*CONSTCOND*/0) - -#define CIRCLEQ_FOREACH(var, head, field) \ - for ((var) = ((head)->cqh_first); \ - (var) != (const void *)(head); \ - (var) = ((var)->field.cqe_next)) - -#define CIRCLEQ_FOREACH_REVERSE(var, head, field) \ - for ((var) = ((head)->cqh_last); \ - (var) != (const void *)(head); \ - (var) = ((var)->field.cqe_prev)) - -/* - * Circular queue access methods. - */ -#define CIRCLEQ_EMPTY(head) ((head)->cqh_first == (void *)(head)) -#define CIRCLEQ_FIRST(head) ((head)->cqh_first) -#define CIRCLEQ_LAST(head) ((head)->cqh_last) -#define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next) -#define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev) - -#define CIRCLEQ_LOOP_NEXT(head, elm, field) \ - (((elm)->field.cqe_next == (void *)(head)) \ - ? ((head)->cqh_first) \ - : (elm->field.cqe_next)) -#define CIRCLEQ_LOOP_PREV(head, elm, field) \ - (((elm)->field.cqe_prev == (void *)(head)) \ - ? ((head)->cqh_last) \ - : (elm->field.cqe_prev)) - -#endif /* sys/queue.h */ diff --git a/common/utils/itti_analyzer/rc.h b/common/utils/itti_analyzer/rc.h deleted file mode 100644 index 174f725c112f3df998088fcc4e0e3cc3a1746f68..0000000000000000000000000000000000000000 --- a/common/utils/itti_analyzer/rc.h +++ /dev/null @@ -1,47 +0,0 @@ -#include <errno.h> -#include <string.h> - -#ifndef RC_H_ -#define RC_H_ - -#define RC_OK 0 -#define RC_FAIL -1 -#define RC_BAD_PARAM -2 -#define RC_NULL_POINTER -3 - -#define CHECK_FCT(fCT) \ -do { \ - int rET; \ - if ((rET = fCT) != RC_OK) { \ - fprintf(stderr, #fCT" has failed (%s:%d)\n", __FILE__, __LINE__); \ - return rET; \ - } \ -} while(0) - -#define CHECK_FCT_POSIX(fCT) \ -do { \ - if (fCT == -1) { \ - fprintf(stderr, #fCT" has failed (%d:%s) (%s:%d)\n", errno, \ - strerror(errno), __FILE__, __LINE__); \ - return RC_FAIL; \ - } \ -} while(0) - -#define CHECK_FCT_DO(fCT, dO) \ -do { \ - int rET; \ - if ((rET = fCT) != RC_OK) { \ - fprintf(stderr, #fCT" has returned %d (%s:%d)\n", rET, __FILE__, __LINE__); \ - dO; \ - } \ -} while(0) - -#define CHECK_BUFFER(bUFFER) \ -do { \ - if ((bUFFER) == NULL) { \ - fprintf(stderr, #bUFFER" is NULL (%s:%d)\n", __FILE__, __LINE__); \ - return RC_NULL_POINTER; \ - } \ -} while(0) - -#endif /* RC_H_ */