Reader *tokenize(char *line) { GRegex *regex; GMatchInfo *matchInfo; GError *err = NULL; Reader *reader = reader_new(); regex = g_regex_new ("[\\s ,]*(~@|[\\[\\]{}()'`~@]|\"(?:[\\\\].|[^\\\\\"])*\"|;.*|[^\\s \\[\\]{}()'\"`~@,;]*)", 0, 0, &err); g_regex_match (regex, line, 0, &matchInfo); if (err != NULL) { fprintf(stderr, "Tokenize error: %s\n", err->message); return NULL; } while (g_match_info_matches(matchInfo)) { gchar *result = g_match_info_fetch(matchInfo, 1); if (result[0] != '\0' && result[0] != ';') { reader_append(reader, result); } g_match_info_next(matchInfo, &err); } g_match_info_free(matchInfo); g_regex_unref(regex); if (reader->array->len == 0) { reader_free(reader); return NULL; } else { return reader; } }
static struct log *_log_new(struct db *db, uint64_t log_number, struct dir *log_dir, struct dir *index_dir) { struct reader *reader = reader_new(db, log_dir, log_filename(log_number)); if (reader == NULL) { return NULL; } struct log *log = malloc(sizeof(struct log)); memset(log, 0, sizeof(struct log)); log->db = db; log->log_dir = log_dir; log->index_dir = index_dir; log->log_number = log_number; log->reader = reader; return log; }