Пример #1
0
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;
}
Пример #2
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;
    }
}
Пример #3
0
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);
}
Пример #4
0
void log_free(struct log *log)
{
	reader_free(log->reader);
	if (log->hashdir) {
		hashdir_free(log->hashdir);
	}
	free(log);
}
Пример #5
0
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;
}
Пример #6
0
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);
}