rpm
4.5
|
00001 00005 #include "system.h" 00006 00007 #include <rpmio_internal.h> 00008 #include <rpmcli.h> /* XXX for rpmCheckSig */ 00009 #include <rpmdb.h> 00010 #include <rpmsq.h> 00011 00012 #include "legacy.h" 00013 #include "misc.h" 00014 #include "header_internal.h" 00015 00016 #include "header-py.h" 00017 #include "rpmal-py.h" 00018 #include "rpmds-py.h" 00019 #include "rpmfd-py.h" 00020 #include "rpmfts-py.h" 00021 #include "rpmfi-py.h" 00022 #include "rpmmi-py.h" 00023 #include "rpmps-py.h" 00024 #include "rpmrc-py.h" 00025 #include "rpmte-py.h" 00026 #include "rpmts-py.h" 00027 #include "spec-py.h" 00028 00029 #include "debug.h" 00030 00031 #ifdef __LCLINT__ 00032 #undef PyObject_HEAD 00033 #define PyObject_HEAD int _PyObjectHead 00034 #endif 00035 00040 00043 PyObject * pyrpmError; 00044 00045 extern sigset_t rpmsqCaught; 00046 00047 #if PY_VERSION_HEX < 0x02050000 00048 typedef int Py_ssize_t; 00049 #endif 00050 00051 00054 static PyObject * expandMacro(PyObject * self, PyObject * args, PyObject * kwds) 00055 { 00056 char * macro; 00057 00058 if (!PyArg_ParseTuple(args, "s", ¯o)) 00059 return NULL; 00060 00061 return Py_BuildValue("s", rpmExpand(macro, NULL)); 00062 } 00063 00066 static PyObject * archScore(PyObject * s, PyObject * args, 00067 PyObject * kwds) 00068 { 00069 char * arch; 00070 char * platform; 00071 int score; 00072 char * kwlist[] = {"arch", NULL}; 00073 00074 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist, &arch)) 00075 return NULL; 00076 00077 platform = rpmExpand(arch, "-", "%{_vendor}", "-", "%{_os}", NULL); 00078 score = rpmPlatformScore(platform, NULL, 0); 00079 platform = _free(platform); 00080 00081 return Py_BuildValue("i", score); 00082 } 00083 00086 static PyObject * platformScore(PyObject * s, PyObject * args, 00087 PyObject * kwds) 00088 { 00089 char * platform; 00090 int score; 00091 char * kwlist[] = {"platform", NULL}; 00092 00093 if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist, &platform)) 00094 return NULL; 00095 00096 score = rpmPlatformScore(platform, NULL, 0); 00097 00098 return Py_BuildValue("i", score); 00099 } 00100 00103 static PyObject * signalsCaught(PyObject * self, PyObject * check) 00104 { 00105 PyObject *caught, *o; 00106 Py_ssize_t llen; 00107 int signum, i; 00108 sigset_t newMask, oldMask; 00109 00110 if (!PyList_Check(check)) { 00111 PyErr_SetString(PyExc_TypeError, "list expected"); 00112 return NULL; 00113 } 00114 00115 llen = PyList_Size(check); 00116 caught = PyList_New(0); 00117 00118 /* block signals while checking for them */ 00119 (void) sigfillset(&newMask); 00120 (void) sigprocmask(SIG_BLOCK, &newMask, &oldMask); 00121 00122 for (i = 0; i < llen; i++) { 00123 o = PyList_GetItem(check, i); 00124 signum = PyInt_AsLong(o); 00125 if (sigismember(&rpmsqCaught, signum)) { 00126 PyList_Append(caught, o); 00127 } 00128 } 00129 (void) sigprocmask(SIG_SETMASK, &oldMask, NULL); 00130 00131 return caught; 00132 } 00133 00136 static PyObject * checkSignals(PyObject * self, PyObject * args) 00137 { 00138 if (!PyArg_ParseTuple(args, ":checkSignals")) return NULL; 00139 rpmdbCheckSignals(); 00140 Py_INCREF(Py_None); 00141 return Py_None; 00142 } 00143 00146 static PyObject * setLogFile (PyObject * self, PyObject * args, PyObject *kwds) 00147 { 00148 PyObject * fop = NULL; 00149 FILE * fp = NULL; 00150 char * kwlist[] = {"fileObject", NULL}; 00151 00152 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:logSetFile", kwlist, &fop)) 00153 return NULL; 00154 00155 if (fop) { 00156 if (!PyFile_Check(fop)) { 00157 PyErr_SetString(pyrpmError, "requires file object"); 00158 return NULL; 00159 } 00160 fp = PyFile_AsFile(fop); 00161 } 00162 00163 (void) rpmlogSetFile(fp); 00164 00165 Py_INCREF(Py_None); 00166 return (PyObject *) Py_None; 00167 } 00168 00171 static PyObject * 00172 setVerbosity (PyObject * self, PyObject * args, PyObject *kwds) 00173 { 00174 int level; 00175 char * kwlist[] = {"level", NULL}; 00176 00177 if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", kwlist, &level)) 00178 return NULL; 00179 00180 rpmSetVerbosity(level); 00181 00182 Py_INCREF(Py_None); 00183 return (PyObject *) Py_None; 00184 } 00185 00188 static PyObject * 00189 setEpochPromote (PyObject * self, PyObject * args, PyObject * kwds) 00190 { 00191 char * kwlist[] = {"promote", NULL}; 00192 00193 if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", kwlist, 00194 &_rpmds_nopromote)) 00195 return NULL; 00196 00197 Py_INCREF(Py_None); 00198 return (PyObject *) Py_None; 00199 } 00200 00203 static PyObject * setStats (PyObject * self, PyObject * args, PyObject * kwds) 00204 { 00205 char * kwlist[] = {"stats", NULL}; 00206 00207 if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", kwlist, &_rpmts_stats)) 00208 return NULL; 00209 00210 Py_INCREF(Py_None); 00211 return (PyObject *) Py_None; 00212 } 00217 static PyMethodDef rpmModuleMethods[] = { 00218 { "TransactionSet", (PyCFunction) rpmts_Create, METH_VARARGS|METH_KEYWORDS, 00219 "rpm.TransactionSet([rootDir, [db]]) -> ts\n\ 00220 - Create a transaction set.\n" }, 00221 00222 #if Py_TPFLAGS_HAVE_ITER /* XXX backport to python-1.5.2 */ 00223 { "newrc", (PyCFunction) rpmrc_Create, METH_VARARGS|METH_KEYWORDS, 00224 NULL }, 00225 #endif 00226 { "addMacro", (PyCFunction) rpmrc_AddMacro, METH_VARARGS|METH_KEYWORDS, 00227 NULL }, 00228 { "delMacro", (PyCFunction) rpmrc_DelMacro, METH_VARARGS|METH_KEYWORDS, 00229 NULL }, 00230 { "expandMacro", (PyCFunction) expandMacro, METH_VARARGS|METH_KEYWORDS, 00231 NULL }, 00232 00233 { "archscore", (PyCFunction) archScore, METH_VARARGS|METH_KEYWORDS, 00234 NULL }, 00235 { "platformscore", (PyCFunction) platformScore, METH_VARARGS|METH_KEYWORDS, 00236 NULL }, 00237 00238 { "signalsCaught", (PyCFunction) signalsCaught, METH_O, 00239 NULL }, 00240 { "checkSignals", (PyCFunction) checkSignals, METH_VARARGS, 00241 NULL }, 00242 00243 { "headerLoad", (PyCFunction) hdrLoad, METH_VARARGS|METH_KEYWORDS, 00244 NULL }, 00245 { "mergeHeaderListFromFD", (PyCFunction) rpmMergeHeadersFromFD, METH_VARARGS|METH_KEYWORDS, 00246 NULL }, 00247 { "readHeaderListFromFD", (PyCFunction) rpmHeaderFromFD, METH_VARARGS|METH_KEYWORDS, 00248 NULL }, 00249 { "readHeaderListFromFile", (PyCFunction) rpmHeaderFromFile, METH_VARARGS|METH_KEYWORDS, 00250 NULL }, 00251 { "readHeaderFromFD", (PyCFunction) rpmSingleHeaderFromFD, METH_VARARGS|METH_KEYWORDS, 00252 NULL }, 00253 00254 { "setLogFile", (PyCFunction) setLogFile, METH_VARARGS|METH_KEYWORDS, 00255 NULL }, 00256 00257 { "versionCompare", (PyCFunction) versionCompare, METH_VARARGS|METH_KEYWORDS, 00258 NULL }, 00259 { "labelCompare", (PyCFunction) labelCompare, METH_VARARGS|METH_KEYWORDS, 00260 NULL }, 00261 { "setVerbosity", (PyCFunction) setVerbosity, METH_VARARGS|METH_KEYWORDS, 00262 NULL }, 00263 { "setEpochPromote", (PyCFunction) setEpochPromote, METH_VARARGS|METH_KEYWORDS, 00264 NULL }, 00265 { "setStats", (PyCFunction) setStats, METH_VARARGS|METH_KEYWORDS, 00266 NULL }, 00267 00268 { "dsSingle", (PyCFunction) rpmds_Single, METH_VARARGS|METH_KEYWORDS, 00269 "rpm.dsSingle(TagN, N, [EVR, [Flags]] -> ds\n\ 00270 - Create a single element dependency set.\n" }, 00271 { NULL } 00272 } ; 00273 00274 /* 00275 * Force clean up of open iterators and dbs on exit. 00276 */ 00277 static void rpm_exithook(void) 00278 { 00279 rpmdbCheckTerminate(1); 00280 } 00281 00284 static char rpm__doc__[] = 00285 ""; 00286 00287 void init_rpm(void); /* XXX eliminate gcc warning */ 00290 void init_rpm(void) 00291 { 00292 PyObject * d, *o, * tag = NULL, * dict; 00293 int i; 00294 const struct headerSprintfExtension_s * extensions = rpmHeaderFormats; 00295 struct headerSprintfExtension_s * ext; 00296 PyObject * m; 00297 00298 #if Py_TPFLAGS_HAVE_ITER /* XXX backport to python-1.5.2 */ 00299 if (PyType_Ready(&hdr_Type) < 0) return; 00300 if (PyType_Ready(&rpmal_Type) < 0) return; 00301 if (PyType_Ready(&rpmds_Type) < 0) return; 00302 if (PyType_Ready(&rpmfd_Type) < 0) return; 00303 if (PyType_Ready(&rpmfts_Type) < 0) return; 00304 if (PyType_Ready(&rpmfi_Type) < 0) return; 00305 if (PyType_Ready(&rpmmi_Type) < 0) return; 00306 if (PyType_Ready(&rpmps_Type) < 0) return; 00307 00308 rpmrc_Type.tp_base = &PyDict_Type; 00309 if (PyType_Ready(&rpmrc_Type) < 0) return; 00310 00311 if (PyType_Ready(&rpmte_Type) < 0) return; 00312 if (PyType_Ready(&rpmts_Type) < 0) return; 00313 if (PyType_Ready(&spec_Type) < 0) return; 00314 #endif 00315 00316 m = Py_InitModule3("_rpm", rpmModuleMethods, rpm__doc__); 00317 if (m == NULL) 00318 return; 00319 00320 /* 00321 * treat error to register rpm cleanup hook as fatal, tracebacks 00322 * can and will leave stale locks around if we can't clean up 00323 */ 00324 if (Py_AtExit(rpm_exithook) == -1) 00325 return; 00326 00327 rpmReadConfigFiles(NULL, NULL); 00328 00329 d = PyModule_GetDict(m); 00330 00331 #ifdef HACK 00332 pyrpmError = PyString_FromString("_rpm.error"); 00333 PyDict_SetItemString(d, "error", pyrpmError); 00334 Py_DECREF(pyrpmError); 00335 #else 00336 pyrpmError = PyErr_NewException("_rpm.error", NULL, NULL); 00337 if (pyrpmError != NULL) 00338 PyDict_SetItemString(d, "error", pyrpmError); 00339 #endif 00340 00341 #if Py_TPFLAGS_HAVE_ITER /* XXX backport to python-1.5.2 */ 00342 Py_INCREF(&hdr_Type); 00343 PyModule_AddObject(m, "hdr", (PyObject *) &hdr_Type); 00344 00345 Py_INCREF(&rpmal_Type); 00346 PyModule_AddObject(m, "al", (PyObject *) &rpmal_Type); 00347 00348 Py_INCREF(&rpmds_Type); 00349 PyModule_AddObject(m, "ds", (PyObject *) &rpmds_Type); 00350 00351 Py_INCREF(&rpmfd_Type); 00352 PyModule_AddObject(m, "fd", (PyObject *) &rpmfd_Type); 00353 00354 Py_INCREF(&rpmfts_Type); 00355 PyModule_AddObject(m, "fts", (PyObject *) &rpmfts_Type); 00356 00357 Py_INCREF(&rpmfi_Type); 00358 PyModule_AddObject(m, "fi", (PyObject *) &rpmfi_Type); 00359 00360 Py_INCREF(&rpmmi_Type); 00361 PyModule_AddObject(m, "mi", (PyObject *) &rpmmi_Type); 00362 00363 Py_INCREF(&rpmps_Type); 00364 PyModule_AddObject(m, "ps", (PyObject *) &rpmps_Type); 00365 00366 Py_INCREF(&rpmrc_Type); 00367 PyModule_AddObject(m, "rc", (PyObject *) &rpmrc_Type); 00368 00369 Py_INCREF(&rpmte_Type); 00370 PyModule_AddObject(m, "te", (PyObject *) &rpmte_Type); 00371 00372 Py_INCREF(&rpmts_Type); 00373 PyModule_AddObject(m, "ts", (PyObject *) &rpmts_Type); 00374 00375 Py_INCREF(&spec_Type); 00376 PyModule_AddObject(m, "spec", (PyObject *) &spec_Type); 00377 #else 00378 hdr_Type.ob_type = &PyType_Type; 00379 rpmal_Type.ob_type = &PyType_Type; 00380 rpmds_Type.ob_type = &PyType_Type; 00381 rpmfd_Type.ob_type = &PyType_Type; 00382 rpmfts_Type.ob_type = &PyType_Type; 00383 rpmfi_Type.ob_type = &PyType_Type; 00384 rpmmi_Type.ob_type = &PyType_Type; 00385 rpmps_Type.ob_type = &PyType_Type; 00386 rpmte_Type.ob_type = &PyType_Type; 00387 rpmts_Type.ob_type = &PyType_Type; 00388 spec_Type.ob_type = &PyType_Type; 00389 #endif 00390 00391 dict = PyDict_New(); 00392 00393 for (i = 0; i < rpmTagTableSize; i++) { 00394 tag = PyInt_FromLong(rpmTagTable[i].val); 00395 PyDict_SetItemString(d, (char *) rpmTagTable[i].name, tag); 00396 Py_DECREF(tag); 00397 PyDict_SetItem(dict, tag, o=PyString_FromString(rpmTagTable[i].name + 7)); 00398 Py_DECREF(o); 00399 } 00400 00401 while (extensions->name) { 00402 if (extensions->type == HEADER_EXT_TAG) { 00403 ext = extensions; 00404 PyDict_SetItemString(d, (char *) extensions->name, o=PyCObject_FromVoidPtr(ext, NULL)); 00405 Py_DECREF(o); 00406 PyDict_SetItem(dict, tag, o=PyString_FromString(ext->name + 7)); 00407 Py_DECREF(o); 00408 } 00409 extensions++; 00410 } 00411 00412 PyDict_SetItemString(d, "tagnames", dict); 00413 Py_DECREF(dict); 00414 00415 00416 #define REGISTER_ENUM(val) \ 00417 PyDict_SetItemString(d, #val, o=PyInt_FromLong( val )); \ 00418 Py_DECREF(o); 00419 00420 REGISTER_ENUM(RPMFILE_STATE_NORMAL); 00421 REGISTER_ENUM(RPMFILE_STATE_REPLACED); 00422 REGISTER_ENUM(RPMFILE_STATE_NOTINSTALLED); 00423 REGISTER_ENUM(RPMFILE_STATE_NETSHARED); 00424 REGISTER_ENUM(RPMFILE_STATE_WRONGCOLOR); 00425 00426 REGISTER_ENUM(RPMFILE_CONFIG); 00427 REGISTER_ENUM(RPMFILE_DOC); 00428 REGISTER_ENUM(RPMFILE_ICON); 00429 REGISTER_ENUM(RPMFILE_MISSINGOK); 00430 REGISTER_ENUM(RPMFILE_NOREPLACE); 00431 REGISTER_ENUM(RPMFILE_GHOST); 00432 REGISTER_ENUM(RPMFILE_LICENSE); 00433 REGISTER_ENUM(RPMFILE_README); 00434 REGISTER_ENUM(RPMFILE_EXCLUDE); 00435 REGISTER_ENUM(RPMFILE_UNPATCHED); 00436 REGISTER_ENUM(RPMFILE_PUBKEY); 00437 00438 REGISTER_ENUM(RPMDEP_SENSE_REQUIRES); 00439 REGISTER_ENUM(RPMDEP_SENSE_CONFLICTS); 00440 00441 REGISTER_ENUM(RPMSENSE_LESS); 00442 REGISTER_ENUM(RPMSENSE_GREATER); 00443 REGISTER_ENUM(RPMSENSE_EQUAL); 00444 REGISTER_ENUM(RPMSENSE_NOTEQUAL); 00445 REGISTER_ENUM(RPMSENSE_PREREQ); 00446 00447 REGISTER_ENUM(RPMDEPS_FLAG_NOUPGRADE); 00448 REGISTER_ENUM(RPMDEPS_FLAG_NOREQUIRES); 00449 REGISTER_ENUM(RPMDEPS_FLAG_NOCONFLICTS); 00450 REGISTER_ENUM(RPMDEPS_FLAG_NOOBSOLETES); 00451 REGISTER_ENUM(RPMDEPS_FLAG_NOPARENTDIRS); 00452 REGISTER_ENUM(RPMDEPS_FLAG_NOLINKTOS); 00453 REGISTER_ENUM(RPMDEPS_FLAG_ANACONDA); 00454 REGISTER_ENUM(RPMDEPS_FLAG_NOSUGGEST); 00455 REGISTER_ENUM(RPMDEPS_FLAG_ADDINDEPS); 00456 REGISTER_ENUM(RPMDEPS_FLAG_DEPLOOPS); 00457 00458 REGISTER_ENUM(RPMTRANS_FLAG_TEST); 00459 REGISTER_ENUM(RPMTRANS_FLAG_BUILD_PROBS); 00460 REGISTER_ENUM(RPMTRANS_FLAG_NOSCRIPTS); 00461 REGISTER_ENUM(RPMTRANS_FLAG_JUSTDB); 00462 REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERS); 00463 REGISTER_ENUM(RPMTRANS_FLAG_NODOCS); 00464 REGISTER_ENUM(RPMTRANS_FLAG_ALLFILES); 00465 REGISTER_ENUM(RPMTRANS_FLAG_KEEPOBSOLETE); 00466 REGISTER_ENUM(RPMTRANS_FLAG_REPACKAGE); 00467 REGISTER_ENUM(RPMTRANS_FLAG_NOPRE); 00468 REGISTER_ENUM(RPMTRANS_FLAG_NOPOST); 00469 REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERPREIN); 00470 REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERIN); 00471 REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERUN); 00472 REGISTER_ENUM(RPMTRANS_FLAG_NOPREUN); 00473 REGISTER_ENUM(RPMTRANS_FLAG_NOPOSTUN); 00474 REGISTER_ENUM(RPMTRANS_FLAG_NOTRIGGERPOSTUN); 00475 REGISTER_ENUM(RPMTRANS_FLAG_NOFDIGESTS); 00476 REGISTER_ENUM(RPMTRANS_FLAG_NOCONFIGS); 00477 00478 REGISTER_ENUM(RPMPROB_FILTER_IGNOREOS); 00479 REGISTER_ENUM(RPMPROB_FILTER_IGNOREARCH); 00480 REGISTER_ENUM(RPMPROB_FILTER_REPLACEPKG); 00481 REGISTER_ENUM(RPMPROB_FILTER_FORCERELOCATE); 00482 REGISTER_ENUM(RPMPROB_FILTER_REPLACENEWFILES); 00483 REGISTER_ENUM(RPMPROB_FILTER_REPLACEOLDFILES); 00484 REGISTER_ENUM(RPMPROB_FILTER_OLDPACKAGE); 00485 REGISTER_ENUM(RPMPROB_FILTER_DISKSPACE); 00486 REGISTER_ENUM(RPMPROB_FILTER_DISKNODES); 00487 00488 REGISTER_ENUM(RPMCALLBACK_UNKNOWN); 00489 REGISTER_ENUM(RPMCALLBACK_INST_PROGRESS); 00490 REGISTER_ENUM(RPMCALLBACK_INST_START); 00491 REGISTER_ENUM(RPMCALLBACK_INST_OPEN_FILE); 00492 REGISTER_ENUM(RPMCALLBACK_INST_CLOSE_FILE); 00493 REGISTER_ENUM(RPMCALLBACK_TRANS_PROGRESS); 00494 REGISTER_ENUM(RPMCALLBACK_TRANS_START); 00495 REGISTER_ENUM(RPMCALLBACK_TRANS_STOP); 00496 REGISTER_ENUM(RPMCALLBACK_UNINST_PROGRESS); 00497 REGISTER_ENUM(RPMCALLBACK_UNINST_START); 00498 REGISTER_ENUM(RPMCALLBACK_UNINST_STOP); 00499 REGISTER_ENUM(RPMCALLBACK_REPACKAGE_PROGRESS); 00500 REGISTER_ENUM(RPMCALLBACK_REPACKAGE_START); 00501 REGISTER_ENUM(RPMCALLBACK_REPACKAGE_STOP); 00502 REGISTER_ENUM(RPMCALLBACK_UNPACK_ERROR); 00503 REGISTER_ENUM(RPMCALLBACK_CPIO_ERROR); 00504 00505 REGISTER_ENUM(RPMPROB_BADARCH); 00506 REGISTER_ENUM(RPMPROB_BADOS); 00507 REGISTER_ENUM(RPMPROB_PKG_INSTALLED); 00508 REGISTER_ENUM(RPMPROB_BADRELOCATE); 00509 REGISTER_ENUM(RPMPROB_REQUIRES); 00510 REGISTER_ENUM(RPMPROB_CONFLICT); 00511 REGISTER_ENUM(RPMPROB_NEW_FILE_CONFLICT); 00512 REGISTER_ENUM(RPMPROB_FILE_CONFLICT); 00513 REGISTER_ENUM(RPMPROB_OLDPACKAGE); 00514 REGISTER_ENUM(RPMPROB_DISKSPACE); 00515 REGISTER_ENUM(RPMPROB_DISKNODES); 00516 REGISTER_ENUM(RPMPROB_BADPRETRANS); 00517 00518 REGISTER_ENUM(VERIFY_DIGEST); 00519 REGISTER_ENUM(VERIFY_SIGNATURE); 00520 00521 REGISTER_ENUM(RPMLOG_EMERG); 00522 REGISTER_ENUM(RPMLOG_ALERT); 00523 REGISTER_ENUM(RPMLOG_CRIT); 00524 REGISTER_ENUM(RPMLOG_ERR); 00525 REGISTER_ENUM(RPMLOG_WARNING); 00526 REGISTER_ENUM(RPMLOG_NOTICE); 00527 REGISTER_ENUM(RPMLOG_INFO); 00528 REGISTER_ENUM(RPMLOG_DEBUG); 00529 00530 REGISTER_ENUM(RPMMIRE_DEFAULT); 00531 REGISTER_ENUM(RPMMIRE_STRCMP); 00532 REGISTER_ENUM(RPMMIRE_REGEX); 00533 REGISTER_ENUM(RPMMIRE_GLOB); 00534 00535 REGISTER_ENUM(RPMVSF_DEFAULT); 00536 REGISTER_ENUM(RPMVSF_NOHDRCHK); 00537 REGISTER_ENUM(RPMVSF_NEEDPAYLOAD); 00538 REGISTER_ENUM(RPMVSF_NOSHA1HEADER); 00539 REGISTER_ENUM(RPMVSF_NOMD5HEADER); 00540 REGISTER_ENUM(RPMVSF_NODSAHEADER); 00541 REGISTER_ENUM(RPMVSF_NORSAHEADER); 00542 REGISTER_ENUM(RPMVSF_NOSHA1); 00543 REGISTER_ENUM(RPMVSF_NOMD5); 00544 REGISTER_ENUM(RPMVSF_NODSA); 00545 REGISTER_ENUM(RPMVSF_NORSA); 00546 REGISTER_ENUM(_RPMVSF_NODIGESTS); 00547 REGISTER_ENUM(_RPMVSF_NOSIGNATURES); 00548 REGISTER_ENUM(_RPMVSF_NOHEADER); 00549 REGISTER_ENUM(_RPMVSF_NOPAYLOAD); 00550 00551 REGISTER_ENUM(TR_ADDED); 00552 REGISTER_ENUM(TR_REMOVED); 00553 00554 REGISTER_ENUM(RPMDBI_PACKAGES); 00555 00556 REGISTER_ENUM((int)RPMAL_NOMATCH); 00557 }