summaryrefslogtreecommitdiff
path: root/src/analysis/db/misc
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/db/misc')
-rw-r--r--src/analysis/db/misc/rlestr.c2
-rw-r--r--src/analysis/db/misc/snapshot.c78
-rw-r--r--src/analysis/db/misc/snapshot.h14
-rw-r--r--src/analysis/db/misc/timestamp.c19
-rw-r--r--src/analysis/db/misc/timestamp.h3
5 files changed, 108 insertions, 8 deletions
diff --git a/src/analysis/db/misc/rlestr.c b/src/analysis/db/misc/rlestr.c
index 0fe182b..c1cc866 100644
--- a/src/analysis/db/misc/rlestr.c
+++ b/src/analysis/db/misc/rlestr.c
@@ -286,7 +286,7 @@ bool unpack_rle_string(rle_string *str, packed_buffer *pbuf)
if (result && str->length > 0)
{
- str->data = (char *)malloc(str->length + 1);
+ str->data = malloc(str->length + 1);
str->dynamic = true;
result = extract_packed_buffer(pbuf, str->data, str->length + 1, false);
diff --git a/src/analysis/db/misc/snapshot.c b/src/analysis/db/misc/snapshot.c
index 546191b..9aa096f 100644
--- a/src/analysis/db/misc/snapshot.c
+++ b/src/analysis/db/misc/snapshot.c
@@ -41,6 +41,25 @@
* *
* Paramètres : id = identifiant d'instantané à initialiser. [OUT] *
* *
+* Description : Prépare un identifiant pour instantané à une définition. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void setup_empty_snapshot_id(snapshot_id_t *id)
+{
+ memset(id, 0, sizeof(snapshot_id_t));
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : id = identifiant d'instantané à initialiser. [OUT] *
+* *
* Description : Construit un identifiant pour instantané de base de données. *
* *
* Retour : Bilan de l'opération. *
@@ -214,6 +233,32 @@ bool pack_snapshot_id(const snapshot_id_t *id, packed_buffer *pbuf)
* *
* Paramètres : info = description d'instantané à initialiser. [OUT] *
* *
+* Description : Prépare une description pour instantané à une définition. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void setup_empty_snapshot_info(snapshot_info_t *info)
+{
+ setup_empty_snapshot_id(&info->parent_id);
+
+ setup_empty_snapshot_id(&info->id);
+
+ setup_empty_timestamp(&info->created);
+
+ info->name = NULL;
+ info->desc = NULL;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : info = description d'instantané à initialiser. [OUT] *
+* *
* Description : Construit une description pour instantané de base de données.*
* *
* Retour : Bilan de l'opération. *
@@ -226,7 +271,10 @@ bool init_snapshot_info(snapshot_info_t *info)
{
bool result; /* Bilan à retourner */
- result = init_snapshot_id(&info->id);
+ result = init_snapshot_id_from_text(&info->parent_id, NO_SNAPSHOT_ROOT);
+
+ if (result)
+ result = init_snapshot_id(&info->id);
if (result)
result = init_timestamp(&info->created);
@@ -262,7 +310,10 @@ bool init_snapshot_info_from_text(snapshot_info_t *info, const char *id, uint64_
{
bool result; /* Bilan à retourner */
- result = init_snapshot_id_from_text(&info->id, id);
+ result = init_snapshot_id_from_text(&info->parent_id, NO_SNAPSHOT_ROOT);
+
+ if (result)
+ result = init_snapshot_id_from_text(&info->id, id);
if (result)
result = init_timestamp_from_value(&info->created, created);
@@ -332,6 +383,8 @@ void copy_snapshot_info(snapshot_info_t *dest, const snapshot_info_t *src)
{
exit_snapshot_info(dest);
+ copy_snapshot_id(&dest->parent_id, &src->parent_id);
+
copy_snapshot_id(&dest->id, &src->id);
copy_timestamp(&dest->created, &src->created);
@@ -362,19 +415,26 @@ bool unpack_snapshot_info(snapshot_info_t *info, packed_buffer *pbuf)
{
bool result; /* Bilan à retourner */
rle_string string; /* Chaîne à transmettre */
+ const char *text; /* Valeur textuelle obtenue */
- result = unpack_snapshot_id(&info->id, pbuf);
+ result = unpack_snapshot_id(&info->parent_id, pbuf);
+
+ if (result)
+ result = unpack_snapshot_id(&info->id, pbuf);
if (result)
result = unpack_timestamp(&info->created, pbuf);
if (result)
{
+ init_static_rle_string(&string, NULL);
+
result = unpack_rle_string(&string, pbuf);
if (result)
{
- info->name = strdup(get_rle_string(&string));
+ text = get_rle_string(&string);
+ info->name = (text != NULL ? strdup(text) : NULL);
exit_rle_string(&string);
}
@@ -382,11 +442,14 @@ bool unpack_snapshot_info(snapshot_info_t *info, packed_buffer *pbuf)
if (result)
{
+ init_static_rle_string(&string, NULL);
+
result = unpack_rle_string(&string, pbuf);
if (result)
{
- info->desc = strdup(get_rle_string(&string));
+ text = get_rle_string(&string);
+ info->desc = (text != NULL ? strdup(text) : NULL);
exit_rle_string(&string);
}
@@ -415,7 +478,10 @@ bool pack_snapshot_info(const snapshot_info_t *info, packed_buffer *pbuf)
bool result; /* Bilan à retourner */
rle_string string; /* Chaîne à transmettre */
- result = pack_snapshot_id(&info->id, pbuf);
+ result = pack_snapshot_id(&info->parent_id, pbuf);
+
+ if (result)
+ result = pack_snapshot_id(&info->id, pbuf);
if (result)
result = pack_timestamp(&info->created, pbuf);
diff --git a/src/analysis/db/misc/snapshot.h b/src/analysis/db/misc/snapshot.h
index 37fad7f..8f9a598 100644
--- a/src/analysis/db/misc/snapshot.h
+++ b/src/analysis/db/misc/snapshot.h
@@ -49,6 +49,13 @@ typedef struct _snapshot_id_t
} snapshot_id_t;
+/* Identifiant d'un parent de racine */
+#define NO_SNAPSHOT_ROOT "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+
+
+/* Prépare un identifiant pour instantané à une définition. */
+void setup_empty_snapshot_id(snapshot_id_t *);
+
/* Construit un identifiant pour instantané de base de données. */
bool init_snapshot_id(snapshot_id_t *);
@@ -77,6 +84,7 @@ bool pack_snapshot_id(const snapshot_id_t *, packed_buffer *);
/* Description d'un instantané */
typedef struct _snapshot_info_t
{
+ snapshot_id_t parent_id; /* Identifiant du propriétaire */
snapshot_id_t id; /* Identifiant attribué */
timestamp_t created; /* Date de création */
@@ -87,6 +95,9 @@ typedef struct _snapshot_info_t
} snapshot_info_t;
+/* Prépare une description pour instantané à une définition. */
+void setup_empty_snapshot_info(snapshot_info_t *);
+
/* Construit une description pour instantané de base de données. */
bool init_snapshot_info(snapshot_info_t *);
@@ -96,8 +107,9 @@ bool init_snapshot_info_from_text(snapshot_info_t *, const char *, uint64_t, con
/* Libère la mémoire occupée par une description d'instantané. */
void exit_snapshot_info(snapshot_info_t *);
+#define get_snapshot_info_parent_id(nfo) &(nfo)->parent_id
#define get_snapshot_info_id(nfo) &(nfo)->id
-#define get_snapshot_info_creation(nfo) (nfo)->created
+#define get_snapshot_info_created(nfo) (nfo)->created
#define get_snapshot_info_name(nfo) (nfo)->name
#define get_snapshot_info_desc(nfo) (nfo)->desc
diff --git a/src/analysis/db/misc/timestamp.c b/src/analysis/db/misc/timestamp.c
index dfc6f25..4d457e2 100644
--- a/src/analysis/db/misc/timestamp.c
+++ b/src/analysis/db/misc/timestamp.c
@@ -37,6 +37,25 @@
* *
* Paramètres : timestamp = horodatage à initialiser. [OUT] *
* *
+* Description : Prépare un horodatage à une définition. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void setup_empty_timestamp(timestamp_t *timestamp)
+{
+ *timestamp = 0;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : timestamp = horodatage à initialiser. [OUT] *
+* *
* Description : Obtient un horodatage initialisé au moment même. *
* *
* Retour : Bilan de l'opération. *
diff --git a/src/analysis/db/misc/timestamp.h b/src/analysis/db/misc/timestamp.h
index 7f6290876..52b99f8 100644
--- a/src/analysis/db/misc/timestamp.h
+++ b/src/analysis/db/misc/timestamp.h
@@ -38,6 +38,9 @@
typedef uint64_t timestamp_t;
+/* Prépare un horodatage à une définition. */
+void setup_empty_timestamp(timestamp_t *);
+
/* Obtient un horodatage initialisé au moment même. */
bool init_timestamp(timestamp_t *);