diff options
Diffstat (limited to 'src/analysis/db/collection.c')
-rw-r--r-- | src/analysis/db/collection.c | 65 |
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. * * * |