}
+// 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) {
out_key->data = strdup(r->QRname);
out_data->size = sizeof(struct ctdlfoo);
out_data->data = r;
- return(0);
+ return(1);
}
#endif
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);