- token = strtok(line, "|");
- m->meta_msgnum = atol(strtok(NULL, "|"));
- m->meta_refcount = atoi(strtok(NULL, "|"));
- strncpy(m->meta_content_type, strtok(NULL, "|"), sizeof(m->meta_content_type));
- m->meta_rfc822_length = atol(strtok(NULL, "|"));
+
+ memset(m, 0, sizeof(struct MetaData));
+ char *p = line;
+
+ for (int i=0; (token = strsep(&p, "|")); ++i) {
+ switch(i) {
+ case 1:
+ m->meta_msgnum = atol(token);
+ break;
+ case 2:
+ m->meta_refcount = atoi(token);
+ break;
+ case 3:
+ strncpy(m->meta_content_type, token, sizeof(m->meta_content_type));
+ break;
+ case 4:
+ m->meta_rfc822_length = atol(token);
+ break;
+ }
+ }