From 24d8f666e12536cced420d1bd89aedabeb41eb15 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Sun, 16 Jul 2023 18:24:11 -0900 Subject: [PATCH] import msglists --- citadel/utils/ctdlload.c | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/citadel/utils/ctdlload.c b/citadel/utils/ctdlload.c index 97f3a0d4d..979419d10 100644 --- a/citadel/utils/ctdlload.c +++ b/citadel/utils/ctdlload.c @@ -352,6 +352,42 @@ int convert_floor(char *line, DBT *out_key, DBT *out_data) { } +// Import a msglist record +// msglist|26|32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51| +int convert_msglist(char *line, DBT *out_key, DBT *out_data) { + long roomnum; + char *token; + char *p = line; + int num_msgs = 0; + long *msglist = NULL; + + for (int i=0; (token = strsep(&p, "|")); ++i) { + switch(i) { + case 1: + roomnum = atol(token); + break; + case 2: + char *q = token; + char *mtoken; + for (int j=0; (mtoken = strsep(&q, ",")); ++j) { + msglist = realloc(msglist, (num_msgs+1) * sizeof(long)); + msglist[num_msgs++] = atol(mtoken); + } + break; + } + } + + out_key->size = sizeof(long); + out_key->data = malloc(out_key->size); + memcpy(out_key->data, &roomnum, out_key->size); + + out_data->size = num_msgs * sizeof(long); + out_data->data = msglist; + + return(1); +} + + #if 0 // Convert a "foo" record to a record on disk. int convert_foo(char *line, DBT *out_key, DBT *out_data) { @@ -370,7 +406,7 @@ int convert_foo(char *line, DBT *out_key, DBT *out_data) { out_key->data = strdup(r->QRname); out_data->size = sizeof(struct ctdlfoo); out_data->data = r; - return(0); + return(1); } #endif @@ -459,7 +495,7 @@ void ingest_one(char *line, DB_ENV *dst_dbenv) { else if (!strcasecmp(record_type, "user")) row_was_good = convert_user(line, &out_key, &out_data); else if (!strcasecmp(record_type, "room")) row_was_good = convert_room(line, &out_key, &out_data); else if (!strcasecmp(record_type, "floor")) row_was_good = convert_floor(line, &out_key, &out_data); - else if (!strcasecmp(record_type, "msglist")) row_was_good = convert_foo(line, &out_key, &out_data); + else if (!strcasecmp(record_type, "msglist")) row_was_good = convert_msglist(line, &out_key, &out_data); else if (!strcasecmp(record_type, "visit")) row_was_good = convert_foo(line, &out_key, &out_data); else if (!strcasecmp(record_type, "dir")) row_was_good = convert_foo(line, &out_key, &out_data); else if (!strcasecmp(record_type, "use")) row_was_good = convert_foo(line, &out_key, &out_data); -- 2.39.2