Exemplo n.º 1
0
static int
ucli_vargparse_type__(ucli_context_t* uc,
                      char c, char* type, const char* arg,
                      aim_va_list_t* vargs)
{
    int rv;
    aim_datatype_t* dt;

    if(arg == NULL) {
        return UCLI_STATUS_E_ARG;
    }

    if(type && type[0] == '%') {
        /* Immediate string specified. The argument must be that string. */
        if(type[1] == 0) {
            /* No string */
            return UCLI_STATUS_E_INTERNAL;
        }
        if(!UCLI_STRCMP(type+1, arg)) {
            return UCLI_STATUS_OK;
        }
        ucli_error(uc, "expected '%s', not '%s'", type+1, arg);
        return UCLI_STATUS_E_ARG;
    }

    dt = aim_datatype_find(c, type);
    if(dt == NULL) {
        /* Unrecognized type */
        ucli_error(uc, "<bug: no handler for type '%c:%s'>", (c) ? c : '.', (type) ? type : "[NULL]");
        AIM_LOG_ERROR("bug: no handler for type '%c:%s'", (c) ? c : '.', (type) ? type : "[NULL]");
        return UCLI_STATUS_E_INTERNAL;
    }

    {
        aim_datatype_context_t dtc;
        dtc.dt = dt;
        dtc.epvs = &uc->pvs;
        rv = dt->from_str(&dtc, arg, vargs);
    }


    if( (rv < 0) && dt->desc) {
        ucli_e_arg(uc, arg, dt->desc);
    }
    return rv;
}
Exemplo n.º 2
0
int
aim_datatype_register_struct(aim_datatype_t* dt)
{
    __aim_datatype_t* ndt = NULL;

    if( (dt == NULL) || (dt->c == 0 && dt->type == NULL) ||
        (dt->from_str == NULL && dt->to_str == NULL) ) {
        return -1;
    }

    if(aim_datatype_find(dt->c, dt->type) != NULL) {
        return -1;
    }

    ndt = aim_zmalloc(sizeof(*ndt));
    ndt->dt = *dt;
    list_push(&aim_datatype_list__, &ndt->links);
    return 0;
}
Exemplo n.º 3
0
int
aim_avsparse_type(const char* arg, aim_pvs_t* epvs,
                  char c, char* type, aim_va_list_t* vargs)
{
    int rv;
    aim_datatype_t* dt;
    aim_datatype_context_t dtc;

    if(arg == NULL) {
        return AIM_ERROR_PARAM;
    }

    if(type && type[0] == '%') {
        /* Immediate string specified. The argument must be that string. */
        if(type[1] == 0) {
            /* No string */
            return AIM_ERROR_PARAM;
        }
        if(!AIM_STRCMP(type+1, arg)) {
            return AIM_ERROR_NONE;
        }
        aim_printf(epvs, "expected '%s', not '%s'\n", type+1, arg);
        return AIM_ERROR_PARAM;
    }

    dt = aim_datatype_find(c, type);
    if(dt == NULL) {
        /* Unrecognized type */
        aim_printf(epvs, "<bug: no handler for type '%c:%s'>\n", (c) ? c : '.', (type) ? type : "[NULL]");
        return AIM_ERROR_NOT_FOUND;
    }

    dtc.dt = dt;
    dtc.epvs = epvs;
    rv = dt->from_str(&dtc, arg, vargs);

    if( (rv < 0) && dt->desc) {
        aim_printf(epvs, "'%s' is not a valid %s\n", arg, dt->desc);
    }
    return rv;
}