int main( int argc, char **argv ) { rpmmi mi; Header h; int_32 type, count; char *name; rpmdb db; rpmReadConfigFiles( NULL, NULL ); if( rpmdbOpen( "", &db, O_RDONLY, 0644 ) != 0 ) { fprintf( stderr, "cannot open database!\n" ); exit(EXIT_FAILURE); } mi = rpmmiInit(db, RPMDBI_PACKAGES, NULL, 0); while ((h = rpmmiNext(mi)) != NULL) { headerGetEntry( h, RPMTAG_NAME, &type, (void**)&name, &count ); if( strcmp(name,argv[1]) == 0 ) headerDump( h, stdout, HEADER_DUMP_INLINE, rpmTagTable ); /* * Note that the header reference is "owned" by the iterator, * so no headerFree() is necessary. */ } mi = rpmmiFree(mi); rpmdbClose( db ); return 0; }
void RpmTransaction::init() { if (m_initialized) return; rpmReadConfigFiles(NULL, NULL); if (rpmdbOpen("", &m_db, O_RDWR, 0644) != 0)//FIXME:root directory; RPMSTOP("rpmdbOpen()"); m_ts = rpmtransCreateSet(m_db, "");//FIXME:root directory; m_initialized = 1; }
DEEPSOLVER_BEGIN_NAMESPACE void RpmTransaction::init() { if (m_initialized) return; rpmReadConfigFiles(NULL, NULL); if (rpmdbOpen("", &m_db, O_RDWR, 0644) != 0)//FIXME:root directory; throw PkgBackEndException("rpmdbOpen()"); m_ts = rpmtransCreateSet(m_db, "");//FIXME:root directory; m_initialized = 1; }
/* * The package database is opened, but transactional processing * (@see RPM::DB#transaction) cannot be done for when +writable+ is false. * When +writable+ is +false+ then the generated object gets freezed. * @param [Boolean] writable Whether the database is writable. Default is +false+. * @param [String] root Root path for the database, default is empty. * @return [RPM::DB] * * @example * db = RPM::DB.open * db.each do |pkg| * puts pkg.name * end */ static VALUE db_s_open(int argc, VALUE* argv, VALUE obj) { VALUE db; rpm_db_t* rdb; int writable = 0; const char* root = ""; switch (argc) { case 0: break; case 1: writable = RTEST(argv[0]); break; case 2: if (!NIL_P(argv[1])) { if (TYPE(argv[1]) != T_STRING) { rb_raise(rb_eTypeError, "illegal argument type"); } root = RSTRING_PTR(argv[1]); } writable = RTEST(argv[0]); break; default: rb_raise(rb_eArgError, "too many argument(0..2)"); } rdb = ALLOC_N(rpm_db_t,1); if (rpmdbOpen(root, &(rdb->db), writable ? O_RDWR | O_CREAT : O_RDONLY, 0644)) { free(rdb); rb_raise(rb_eRuntimeError, "can not open database in %s", RSTRING_PTR(rb_str_concat(rb_str_new2(root), rb_str_new2("/var/lib/rpm")))); } rdb->ref_count = 0; db_ref(rdb); db = Data_Wrap_Struct(rpm_cDB, NULL, db_free, rdb); if (!writable) { rb_obj_freeze(db); } return db; }
int rpmtsOpenDB(rpmts ts, int dbmode) { int rc = 0; if (ts->rdb != NULL && ts->dbmode == dbmode) return 0; (void) rpmtsCloseDB(ts); /* XXX there's a potential db lock race here. */ ts->dbmode = dbmode; rc = rpmdbOpen(ts->rootDir, &ts->rdb, ts->dbmode, 0644); if (rc) { char * dn = rpmGetPath(ts->rootDir, "%{_dbpath}", NULL); rpmlog(RPMLOG_ERR, _("cannot open Packages database in %s\n"), dn); free(dn); } return rc; }
void Init_HR_SWInst(void) { SWI_t *swi = &_myswi; /* XXX static for now */ swi->swi_index = 0; #ifdef HAVE_LIBRPM if (swi->swi_rpmdb != NULL) return; if (rpmdbOpen("", &swi->swi_rpmdb, O_RDONLY, 0644) != 0) swi->swi_index = -1; Check_HRSW_cache(swi); #else if (swi->swi_directory != NULL) { if (swi->swi_dp != NULL) { closedir(swi->swi_dp); swi->swi_dp = NULL; } if ((swi->swi_dp = opendir(swi->swi_directory)) == NULL) swi->swi_index = -1; } else swi->swi_index = -1; #endif }