summaryrefslogtreecommitdiff
path: root/src/analysis/db/collection.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/db/collection.c')
-rw-r--r--src/analysis/db/collection.c65
1 files changed, 63 insertions, 2 deletions
diff --git a/src/analysis/db/collection.c b/src/analysis/db/collection.c
index 27f4ddb..c3b9f2c 100644
--- a/src/analysis/db/collection.c
+++ b/src/analysis/db/collection.c
@@ -124,6 +124,8 @@ static void g_db_collection_class_init(GDbCollectionClass *klass)
static void g_db_collection_init(GDbCollection *collec)
{
+ collec->binary = NULL;
+
g_rw_lock_init(&collec->params_access);
}
@@ -198,8 +200,26 @@ GDbCollection *g_db_collection_new(uint32_t id, GType type, const char *name)
}
+/******************************************************************************
+* *
+* Paramètres : collec = collection générique d'éléments à compléter. *
+* binary = binaire sur lequel appliquer les éléments. *
+* *
+* Description : Attache à une collection un binaire pour les éléments listés.*
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void g_db_collection_link_to_binary(GDbCollection *collec, GLoadedBinary *binary)
+{
+ g_object_ref(G_OBJECT(binary));
+ collec->binary = binary;
+}
/******************************************************************************
@@ -273,9 +293,20 @@ bool g_db_collection_recv(GDbCollection *collec, int fd, sqlite3 *db)
switch (action)
{
case DBA_ADD_ITEM:
+
result = g_db_collection_add_item(collec, item);
- if (result && db != NULL)
- result = g_db_collection_store_item(collec, item, db);
+
+ if (result)
+ {
+ if (collec->binary != NULL)
+ result = g_db_item_apply(item, collec->binary);
+ if (db != NULL)
+ result &= g_db_collection_store_item(collec, item, db);
+ }
+
+ if (!result)
+ /* TODO : retirer l'élémnt */;
+
break;
case DBA_REM_ITEM:
@@ -352,6 +383,8 @@ bool g_db_collection_send_all_updates(GDbCollection *collec, int fd)
result = true;
+ /* TODO : lock ? */
+
for (iter = g_list_first(collec->items);
iter != NULL && result;
iter = g_list_next(iter))
@@ -914,6 +947,34 @@ static bool g_db_collection_store_item(const GDbCollection *collec, const GDbIte
/******************************************************************************
* *
+* Paramètres : list = ensemble de collectons à parcourir. *
+* binary = binaire sur lequel appliquer les éléments. *
+* *
+* Description : Attache un binaire à une série de collections. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void attach_binary_to_collections(GList *list, GLoadedBinary *binary)
+{
+ GList *iter; /* Boucle de parcours */
+
+ for (iter = g_list_first(list);
+ iter != NULL;
+ iter = g_list_next(iter))
+ {
+ g_db_collection_link_to_binary(G_DB_COLLECTION(iter->data), binary);
+
+ }
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : list = ensemble de collectons à parcourir. *
* id = identifiant interne du type d'éléments groupés. *
* *