Perl-RPM

 view release on metacpan or  search on metacpan

RPM/Database.xs  view on Meta::CPAN

    const char *name;
    PROTOTYPE: $$
    CODE:
    RETVAL = rpmdb_FETCH(aTHX_ self, name);
    OUTPUT:
    RETVAL

int
rpmdb_STORE(self=NULL, key=NULL, value=NULL)
    SV* self;
    SV* key;
    SV* value;
    PROTOTYPE: $$$
    CODE:
    {
        rpmError(RPMERR_NOCREATEDB, "STORE: operation not permitted");
        RETVAL = 0;
    }
    OUTPUT:
        RETVAL

SV*
rpmdb_DELETE(self=NULL, key=NULL)
    SV* self;
    SV* key;
    PROTOTYPE: $$
    CODE:
    {
        rpmError(RPMERR_NOCREATEDB, "DELETE: operation not permitted");
        RETVAL = Nullsv;
    }
    OUTPUT:
    RETVAL

int
rpmdb_CLEAR(self=NULL)
    SV* self;
    PROTOTYPE: $
    CODE:
    {
        rpmError(RPMERR_NOCREATEDB, "CLEAR: operation not permitted");
        RETVAL = 0;
    }
    OUTPUT:
    RETVAL

bool
rpmdb_EXISTS(self, name)
    RPM::Database self;
    const char *name;
    PROTOTYPE: $$
    CODE:
    RETVAL = rpmdb_EXISTS(aTHX_ self, name);
    OUTPUT:
    RETVAL

void
rpmdb_FIRSTKEY(self)
    RPM::Database self;
    PROTOTYPE: $
    PPCODE:
    {
        const char *name;
        RPM__Header hdr;

        if (rpmdb_FIRSTKEY(aTHX_ self, &name, &hdr))
        {
            EXTEND(SP, 2);
            PUSHs(sv_2mortal(rpm_ptr2hvref(aTHX_ hdr, "RPM::Header")));
            PUSHs(sv_2mortal(newSVpv(name, 0)));
        }

    }

void
rpmdb_NEXTKEY(self, prev_name=NULL)
    RPM::Database self;
    const char *prev_name;
    PROTOTYPE: $;$
    PPCODE:
    {
        const char *name;
        RPM__Header hdr;

        if (rpmdb_NEXTKEY(aTHX_ self, prev_name, &name, &hdr))
        {
            EXTEND(SP, 2);
            PUSHs(sv_2mortal(rpm_ptr2hvref(aTHX_ hdr, "RPM::Header")));
            PUSHs(sv_2mortal(newSVpv(name, 0)));
        }

    }

void
rpmdb_DESTROY(self)
    RPM::Database self;
    PROTOTYPE: $
    CODE:
    rpmdb_DESTROY(aTHX_ self);

bool
rpmdb_init(class, root=NULL, perms=O_RDWR)
    SV* class;
    const char* root;
    int perms;
    PROTOTYPE: $;$$
    CODE:
    if (SvPOK(class) && strEQ(SvPV_nolen(class), "RPM::Database"))
        RETVAL = !rpmdbInit(root, perms);
    else {
        rpmError(RPMERR_BADARG, "%s must be called as a static method",
                                "RPM::Database::init");
        RETVAL = FALSE;
    }
    OUTPUT:
    RETVAL

bool
rpmdb_rebuild(class, root=NULL)
    SV* class;
    const char* root;
    PROTOTYPE: $;$
    CODE:
    if (SvPOK(class) && strEQ(SvPV_nolen(class), "RPM::Database"))
#if RPM_VERSION >= 0x040100
        RETVAL = !rpmdbRebuild(root, NULL, NULL);
#else
        RETVAL = !rpmdbRebuild(root);
#endif
    else {
        rpmError(RPMERR_BADARG, "%s must be called as a static method",
                                "RPM::Database::rebuild");
        RETVAL = FALSE;
    }
    OUTPUT:
    RETVAL

void
rpmdb_find_by_file(self, string)
    RPM::Database self;
    SV *string;
    PROTOTYPE: $$
    ALIAS:
        find_by_group = RPMTAG_GROUP
        find_what_provides = RPMTAG_PROVIDENAME
        find_what_requires = RPMTAG_REQUIRENAME
        find_what_conflicts = RPMTAG_CONFLICTNAME
        find_by_package = RPMTAG_NAME
    PPCODE:
    /* This is a front-end to all the rpmdbFindBy*() set, including FindByPackage
       which differs from FETCH above in that if there is actually more than one
       match, all will be returned.  */
    {
        const char *str = Nullch;
        RPM_Header *hdr;

        if (ix == 0)
            ix = RPMTAG_BASENAMES;

        hdr = rpm_hvref2ptr(aTHX_ string, "RPM::Header");
        if (hdr)
            str = hdr->name;
        else
            str = SvPV_nolen(string);

        if (! (str && *str)) {
            rpmError(RPMERR_BADARG, "%s: arg 2 must be either a string"
                     " or valid RPM::Header object", GvNAME(CvGV(cv)));
        /*  Perl_warn(aTHX_ "%s", SvPV_nolen(rpm_errSV)); */
        }
        else {
            rpmdbMatchIterator mi = rpmdbInitIterator(self->dbp, ix, str, 0);
            if (mi) {
                Header h;
                int n = rpmdbGetIteratorCount(mi);
                EXTEND(SP, n);
                while ((h = rpmdbNextIterator(mi)) != Null(Header)) {
                    h = headerLink(h);
                    hdr = rpmhdr_TIEHASH_header(aTHX_ h);
                    PUSHs(sv_2mortal(rpm_ptr2hvref(aTHX_ hdr, "RPM::Header")));
                }
                rpmdbFreeIterator(mi);
            }
        }
    }



( run in 0.865 second using v1.01-cache-2.11-cpan-5511b514fd6 )