Exemplo n.º 1
0
field_t * field_create(fieldtype_t type, const char * key, const void * value) {
    field_t * field;

    if (!(field = malloc(sizeof(field_t)))) goto ERR_MALLOC;
    field->key  = key;
    field->type = type;

    if (value) {
        switch (type) {
            case TYPE_STRING:
                if (!(field->value.string = strdup((const char *) value))) goto ERR_DUP_VALUE;
                break;
            case TYPE_GENERATOR:
                if (!(field->value.generator = generator_dup((const generator_t *) value))) goto ERR_DUP_VALUE;
                break;
#ifdef USE_BITS
            case TYPE_BITS:
                fprintf(stderr, "field_create: invalid field type (TYPE_BITS): use field_create_bits instead.\n");
                assert(false);
                break;
#endif
            default:
                // Copy size bytes in value in the union.
                memcpy(&field->value, value, field_get_type_size(type));
                break;
        }
    }

    return field;

ERR_DUP_VALUE:
    free(field);
ERR_MALLOC:
    return NULL;
}
Exemplo n.º 2
0
field_t * field_create(fieldtype_t type, const char * key, const void * value) {
    field_t * field;

    if (!(field = malloc(sizeof(field_t)))) goto ERR_MALLOC;
    field->key  = key;
    field->type = type;

    if (value) {
        switch (type) {
            case TYPE_STRING:
                if (!(field->value.string = strdup((const char *) value))) goto ERR_DUP_VALUE;
                break;
            case TYPE_GENERATOR:
                if (!(field->value.generator = generator_dup((const generator_t *) value))) goto ERR_DUP_VALUE;
                break;
            default:
                // Copy size bytes in value in the union.
                memcpy(&field->value, value, field_get_type_size(type));
                break;
        }
    }

    return field;

ERR_DUP_VALUE:
    free(field);
ERR_MALLOC:
    return NULL;
}