Example #1
0
File: mire.c Project: avokhmin/RPM5
/*@-onlytrans@*/	/* XXX miRE array, not refcounted. */
int mireAppend(rpmMireMode mode, int tag, const char * pattern,
		const unsigned char * table, miRE * mirep, int * nmirep)
{
    miRE mire;
    int xx;

    if (*mirep == NULL) {
	(*mirep) = mireGetPool(_mirePool);
	mire = (*mirep);
    } else {
	void *use =  (*mirep)->_item.use;
	void *pool = (*mirep)->_item.pool;

	/* XXX only the 1st element in the array has a usage mutex. */
	(*mirep) = xrealloc((*mirep), ((*nmirep) + 1) * sizeof(*mire));
	mire = (*mirep) + (*nmirep);
	memset(mire, 0, sizeof(*mire));
        /* XXX ensure no segfault, copy the use/pool from 1st item. */
/*@-assignexpose@*/
        mire->_item.use = use;
        mire->_item.pool = pool;
/*@=assignexpose@*/
    }

    (*nmirep)++;
    xx = mireSetCOptions(mire, mode, tag, 0, table);
/*@-usereleased@*/
    return mireRegcomp(mire, pattern);
/*@=usereleased@*/
}
Example #2
0
static rpmRC tagValidate(Spec spec, rpmTag tag, const char * value)
	/*@*/
{
    const char * tagN = tagName(tag);
    const char * pattern = rpmExpand("%{?pattern_", tagN, "}", NULL);
    rpmRC ec = RPMRC_OK;

    if (pattern && *pattern) {
	miRE mire;
	int xx;

	mire = mireNew(RPMMIRE_REGEX, tag);
	xx = mireSetCOptions(mire, RPMMIRE_REGEX, 0, 0, NULL);
	if (!xx)
	    xx = mireRegcomp(mire, pattern);
	if (!xx)
	    xx = mireRegexec(mire, value, strlen(value));
	if (!xx)
	    ec = RPMRC_OK;
	else {
	    rpmlog(RPMLOG_ERR, _("line %d: invalid tag value(\"%s\") %s: %s\n"),
		    spec->lineNum, pattern, tagN, spec->line);
	    ec = RPMRC_FAIL;
	}

	mire = mireFree(mire);
    }

    pattern = _free(pattern);

    return ec;
}
Example #3
0
static void compileFiletriggersRegexp(/*@only@*/ char * raw, miRE mire)
	/*@modifies raw, mire @*/
{
    static int options = REG_NOSUB | REG_EXTENDED | REG_NEWLINE;
    int xx;

    xx = mireSetCOptions(mire, RPMMIRE_REGEX, 0, options, NULL);

    if (mireRegcomp(mire, raw) != 0) {
	rpmlog(RPMLOG_ERR, "failed to compile filetrigger filter: %s\n", raw);
	mire = mireFree(mire);
    }
    raw = _free(raw);
}