/*! 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; }
/* * 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; }
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); }
static PyObject * _CgVar_type_get(CgVar *self) { assert(self->cv); return PyLong_FromLong(cv_type_get(self->cv)); }
/*! 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; }
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; }
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)); }