コード例 #1
0
void ReadTest::TearDown() {
    mem_buffer_clear(&m_buffer);

    m_metaLib = NULL;
    mem_buffer_clear(&m_metaLib_buffer);
    Base::TearDown();
}
コード例 #2
0
dr_metalib_source_t
dr_metalib_builder_add_file(dr_metalib_builder_t builder, const char * name, const char * file) {
    dr_metalib_source_t source;
    struct mem_buffer name_buffer;
    size_t file_len;
    const char * suffix;
    dr_metalib_source_format_t format;

    assert(builder);
    assert(file);

    suffix = file_name_suffix(file);
    if (suffix == NULL) return 0;
    if (strcmp(suffix, "xml") == 0) {
        format = dr_metalib_source_format_xml;
    }
    else {
        return NULL;
    }

    mem_buffer_init(&name_buffer, 0);
    if (name == NULL) {
        name = file_name_base(file, &name_buffer);
        if (name == NULL) {
            mem_buffer_clear(&name_buffer);
            return NULL;
        }
    }

    assert(name);

    file_len = strlen(file) + 1;
    source = dr_metalib_source_create(builder, name, file_len, dr_metalib_source_type_file, format, dr_metalib_source_from_user);
    if (source == NULL) {
        mem_buffer_clear(&name_buffer);
        return NULL;
    }

    memcpy(source + 1, file, file_len);

    mem_buffer_clear(&name_buffer);
    return source;
}
コード例 #3
0
const char * MergeTest::result(cfg_t cfg) {
    CPE_DEF_ERROR_MONITOR(em, cpe_error_log_to_consol, NULL);

    mem_buffer_clear(&m_result_buffer);
    struct write_stream_buffer stream = CPE_WRITE_STREAM_BUFFER_INITIALIZER(&m_result_buffer);

    EXPECT_EQ(0, cfg_write((write_stream_t)&stream, cfg, &em));
    stream_putc((write_stream_t)&stream, 0);

    return (const char *)mem_buffer_make_exactly(&m_result_buffer);
}
コード例 #4
0
void ReadTest::installMeta(const char * def) {
    m_metaLib = NULL;
    mem_buffer_clear(&m_metaLib_buffer);

    t_elist_clear();

    EXPECT_EQ(
        0,
        dr_create_lib_from_xml_ex(&m_metaLib_buffer, def, strlen(def), t_em()))
        << "install meta error";

    m_metaLib = (LPDRMETALIB)mem_buffer_make_exactly(&m_metaLib_buffer);
}
コード例 #5
0
void dir_search(
    dir_visitor_t visitor, void * ctx,
    const char * path, int maxLevel,
    error_monitor_t em, mem_allocrator_t talloc)
{
    struct mem_buffer buffer;
    mem_buffer_init(&buffer, talloc);

    mem_buffer_strcat(&buffer, path);

    dir_search_i(visitor, ctx, maxLevel, em, &buffer);

    mem_buffer_clear(&buffer);
}
コード例 #6
0
int tools_main(error_monitor_t em) {
    struct cpe_dr_generate_ctx ctx;
    struct mem_buffer buffer;
    int rv;

    ctx.m_builder = NULL;
    ctx.m_metalib = NULL;
    ctx.m_em = em;

    rv = 0;

    ctx.m_builder = dr_metalib_builder_create(NULL, em);
    if (ctx.m_builder == NULL) {
        CPE_ERROR(em, "create metalib builder fail!");
        return -1;
    }

    prepare_input(ctx.m_builder, em);

    dr_metalib_builder_analize(ctx.m_builder);

    mem_buffer_init(&buffer, 0);
    if (dr_inbuild_build_lib(
            &buffer,
            dr_metalib_bilder_lib(ctx.m_builder),
            em) == 0)
    {
        ctx.m_metalib = (LPDRMETALIB)mem_buffer_make_continuous(&buffer, 0), mem_buffer_size(&buffer);

        if (ctx.m_metalib) {
            if (do_validate(&ctx) != 0) rv = -1;
            if (do_generate_h(&ctx) != 0) rv = -1;
            if (do_generate_lib_bin(&ctx) != 0) rv = -1;
            if (do_generate_lib_c(&ctx) != 0) rv = -1;
        }
    }
    else {
        rv = -1;
    }

    mem_buffer_clear(&buffer);
    dr_metalib_builder_free(ctx.m_builder);

    return rv;
}
コード例 #7
0
static int do_generate_h(cpe_dr_generate_ctx_t ctx) {
    struct dr_metalib_source_it source_it;
    dr_metalib_source_t source;
    struct mem_buffer buffer;
    struct write_stream_file stream;
    int i;
    FILE * fp;
    int rv;

    mem_buffer_init(&buffer, 0);

    rv = 0;
    for(i = 0; i < o_h->count; ++i) {
        dr_metalib_builder_sources(&source_it, ctx->m_builder);
        while((source = dr_metalib_source_next(&source_it))) {
            const char * file_name;

            if (dr_metalib_source_from(source) != dr_metalib_source_from_user) continue;

            file_name = dr_metalib_source_file(source);
            if (file_name == NULL) continue;

            mem_buffer_clear_data(&buffer);
            mem_buffer_strcat(&buffer, o_h->filename[i]);
            mem_buffer_strcat(&buffer, "/");
            file_name_append_base(&buffer, file_name);
            mem_buffer_strcat(&buffer, ".h");

            fp = file_stream_open((char *)mem_buffer_make_continuous(&buffer, 0), "w", ctx->m_em);
            if (fp == NULL) {
                rv = -1;
                continue;
            }

            write_stream_file_init(&stream, fp, ctx->m_em);
            cpe_dr_generate_h((write_stream_t)&stream, source, ctx);
            file_stream_close(fp, ctx->m_em);
        }
    }

    mem_buffer_clear(&buffer);

    return rv;
}
コード例 #8
0
int ReadTest::read(const char * data, const char * typeName, int policy, size_t capacity) {
    LPDRMETA meta = dr_lib_find_meta_by_name(m_metaLib, typeName);
    EXPECT_TRUE(meta) << "get meta " << typeName << " error!";
    if (meta == 0) return -1;

    if (capacity == 0) {
        capacity = dr_meta_size(meta);
    }

    cfg_t input = t_cfg_parse(data);
    EXPECT_TRUE(input) << "parse input to cfg fail!";
    if (input == 0) return -1;

    t_elist_clear();
    mem_buffer_clear(&m_buffer);

    return dr_cfg_read(
        mem_buffer_alloc(&m_buffer, capacity),
        capacity,
        input,
        meta,
        policy,
        t_em());
}
コード例 #9
0
void WriteTest::TearDown() {
    m_metaLib = NULL;
    mem_buffer_clear(&m_metaLib_buffer);

    Base::TearDown();
}
コード例 #10
0
void MergeTest::TearDown() {
    mem_buffer_clear(&m_result_buffer);
    Base::TearDown();
}
コード例 #11
0
void BufferTest::TearDown() {
    mem_buffer_clear(&m_buffer);
    Base::TearDown();
}