ctdlload: euidindex
authorArt Cancro <ajc@citadel.org>
Tue, 25 Jul 2023 15:28:32 +0000 (06:28 -0900)
committerArt Cancro <ajc@citadel.org>
Tue, 25 Jul 2023 15:28:32 +0000 (06:28 -0900)
citadel/utils/ctdlload.c

index 80aa53eeb9aa5164d2a0bc51dda704bccddcbd2b..89b1ce5a6100b4f2291cd0e4fd0d7d7beb341d91 100644 (file)
@@ -520,9 +520,46 @@ int import_fulltext(char *line, DBT *out_key, DBT *out_data) {
 
 
 // Import an EUID Index record
+// euidindex|msgnum|roomnum|euid|
 int import_euidindex(char *line, DBT *out_key, DBT *out_data) {
-       // FIXME
-       return(0);
+       char euid[SIZ];
+       long msgnum;
+       long roomnum;
+       char *token;
+
+       char *p = line;
+       for (int i=0; (token = strsep(&p, "|")); ++i) {
+               switch(i) {
+                       case 1:
+                               msgnum = atol(token);
+                               break;
+                       case 2:
+                               roomnum = atol(token);
+                               break;
+                       case 3:
+                               strncpy(euid, token, sizeof(euid));
+                               break;
+               }
+       }
+
+       // The structure of an euidindex record *key* is:
+       // |----room_number----|----------EUID-------------|
+       //    (sizeof long)       (actual length of euid)
+       out_key->size = sizeof(long) + strlen(euid) + 1;
+       out_key->data = reallok(NULL, out_key->size);
+       memcpy(out_key->data, &roomnum, sizeof(long));
+       strcpy(out_key->data + sizeof(long), euid);
+
+       // The structure of an euidindex record *value* is:
+       // |-----msg_number----|----room_number----|----------EUID-------------|
+       //    (sizeof long)       (sizeof long)       (actual length of euid)
+       out_data->size = sizeof(long) + sizeof(long) + strlen(euid) + 1;
+       out_data->data = reallok(NULL, out_data->size);
+       memcpy(out_data->data, &msgnum, sizeof(long));
+       memcpy(out_data->data + sizeof(long), &roomnum, sizeof(long));
+       strcpy(out_data->data + sizeof(long) + sizeof(long), euid);
+
+       return(1);
 }