Exemplo n.º 1
0
TEST_F(BufferTest, strcat_to_str) {
    EXPECT_EQ(0, mem_buffer_strcat(&m_buffer, "abc"));
    EXPECT_STREQ("abc", (char*)mem_buffer_make_continuous(&m_buffer, 0));

    EXPECT_EQ(0, mem_buffer_strcat(&m_buffer, "def"));
    EXPECT_STREQ("abcdef", (char*)mem_buffer_make_continuous(&m_buffer, 0));

    EXPECT_EQ((size_t)7, mem_buffer_size(&m_buffer));
}
Exemplo n.º 2
0
TEST_F(BufferTest, strcat_to_buf) {
    EXPECT_EQ((size_t)3, append_string("abc"));
    EXPECT_EQ((size_t)3, mem_buffer_size(&m_buffer));

    EXPECT_EQ(-1, mem_buffer_strcat(&m_buffer, "def"));
    EXPECT_EQ((size_t)3, mem_buffer_size(&m_buffer));
}
Exemplo n.º 3
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;
}
Exemplo n.º 4
0
TEST_F(BufferTest, strcat_to_str_trunk_full) {
    struct mem_buffer_trunk * trunk1 =
        mem_buffer_append_trunk(&m_buffer, 7);

    EXPECT_EQ((size_t)4, mem_trunk_append(&m_buffer, trunk1, "abc", 4));

    EXPECT_EQ(0, mem_buffer_strcat(&m_buffer, "def"));
    EXPECT_STREQ("abcdef", (char*)mem_buffer_make_continuous(&m_buffer, 0));

    EXPECT_EQ((size_t)7, mem_buffer_size(&m_buffer));
    EXPECT_EQ((size_t)1, mem_buffer_trunk_count(&m_buffer));
}
Exemplo n.º 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);
}
Exemplo n.º 6
0
enum dir_visit_next_op
dir_search_i(
    dir_visitor_t visitor, void * ctx,
    int maxLevel,
    error_monitor_t em,
    mem_buffer_t buffer)
{
    DIR * dirp;
    struct dirent dbuf;
    struct dirent * dp;
    char * path;
    int rv;
    size_t bufSize;
    enum dir_visit_next_op nextOp;

    if (maxLevel == 0) return dir_visit_next_go;

    path = (char *)mem_buffer_make_continuous(buffer, 0);
    bufSize = mem_buffer_size(buffer);

    dirp = dir_open(path, 0, em);
    if (dirp == NULL) return dir_visit_next_go;

    nextOp = dir_visit_next_go;

    while((rv = readdir_r(dirp, &dbuf, &dp)) == 0 && dp) {
        if (strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0) continue;

        if (
            mem_buffer_strcat(buffer, "/") != 0 || 
            mem_buffer_strcat(buffer, dp->d_name) != 0) break;

        if (S_ISDIR(DTTOIF(dp->d_type))) {
            if (visitor->on_dir_enter) {
                nextOp = visitor->on_dir_enter(
                    (const char *)mem_buffer_make_continuous(buffer, 0),
                    dp->d_name,
                    ctx);

                if (nextOp == dir_visit_next_exit) break;
            }
            else {
                nextOp = dir_visit_next_go;
            }

            if (nextOp == dir_visit_next_go) {
                nextOp = dir_search_i(
                    visitor, ctx,
                    maxLevel > 0 ? maxLevel - 1 : maxLevel,
                    em, buffer);

                if (nextOp == dir_visit_next_exit) break;
            }

            if (visitor->on_dir_leave) {
                nextOp = visitor->on_dir_leave(
                    (const char *)mem_buffer_make_continuous(buffer, 0),
                    dp->d_name,
                    ctx);

                if (nextOp == dir_visit_next_exit) break;
            }
        }
        else if (S_ISREG(DTTOIF(dp->d_type))) {
            if (visitor->on_file) {
                nextOp = visitor->on_file(
                    (const char *)mem_buffer_make_continuous(buffer, 0),
                    dp->d_name,
                    ctx);

                if (nextOp == dir_visit_next_exit) break;
            }
        }

        /*restore curent path*/
        mem_buffer_set_size(buffer, bufSize);
        path = (char *)mem_buffer_make_continuous(buffer, 0);
        if (path == NULL) {
            CPE_ERROR_EX(em, ENOMEM, "no memory for dir search path");
            nextOp = dir_visit_next_exit;
            break;
        }
        path[bufSize - 1] = 0;

    }

    /*clear resources*/
    dir_close(dirp, em);

    return nextOp == dir_visit_next_exit ?  dir_visit_next_exit : dir_visit_next_go;
}