summaryrefslogtreecommitdiff
path: root/src/analysis/db
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2019-09-29 21:27:03 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2019-09-29 21:27:03 (GMT)
commit3a83a06db8ee27eafcd0219d1d26bf2af23737f5 (patch)
tree163ea7fbe1435b9f380e7ae96dfc36d8f16d1d0a /src/analysis/db
parent55bc8570f25a479b222733c4093f9ae996c9f68e (diff)
Cleaned the DB code a little bit.
Diffstat (limited to 'src/analysis/db')
-rw-r--r--src/analysis/db/item-int.h5
-rw-r--r--src/analysis/db/item.c105
-rw-r--r--src/analysis/db/item.h18
-rw-r--r--src/analysis/db/items/bookmark.c17
-rw-r--r--src/analysis/db/items/comment.c12
-rw-r--r--src/analysis/db/items/move.c12
-rw-r--r--src/analysis/db/items/switcher.c12
-rw-r--r--src/analysis/db/misc/timestamp.c8
-rw-r--r--src/analysis/db/misc/timestamp.h5
9 files changed, 37 insertions, 157 deletions
diff --git a/src/analysis/db/item-int.h b/src/analysis/db/item-int.h
index 93472c5..5977bdb 100644
--- a/src/analysis/db/item-int.h
+++ b/src/analysis/db/item-int.h
@@ -43,7 +43,7 @@ typedef guint (* hash_db_item_key_fc) (const GDbItem *);
typedef gboolean (* cmp_db_item_key_fc) (const GDbItem *, const GDbItem *);
/* Effectue la comparaison entre deux éléments de collection. */
-typedef gint (* cmp_db_item_fc) (GDbItem *, GDbItem *, bool);
+typedef gint (* cmp_db_item_fc) (const GDbItem *, const GDbItem *);
/* Importe la définition d'une base d'éléments pour collection. */
typedef bool (* unpack_db_item_fc) (GDbItem *, packed_buffer *);
@@ -52,7 +52,7 @@ typedef bool (* unpack_db_item_fc) (GDbItem *, packed_buffer *);
typedef bool (* pack_db_item_fc) (const GDbItem *, packed_buffer *);
/* Construit la description humaine d'un signet sur un tampon. */
-typedef char * (* build_item_label_fc) (GDbItem *);
+typedef char * (* build_item_label_fc) (const GDbItem *);
/* Exécute un élément de collection sur un binaire. */
typedef bool (* run_item_fc) (GDbItem *, GLoadedBinary *);
@@ -92,7 +92,6 @@ struct _GDbItemClass
hash_db_item_key_fc hash_key; /* Condensat de l'élément */
cmp_db_item_key_fc cmp_key; /* Comparaison en tant que clef*/
-
cmp_db_item_fc cmp; /* Comparaison entre éléments */
unpack_db_item_fc unpack; /* Réception depuis le réseau */
diff --git a/src/analysis/db/item.c b/src/analysis/db/item.c
index c880d65..8fc1763 100644
--- a/src/analysis/db/item.c
+++ b/src/analysis/db/item.c
@@ -311,9 +311,8 @@ int g_db_item_cmp_with_timestamp(const timestamp_t *ts, const GDbItem **b)
/******************************************************************************
* *
-* Paramètres : a = premier élément à analyser. *
-* b = second élément à analyser. *
-* with = précise les horodatages à prendre en compte. *
+* Paramètres : a = premier élément à analyser. *
+* b = second élément à analyser. *
* *
* Description : Effectue la comparaison entre deux éléments de collection. *
* *
@@ -323,16 +322,20 @@ int g_db_item_cmp_with_timestamp(const timestamp_t *ts, const GDbItem **b)
* *
******************************************************************************/
-gint g_db_item_cmp(GDbItem *a, GDbItem *b, bool with)
+gint g_db_item_cmp(const GDbItem *a, const GDbItem *b)
{
gint result; /* Bilan à retourner */
+ GDbItemClass *class; /* Classe liée à l'instance */
char *label_a; /* Etiquette de l'élément A */
char *label_b; /* Etiquette de l'élément B */
- if (with)
- result = cmp_timestamp(&a->created, &b->created);
- else
- result = 0;
+ result = g_db_item_cmp_timestamp(&a, &b);
+
+ if (result == 0)
+ {
+ class = G_DB_ITEM_GET_CLASS(a);
+ result = class->cmp(a, b);
+ }
if (result == 0)
{
@@ -353,46 +356,6 @@ gint g_db_item_cmp(GDbItem *a, GDbItem *b, bool with)
/******************************************************************************
* *
-* Paramètres : a = premier élément à analyser. *
-* b = second élément à analyser. *
-* *
-* Description : Effectue la comparaison entre deux éléments de collection. *
-* *
-* Retour : Bilan de la comparaison : -1, 0 ou 1. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-gint g_db_item_compare_with_timestamp(GDbItem *a, GDbItem *b)
-{
- return G_DB_ITEM_GET_CLASS(a)->cmp(a, b, true);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : a = premier élément à analyser. *
-* b = second élément à analyser. *
-* *
-* Description : Effectue la comparaison entre deux éléments de collection. *
-* *
-* Retour : Bilan de la comparaison : -1, 0 ou 1. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-gint g_db_item_compare_without_timestamp(GDbItem *a, GDbItem *b)
-{
- return G_DB_ITEM_GET_CLASS(a)->cmp(a, b, false);
-
-}
-
-
-/******************************************************************************
-* *
* Paramètres : item = base d'éléments à charger. [OUT] *
* pbuf = paquet de données où venir puiser les infos. *
* *
@@ -570,7 +533,7 @@ bool g_db_item_cancel(GDbItem *item, GLoadedBinary *binary)
* *
******************************************************************************/
-char *g_db_item_get_label(GDbItem *item)
+char *g_db_item_get_label(const GDbItem *item)
{
char *result; /* Description à retourner */
GDbItemClass *class; /* Classe de l'instance */
@@ -696,50 +659,6 @@ DbItemFlags g_db_item_get_flags(const GDbItem *item)
}
-/******************************************************************************
-* *
-* Paramètres : item = élément de collection à mettre à jour. *
-* binary = binaire chargé en mémoire à modifier. *
-* *
-* Description : Active ou désactive un élément de collection en place. *
-* *
-* Retour : Bilan de la mise à jour de l'élément. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool g_db_item_switch_state(GDbItem *item, GLoadedBinary *binary)
-{
- bool result; /* Bilan à faire remonter */
- bool enabled; /* Etat avant changement */
-
- enabled = !g_db_item_has_flag(item, DIF_DISABLED);
-
- /* Archivage de l'état */
-
- if (enabled)
- g_db_item_add_flag(item, DIF_DISABLED);
- else
- g_db_item_remove_flag(item, DIF_DISABLED);
-
- /* Application de l'état */
-
- if (binary != NULL)
- {
- if (enabled)
- result = g_db_item_cancel(item, binary);
- else
- result = g_db_item_apply(item, binary);
- }
- else
- result = true;
-
- return result;
-
-}
-
-
/* ---------------------------------------------------------------------------------- */
/* MANIPULATIONS AVEC UNE BASE DE DONNEES */
diff --git a/src/analysis/db/item.h b/src/analysis/db/item.h
index 32c296a..d041362 100644
--- a/src/analysis/db/item.h
+++ b/src/analysis/db/item.h
@@ -90,13 +90,7 @@ int g_db_item_cmp_timestamp(const GDbItem **, const GDbItem **);
int g_db_item_cmp_with_timestamp(const timestamp_t *, const GDbItem **);
/* Effectue la comparaison entre deux éléments de collection. */
-gint g_db_item_cmp(GDbItem *, GDbItem *, bool);
-
-/* Effectue la comparaison entre deux éléments de collection. */
-gint g_db_item_compare_with_timestamp(GDbItem *, GDbItem *);
-
-/* Effectue la comparaison entre deux éléments de collection. */
-gint g_db_item_compare_without_timestamp(GDbItem *, GDbItem *);
+gint g_db_item_cmp(const GDbItem *, const GDbItem *);
/* Importe la définition d'une base d'éléments pour collection. */
bool g_db_item_unpack(GDbItem *, packed_buffer *);
@@ -111,7 +105,7 @@ bool g_db_item_apply(GDbItem *, GLoadedBinary *);
bool g_db_item_cancel(GDbItem *, GLoadedBinary *);
/* Décrit l'élément de collection en place. */
-char *g_db_item_get_label(GDbItem *);
+char *g_db_item_get_label(const GDbItem *);
/* Fournit l'horodatage associé à l'élément de collection. */
timestamp_t g_db_item_get_timestamp(const GDbItem *);
@@ -132,14 +126,6 @@ DbItemFlags g_db_item_get_flags(const GDbItem *);
(g_db_item_get_flags(i) & f)
-//////////
-#define g_db_item_is_enabled(i) ((g_db_item_get_flags(i) & DIF_DISABLED) == 0)
-
-
-/* Active ou désactive un élément de collection en place. */
-bool g_db_item_switch_state(GDbItem *, GLoadedBinary *);
-
-
/* --------------------- MANIPULATIONS AVEC UNE BASE DE DONNEES --------------------- */
diff --git a/src/analysis/db/items/bookmark.c b/src/analysis/db/items/bookmark.c
index c1b0fec..8c15e5a 100644
--- a/src/analysis/db/items/bookmark.c
+++ b/src/analysis/db/items/bookmark.c
@@ -80,7 +80,7 @@ static guint g_db_bookmark_hash_key(const GDbBookmark *);
static gboolean g_db_bookmark_cmp_key(const GDbBookmark *, const GDbBookmark *);
/* Effectue la comparaison entre deux signets de collection. */
-static gint g_db_bookmark_cmp(GDbBookmark *, GDbBookmark *, bool);
+static gint g_db_bookmark_cmp(const GDbBookmark *, const GDbBookmark *);
/* Importe la définition d'un signet dans un flux réseau. */
static bool g_db_bookmark_unpack(GDbBookmark *, packed_buffer *);
@@ -89,7 +89,7 @@ static bool g_db_bookmark_unpack(GDbBookmark *, packed_buffer *);
static bool g_db_bookmark_pack(const GDbBookmark *, packed_buffer *);
/* Construit la description humaine d'un signet sur un tampon. */
-static char *g_db_bookmark_build_label(GDbBookmark *);
+static char *g_db_bookmark_build_label(const GDbBookmark *);
/* Exécute un signet sur un tampon de binaire chargé. */
static bool g_db_bookmark_run(GDbBookmark *, GLoadedBinary *, bool *, bool);
@@ -183,7 +183,6 @@ static void g_db_bookmark_class_init(GDbBookmarkClass *klass)
item->hash_key = (hash_db_item_key_fc)g_db_bookmark_hash_key;
item->cmp_key = (cmp_db_item_key_fc)g_db_bookmark_cmp_key;
-
item->cmp = (cmp_db_item_fc)g_db_bookmark_cmp;
item->unpack = (unpack_db_item_fc)g_db_bookmark_unpack;
@@ -375,9 +374,8 @@ static gboolean g_db_bookmark_cmp_key(const GDbBookmark *a, const GDbBookmark *b
/******************************************************************************
* *
-* Paramètres : a = premier élément à analyser. *
-* b = second élément à analyser. *
-* with = précise les horodatages à prendre en compte. *
+* Paramètres : a = premier élément à analyser. *
+* b = second élément à analyser. *
* *
* Description : Effectue la comparaison entre deux signets de collection. *
* *
@@ -387,7 +385,7 @@ static gboolean g_db_bookmark_cmp_key(const GDbBookmark *a, const GDbBookmark *b
* *
******************************************************************************/
-static gint g_db_bookmark_cmp(GDbBookmark *a, GDbBookmark *b, bool with)
+static gint g_db_bookmark_cmp(const GDbBookmark *a, const GDbBookmark *b)
{
gint result; /* Bilan de la comparaison */
@@ -396,9 +394,6 @@ static gint g_db_bookmark_cmp(GDbBookmark *a, GDbBookmark *b, bool with)
if (result == 0)
result = cmp_rle_string(&a->comment, &b->comment);
- if (result == 0)
- result = G_DB_ITEM_CLASS(g_db_bookmark_parent_class)->cmp(G_DB_ITEM(a), G_DB_ITEM(b), with);
-
return result;
}
@@ -476,7 +471,7 @@ static bool g_db_bookmark_pack(const GDbBookmark *bookmark, packed_buffer *pbuf)
* *
******************************************************************************/
-static char *g_db_bookmark_build_label(GDbBookmark *bookmark)
+static char *g_db_bookmark_build_label(const GDbBookmark *bookmark)
{
char *result; /* Description à retourner */
DbItemFlags flags; /* Propriétés de l'élément */
diff --git a/src/analysis/db/items/comment.c b/src/analysis/db/items/comment.c
index a231749..39aeb69 100644
--- a/src/analysis/db/items/comment.c
+++ b/src/analysis/db/items/comment.c
@@ -93,7 +93,7 @@ static void g_db_comment_dispose(GDbComment *);
static void g_db_comment_finalize(GDbComment *);
/* Effectue la comparaison entre deux commentaires enregistrés. */
-static gint g_db_comment_cmp(GDbComment *, GDbComment *, bool);
+static gint g_db_comment_cmp(const GDbComment *, const GDbComment *);
/* Importe la définition d'un commentaire dans un flux réseau. */
static bool g_db_comment_unpack(GDbComment *, packed_buffer *);
@@ -421,9 +421,8 @@ GDbComment *g_db_comment_new_area(const vmpa2t *addr, BufferLineFlags flags, con
/******************************************************************************
* *
-* Paramètres : a = premier élément à analyser. *
-* b = second élément à analyser. *
-* with = précise les horodatages à prendre en compte. *
+* Paramètres : a = premier élément à analyser. *
+* b = second élément à analyser. *
* *
* Description : Effectue la comparaison entre deux commentaires enregistrés. *
* *
@@ -433,7 +432,7 @@ GDbComment *g_db_comment_new_area(const vmpa2t *addr, BufferLineFlags flags, con
* *
******************************************************************************/
-static gint g_db_comment_cmp(GDbComment *a, GDbComment *b, bool with)
+static gint g_db_comment_cmp(const GDbComment *a, const GDbComment *b)
{
gint result; /* Bilan de la comparaison */
char *string_a; /* Texte du commentaire A */
@@ -463,9 +462,6 @@ static gint g_db_comment_cmp(GDbComment *a, GDbComment *b, bool with)
}
- if (result == 0)
- result = G_DB_ITEM_CLASS(g_db_comment_parent_class)->cmp(G_DB_ITEM(a), G_DB_ITEM(b), with);
-
return 0;
}
diff --git a/src/analysis/db/items/move.c b/src/analysis/db/items/move.c
index afc3331..3e347d3 100644
--- a/src/analysis/db/items/move.c
+++ b/src/analysis/db/items/move.c
@@ -75,7 +75,7 @@ static void g_db_move_dispose(GDbMove *);
static void g_db_move_finalize(GDbMove *);
/* Effectue la comparaison entre deux changements de position. */
-static gint g_db_move_cmp(GDbMove *, GDbMove *, bool);
+static gint g_db_move_cmp(const GDbMove *, const GDbMove *);
/* Importe la définition d'un déplacement depuis un flux réseau. */
static bool g_db_move_unpack(GDbMove *, packed_buffer *);
@@ -279,9 +279,8 @@ GDbMove *g_db_move_new(const GLineCursor *src, const GLineCursor *dest)
/******************************************************************************
* *
-* Paramètres : a = premier élément à analyser. *
-* b = second élément à analyser. *
-* with = précise les horodatages à prendre en compte. *
+* Paramètres : a = premier élément à analyser. *
+* b = second élément à analyser. *
* *
* Description : Effectue la comparaison entre deux changements de position. *
* *
@@ -291,7 +290,7 @@ GDbMove *g_db_move_new(const GLineCursor *src, const GLineCursor *dest)
* *
******************************************************************************/
-static gint g_db_move_cmp(GDbMove *a, GDbMove *b, bool with)
+static gint g_db_move_cmp(const GDbMove *a, const GDbMove *b)
{
gint result; /* Bilan de la comparaison */
@@ -300,9 +299,6 @@ static gint g_db_move_cmp(GDbMove *a, GDbMove *b, bool with)
if (result == 0)
result = g_line_cursor_compare(a->dest, b->dest);
- if (result == 0)
- result = G_DB_ITEM_CLASS(g_db_move_parent_class)->cmp(G_DB_ITEM(a), G_DB_ITEM(b), with);
-
return result;
}
diff --git a/src/analysis/db/items/switcher.c b/src/analysis/db/items/switcher.c
index 94d4940..2a3aa42 100644
--- a/src/analysis/db/items/switcher.c
+++ b/src/analysis/db/items/switcher.c
@@ -75,7 +75,7 @@ static void g_db_switcher_dispose(GDbSwitcher *);
static void g_db_switcher_finalize(GDbSwitcher *);
/* Effectue la comparaison entre deux signets de collection. */
-static gint g_db_switcher_cmp(GDbSwitcher *, GDbSwitcher *, bool);
+static gint g_db_switcher_cmp(const GDbSwitcher *, const GDbSwitcher *);
/* Importe la définition d'un signet depuis un flux réseau. */
static bool g_db_switcher_unpack(GDbSwitcher *, packed_buffer *);
@@ -318,9 +318,8 @@ GDbSwitcher *g_db_switcher_new(GArchInstruction *instr, const GImmOperand *imm,
/******************************************************************************
* *
-* Paramètres : a = premier élément à analyser. *
-* b = second élément à analyser. *
-* with = précise les horodatages à prendre en compte. *
+* Paramètres : a = premier élément à analyser. *
+* b = second élément à analyser. *
* *
* Description : Effectue la comparaison entre deux signets de collection. *
* *
@@ -330,7 +329,7 @@ GDbSwitcher *g_db_switcher_new(GArchInstruction *instr, const GImmOperand *imm,
* *
******************************************************************************/
-static gint g_db_switcher_cmp(GDbSwitcher *a, GDbSwitcher *b, bool with)
+static gint g_db_switcher_cmp(const GDbSwitcher *a, const GDbSwitcher *b)
{
gint result; /* Bilan de la comparaison */
@@ -356,9 +355,6 @@ static gint g_db_switcher_cmp(GDbSwitcher *a, GDbSwitcher *b, bool with)
}
- if (result == 0)
- result = G_DB_ITEM_CLASS(g_db_switcher_parent_class)->cmp(G_DB_ITEM(a), G_DB_ITEM(b), with);
-
return result;
}
diff --git a/src/analysis/db/misc/timestamp.c b/src/analysis/db/misc/timestamp.c
index 1d2fcd9..6453953 100644
--- a/src/analysis/db/misc/timestamp.c
+++ b/src/analysis/db/misc/timestamp.c
@@ -68,13 +68,11 @@ void init_timestamp(timestamp_t *timestamp)
bool timestamp_is_younger(timestamp_t stamp, timestamp_t limit)
{
- if (limit == TIMESTAMP_ALL_ACTIVE)
- return true;
+ bool result; /* Bilan à retourner */
- if (limit == TIMESTAMP_ALL_INACTIVE)
- return false;
+ result = (stamp <= limit);
- return (stamp <= limit);
+ return result;
}
diff --git a/src/analysis/db/misc/timestamp.h b/src/analysis/db/misc/timestamp.h
index 4ff714e..002f4d4 100644
--- a/src/analysis/db/misc/timestamp.h
+++ b/src/analysis/db/misc/timestamp.h
@@ -38,11 +38,6 @@
typedef uint64_t timestamp_t;
-/* Valeurs particulières */
-#define TIMESTAMP_ALL_ACTIVE 0 // REMME
-#define TIMESTAMP_ALL_INACTIVE 1 // REMME
-
-
/* Obtient un horodatage initialisé au moment même. */
void init_timestamp(timestamp_t *);