-vector<ConfigLine> parse_config(const string &filename)
-{
- vector<ConfigLine> ret;
-
- FILE *fp = fopen(filename.c_str(), "r");
- if (fp == NULL) {
- perror(filename.c_str());
- exit(1);
- }
-
- char buf[4096];
- while (!feof(fp)) {
- if (fgets(buf, sizeof(buf), fp) == NULL) {
- break;
- }
-
- // Chop off the string at the first #, \r or \n.
- buf[strcspn(buf, "#\r\n")] = 0;
-
- // Remove all whitespace from the end of the string.
- size_t len = strlen(buf);
- while (len > 0 && isspace(buf[len - 1])) {
- buf[--len] = 0;
- }
-
- // If the line is now all blank, ignore it.
- if (len == 0) {
- continue;
- }
-
- vector<string> tokens = split_tokens(buf);
- assert(!tokens.empty());
-
- ConfigLine line;
- line.keyword = tokens[0];