// 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);
}