static int replace_filter(DnfSack *sack, struct _Filter **fp, int keyname, int cmp_type, const char *match) { if (*fp == NULL) *fp = filter_create(1); else filter_reinit(*fp, 1); struct _Filter *f = *fp; f->keyname = keyname; f->cmp_type = cmp_type; if (keyname == HY_PKG_PROVIDES && cmp_type != HY_GLOB) { f->match_type = _HY_RELDEP; DnfReldep *reldep = reldep_from_str (sack, match); if (reldep == NULL) { filter_free(*fp); *fp = NULL; return DNF_ERROR_BAD_SELECTOR; } f->matches[0].reldep = reldep; return 0; } f->match_type = _HY_STR; f->matches[0].str = g_strdup(match); return 0; }
static int reldep_init(_ReldepObject *self, PyObject *args, PyObject *kwds) { PyObject *sack; const char *reldep_str = NULL; PyObject *tmp_py_str = NULL; PyObject *reldep_str_py = NULL; if (!PyArg_ParseTuple(args, "O!O", &sack_Type, &sack, &reldep_str_py)) return -1; DnfSack *csack = sackFromPyObject(sack); if (csack == NULL) return -1; reldep_str = pycomp_get_string(reldep_str_py, &tmp_py_str); if (reldep_str == NULL) return -1; self->reldep = reldep_from_str (csack, reldep_str); if (self->reldep == NULL) { PyErr_Format(HyExc_Value, "Wrong reldep format: %s", reldep_str); Py_XDECREF(tmp_py_str); return -1; } Py_XDECREF(tmp_py_str); return 0; }