Esempio n. 1
0
dir_visit_next_op_t
accept_input_file(const char * full, const char * base, void * ctx) {
    if (strcmp(file_name_suffix(base), "xml") == 0) {
        dr_metalib_builder_add_file((dr_metalib_builder_t)ctx, NULL, full);
    }
    return dir_visit_next_go;
}
Esempio n. 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;
}