int main(int argc, char *argv[]) { struct reader_t rout; struct reader_t rsol; const char *pts; if (argc != 4) return 1; reader_init(&rsol, argv[2]); reader_init(&rout, argv[3]); if (rsol.f == NULL) return 1; if (rout.f == NULL) { reader_free(&rsol); printf("%s\n", pts_zero); return 0; } pts = get_answer(&rsol, &rout); printf("%s\n", pts); reader_free(&rsol); reader_free(&rout); return 0; }
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; } }
void conn_free(struct connection *conn) { if (conn == NULL) return; if (conn->fd != -1) { close(conn->fd); conn->fd = -1; } conn->registered = false; if (conn->ev != NULL) { conn->ev->info = NULL; conn_free(conn->ev); conn_recycle(conn->ctx, conn->ev); conn->ev = NULL; } if (conn->info == NULL) return; struct conn_info *info = conn->info; info->status = DISCONNECTED; reader_free(&info->reader); reader_init(&info->reader); EMPTY_CMD_QUEUE(&info->cmd_queue, cmd_next); EMPTY_CMD_QUEUE(&info->ready_queue, ready_next); EMPTY_CMD_QUEUE(&info->waiting_queue, waiting_next); }
void log_free(struct log *log) { reader_free(log->reader); if (log->hashdir) { hashdir_free(log->hashdir); } free(log); }
MalVal *read_str (char *str) { Reader *reader; char *token; MalVal *ast = NULL; reader = tokenize(str); if (reader) { ast = read_form(reader); reader_free(reader); } return ast; }
void log_free_remove(struct log *log) { reader_free(log->reader); int r = dir_unlink(log->log_dir, log_filename(log->log_number)); if (r == -1) { log_warn(log->db, "Can't unlink unused log file %s.", log_filename(log->log_number)); } r = dir_unlink(log->index_dir, idx_filename(log->log_number)); if (r == -1) { log_warn(log->db, "Can't unlink unused index file %s.", idx_filename(log->log_number)); } r = dir_unlink(log->index_dir, _dirty_idx_filename(log->log_number)); if (r == -1) { log_warn(log->db, "Can't unlink unused dirty index file %s.", _dirty_idx_filename(log->log_number)); } if (log->hashdir) { hashdir_free(log->hashdir); } free(log); }