Beispiel #1
0
/*! CLI generic callback printing the variable vector and argument
 */
int
callback(cligen_handle handle, cvec *cvv, cvec *argv)
{
    int     i = 1;
    cg_var *cv;
    char    buf[64];

    fprintf(stderr, "function: %s\n", cligen_fn_str_get(handle));
    fprintf(stderr, "variables:\n");
    cv = NULL;
    while ((cv = cvec_each1(cvv, cv)) != NULL) {
	cv2str(cv, buf, sizeof(buf)-1);
	fprintf(stderr, "\t%d name:%s type:%s value:%s\n", 
		i++, 
		cv_name_get(cv),
		cv_type2str(cv_type_get(cv)),
		buf
	    );
    }
    if (argv){
	    cv = NULL;
	    i=0;
	    while ((cv = cvec_each(argv, cv)) != NULL) {
		cv2str(cv, buf, sizeof(buf)-1);
		fprintf(stderr, "arg %d: %s\n", i++, buf);
	    }
	}
    return 0;
}
Beispiel #2
0
/*
 * This is a generic callback printing the variable vector and argument
 */
int
cb(cligen_handle h, cvec *vars, cg_var *arg)
{
    int i=1;
    cg_var *cv;
    char buf[64];

    fprintf(stderr, "variables:\n");
    cv = NULL;
    while ((cv = cvec_each1(vars, cv)) != NULL) {
        cv2str(cv, buf, sizeof(buf)-1);
        fprintf(stderr, "\t%d name:%s type:%s value:%s\n", 
                i, 
                cv_name_get(cv),
                cv_type2str(cv_type_get(cv)),
                buf
            );

    }
    if (arg){
        cv2str(arg, buf, sizeof(buf)-1);
        fprintf(stderr, "argument: %s\n", buf);
    }
    return 0;
}
Beispiel #3
0
static PyObject *
_CgVar_type_set(CgVar *self, PyObject *args)
{
    enum cv_type type;
    cg_var *cv;

    assert(self->cv);

    if (!PyArg_ParseTuple(args, "i", &type))
        return NULL;

    if (type != cv_type_get(self->cv)) {
	
	/* Clean-up by creating new cg_var and free old */
	if ((cv = cv_new(type)) == NULL || 
	    (cv_name_get(self->cv) && !cv_name_set(cv, cv_name_get(self->cv)))){
	    PyErr_SetString(PyExc_MemoryError, "cv_new");
	    return NULL;
	}
	cv_free(self->cv);
	self->cv = cv;
    }
    
    return PyLong_FromLong(type);
}
Beispiel #4
0
static PyObject *
_CgVar_type_get(CgVar *self)
{
    assert(self->cv);

    return PyLong_FromLong(cv_type_get(self->cv));
}
Beispiel #5
0
/*! Append a new var that is a clone of data in 'var' to the vector, return it
 * @param[in] cvv  Cligen variable vector
 * @param[in] cv   Append this cligen variable to vector. Note that it is copied.
 * @retval    NULL Error
 * @retval    tail Return the new last tail variable (copy of cv)
 */
cg_var *
cvec_append_var(cvec   *cvv, 
		cg_var *cv)
{
    cg_var *tail = NULL;

    if (cvv && cv && (tail = cvec_add(cvv, cv_type_get(cv)))) {
        if (cv_cp(tail, cv) < 0) {
            cvec_del(cvv, tail);
            tail = NULL;
        }
    }
    return tail;
}
Beispiel #6
0
static int
CgVar_type_verify(CgVar *self, enum cv_type type)
{
    if (self->cv == NULL) {
        PyErr_SetString(PyExc_AttributeError, "cv");
        return -1;
    }
    if (cv_type_get(self->cv) != type) {
        PyErr_SetString(PyExc_TypeError, "invalid type");
        return -1;
    }
    
    return 0;
}
Beispiel #7
0
static PyObject *
_CgVar_type2str(CgVar *self, PyObject *args)
{
    enum cv_type type = CGV_ERR;

    if (!PyArg_ParseTuple(args, "|i", &type)) {
	if (self->cv == NULL) {
	    PyErr_SetString(PyExc_AttributeError, "cv");
	    return NULL;
	}
    } 
    if (type == CGV_ERR)
	type = cv_type_get(self->cv);    

    return StringFromString(cv_type2str(type));
}