6 #if defined(WITH_CPUINFO)
10 #if defined(HAVE_GELF_H) && !defined(__FreeBSD__)
11 #if LIBELF_H_LFS_CONFLICT
15 # undef _LARGEFILE64_SOURCE
16 # undef _LARGEFILE_SOURCE
17 # undef _FILE_OFFSET_BITS
18 # define _FILE_OFFSET_BITS 32
21 #if defined(__LCLINT__)
22 typedef long long loff_t;
32 #if defined(ENABLE_NLS) && !defined(__LCLINT__)
33 # define _(Text) gettext (Text)
40 #if defined(HAVE_LIBELF) && !defined(HAVE_GELF_GETVERNAUX) && !defined(__FreeBSD__)
46 static GElf_Verdef *gelf_getverdef(Elf_Data *data,
int offset,
49 return (GElf_Verdef *) ((
char *) data->d_buf + offset);
52 static GElf_Verdaux *gelf_getverdaux(Elf_Data *data,
int offset,
55 return (GElf_Verdaux *) ((
char *) data->d_buf + offset);
58 static GElf_Verneed *gelf_getverneed(Elf_Data *data,
int offset,
61 return (GElf_Verneed *) ((
char *) data->d_buf + offset);
64 static GElf_Vernaux *gelf_getvernaux(Elf_Data *data,
int offset,
67 return (GElf_Vernaux *) ((
char *) data->d_buf + offset);
74 #if !defined(SHT_GNU_verdef) && defined(__sun) && defined(SHT_SUNW_verdef)
75 # define SHT_GNU_verdef SHT_SUNW_verdef
76 # define SHT_GNU_verneed SHT_SUNW_verneed
81 #if !defined(DT_GNU_HASH)
82 #define DT_GNU_HASH 0x6ffffef5
85 #define _RPMIOB_INTERNAL
96 #define _RPMDS_INTERNAL
97 #define _RPMEVR_INTERNAL
98 #define _RPMPRCO_INTERNAL
113 #define _isspace(_c) \
114 ((_c) == ' ' || (_c) == '\t' || (_c) == '\r' || (_c) == '\n')
146 default: Type =
tagName(tagN);
break;
157 case 0: Type =
"Unknown";
break;
172 ds->N =
_free(ds->N);
173 ds->EVR =
_free(ds->EVR);
174 ds->Flags =
_free(ds->Flags);
179 ds->DNEVR =
_free(ds->DNEVR);
180 ds->ns.str =
_free(ds->ns.str);
181 memset(&ds->ns, 0,
sizeof(ds->ns));
182 ds->A =
_free(ds->A);
183 ds->Color =
_free(ds->Color);
184 ds->Refs =
_free(ds->Refs);
185 ds->Result =
_free(ds->Result);
199 if (_rpmdsPool == NULL) {
200 _rpmdsPool =
rpmioNewPool(
"ds",
sizeof(*ds), -1, _rpmds_debug,
205 memset(((
char *)ds)+
sizeof(ds->_item), 0,
sizeof(*ds)-
sizeof(ds->_item));
220 for (ac = 0; ac < argc; ac++) {
221 assert(argv[ac] != NULL);
222 nb += strlen(argv[ac]) + 1;
224 nb += (ac + 1) *
sizeof(*av);
226 av = (
const char **)
xmalloc(nb);
227 t = (
char *) (av + ac + 1);
228 for (ac = 0; ac < argc; ac++) {
230 t =
stpcpy(t, argv[ac]) + 1;
240 int scareMem = (flags & 0x1);
245 const char * Type = NULL;
250 assert(scareMem == 0);
290 delslash = (flags & 0x2) ? 0 : 1;
309 if (xx && N != NULL && Count > 0) {
323 ds->EVR = he->
p.
argv;
348 for (i = 0; i < Count; i++) {
349 (void)
urlPath(N[i], (
const char **)&dn);
355 if (len > 1 && dn[len-1] ==
'/')
360 const char ** av = (
const char **)
xcalloc(Count+1,
sizeof(*av));
364 for (i = 0; i < Count; i++) {
365 (void)
urlPath(ds->EVR[ds->Flags[i]], (
const char **)&dn);
371 N = ds->N =
_free(ds->N);
375 ds->EVR =
_free(ds->EVR);
376 ds->Flags =
_free(ds->Flags);
380 const char ** av = (
const char **)
xcalloc(Count+1,
sizeof(*av));
383 for (i = 0; i < Count; i++) {
384 if (N[i] == NULL || *N[i] ==
'\0')
386 else if (*N[i] ==
'/')
388 else if (ds->EVR != NULL && ds->Flags != NULL)
389 av[i] =
rpmGenPath(NULL, ds->EVR[ds->Flags[i]], N[i]);
396 N = ds->N =
_free(ds->N);
400 ds->EVR =
_free(ds->EVR);
401 ds->Flags =
_free(ds->Flags);
405 if (_rpmds_debug < 0)
406 fprintf(stderr,
"*** ds %p\t%s[%d]\n", ds, ds->Type, ds->Count);
414 ds =
rpmdsLink(ds, (ds ? ds->Type : NULL));
424 const char * Name = ds->N[ds->i];
437 const char * NS = ds->ns.NS;
438 const char * A = ds->ns.A;
443 if (dspfx) nb += strlen(dspfx) + 1;
444 if (ds->ns.str[0] ==
'!') nb++;
445 if (NS) nb += strlen(NS) +
sizeof(
"()") - 1;
446 if (N) nb += strlen(N);
453 if (ds->Flags != NULL
466 ds->ns.Flags = dsFlags;
469 if (ds->EVR != NULL && ds->EVR[ds->i] && *ds->EVR[ds->i]) {
471 nb += strlen(ds->EVR[ds->i]);
474 t = tbuf = (
char *)
xmalloc(nb + 1);
479 if (ds->ns.str[0] ==
'!')
495 if (t != tbuf) *t++ =
' ';
505 if (ds->EVR != NULL && ds->EVR[ds->i] && *ds->EVR[ds->i]) {
506 if (t != tbuf) *t++ =
' ';
507 t =
stpcpy(t, ds->EVR[ds->i]);
518 const char * Name, * V, * R;
519 #ifdef RPM_VENDOR_MANDRIVA
520 const char * D = NULL;
523 const char ** N, ** EVR;
538 #if defined(RPM_VENDOR_MANDRIVA)
547 if (Name == NULL) Name =
xstrdup(
"N");
548 if (V == NULL) V =
xstrdup(
"V");
549 if (R == NULL) R =
xstrdup(
"R");
551 t = (
char *)
xmalloc(
sizeof(*N) + strlen(Name) + 1);
552 N = (
const char **) t;
559 nb =
sizeof(*EVR) + 20 + strlen(V) + strlen(R) +
sizeof(
"-");
560 #if defined(RPM_VENDOR_MANDRIVA)
561 nb += (D ? strlen(D) +
sizeof(
":") : 0);
564 EVR = (
const char **) t;
568 sprintf(t,
"%d:", E);
571 #if defined(RPM_VENDOR_MANDRIVA)
586 ds->Flags = (
evrFlags *)
xmalloc(
sizeof(*ds->Flags)); ds->Flags[0] = Flags;
598 pre[0] = ds->Type[0];
606 return rpmdsLink(ds, (ds ? ds->Type : NULL));
617 { time_t now = time(NULL);
622 ds->N = (
const char **)
xcalloc(2,
sizeof(*ds->N)); ds->N[0] = N;
623 ds->EVR = (
const char **)
xcalloc(2,
sizeof(*ds->EVR)); ds->EVR[0] = EVR;
625 ds->Flags = (
evrFlags *)
xmalloc(
sizeof(*ds->Flags)); ds->Flags[0] = Flags;
633 return rpmdsLink(ds, (ds ? ds->Type : NULL));
638 return (ds != NULL ? ds->Count : 0);
643 return (ds != NULL ? ds->i : -1);
659 const char * DNEVR = NULL;
661 if (ds != NULL && ds->i >= 0 && ds->i < (
int)ds->Count) {
662 if (ds->DNEVR != NULL)
670 const char * N = NULL;
672 if (ds != NULL && ds->i >= 0 && ds->i < (
int)ds->Count) {
674 N = (ds->ns.N ? ds->ns.N :
rpmdsNewN(ds));
682 const char * EVR = NULL;
684 if (ds != NULL && ds->i >= 0 && ds->i < (
int)ds->Count) {
686 EVR = ds->EVR[ds->i];
695 if (ds != NULL && ds->i >= 0 && ds->i < (
int)ds->Count) {
696 if (ds->Flags != NULL)
697 Flags = ds->Flags[ds->i];
713 const char * A = NULL;
723 if (ds != NULL && ds->BT > 0)
732 oBT = (time_t)ds->BT;
742 NSType = ds->ns.Type;
751 nopromote = ds->nopromote;
760 onopromote = ds->nopromote;
761 ds->nopromote = nopromote;
767 int (*EVRparse)(
const char *evrstr,
EVR_t evr))
769 void * oEVRparse = NULL;
772 oEVRparse = (
void *) ds->EVRparse;
773 ds->EVRparse = EVRparse;
780 void * oEVRcmp = NULL;
783 oEVRcmp = (
void *) ds->EVRcmp;
793 if (ds != NULL && ds->i >= 0 && ds->i < (
int)ds->Count) {
794 if (ds->Color != NULL)
795 Color = ds->Color[ds->i];
807 if (ds->Color == NULL && ds->Count > 0)
810 if (ds->i >= 0 && ds->i < (
int)ds->Count) {
811 if (ds->Color != NULL) {
812 ocolor = ds->Color[ds->i];
813 ds->Color[ds->i] = color;
821 return (ds != NULL ? ds->exclude : NULL);
826 return (ds != NULL ? ds->nexclude : 0);
831 return (ds != NULL ? ds->include : NULL);
836 return (ds != NULL ? ds->ninclude : 0);
843 if (ds != NULL && ds->i >= 0 && ds->i < (
int)ds->Count) {
844 if (ds->Refs != NULL)
845 Refs = ds->Refs[ds->i];
857 if (ds->Refs == NULL && ds->Count > 0)
860 if (ds->i >= 0 && ds->i < (
int)ds->Count) {
861 if (ds->Refs != NULL) {
862 orefs = ds->Refs[ds->i];
863 ds->Refs[ds->i] = refs;
873 if (ds != NULL && ds->i >= 0 && ds->i < (
int)ds->Count) {
874 if (ds->Result != NULL)
875 result = ds->Result[ds->i];
887 if (ds->Result == NULL && ds->Count > 0)
890 if (ds->i >= 0 && ds->i < (
int)ds->Count) {
891 if (ds->Result != NULL) {
892 oresult = ds->Result[ds->i];
893 ds->Result[ds->i] = result;
901 if (!(ds != NULL && ds->i >= 0 && ds->i < (
int)ds->Count))
903 if (ds->DNEVR == NULL)
907 (!strcmp(ds->DNEVR,
"cached") ? ds->DNEVR : ds->DNEVR+2),
908 (rc ?
_(
"NO ") :
_(
"YES")),
909 (where != NULL ? where :
""));
917 if (ds != NULL && ++ds->i >= 0) {
918 if (ds->i < (
int)ds->Count) {
921 ds->DNEVR =
_free(ds->DNEVR);
922 ds->ns.str =
_free(ds->ns.str);
923 memset(&ds->ns, 0,
sizeof(ds->ns));
924 t[0] = ((ds->Type != NULL) ? ds->Type[0] :
'\0');
934 if (_rpmds_debug < 0 && i != -1 && ds->DNEVR[2] !=
'\0')
935 fprintf(stderr,
"*** ds %p\t%s[%d]: %s\n", ds, (ds->Type ? ds->Type :
"?Type?"), i, (ds->DNEVR ? ds->DNEVR :
"?DNEVR?"));
961 ds->h = (ods->h != NULL ?
headerLink(ods->h) : NULL);
962 ds->Type = ods->Type;
964 ds->tagN = ods->tagN;
965 ds->Count = ods->Count;
970 nb = (ds->Count+1) *
sizeof(*ds->N);
971 ds->N = (
const char **) (ds->h != NULL
972 ? memcpy(
xmalloc(nb), ods->N, nb)
979 assert(ods->EVR != NULL);
980 assert(ods->Flags != NULL);
981 nb = (ds->Count+1) *
sizeof(*ds->EVR);
982 ds->EVR = (ds->h != NULL
983 ? memcpy(
xmalloc(nb), ods->EVR, nb)
986 nb = (ds->Count *
sizeof(*ds->Flags));
987 ds->Flags = (ds->h != NULL
989 : memcpy(
xmalloc(nb), ods->Flags, nb) );
990 ds->nopromote = ods->nopromote;
992 ds->EVRcmp = ods->EVRcmp;
997 return rpmdsLink(ds, (ds ? ds->Type : NULL));
1005 if (ds == NULL || ods == NULL)
1010 while (ds->l < ds->u) {
1011 ds->i = (ds->l + ds->u) / 2;
1013 comparison = strcmp(ods->N[ods->i], ds->N[ds->i]);
1017 if (comparison == 0 && ods->EVR && ds->EVR)
1018 comparison = strcmp(ods->EVR[ods->i], ds->EVR[ds->i]);
1019 if (comparison == 0 && ods->Flags && ds->Flags)
1020 comparison = (ods->Flags[ods->i] - ds->Flags[ds->i]);
1025 else if (comparison > 0)
1042 if (dsp == NULL || ods == NULL)
1072 for (j = ds->Count; j > (
int)ds->u; j--)
1073 ds->N[j] = ds->N[j-1];
1074 ds->N[ds->u] = ods->N[ods->i];
1076 ds->N =
_free(ds->N);
1084 assert(ods->EVR != NULL);
1085 assert(ods->Flags != NULL);
1087 for (j = ds->Count; j > (
int)ds->u; j--)
1088 ds->EVR[j] = ds->EVR[j-1];
1089 ds->EVR[ds->u] = ods->EVR[ods->i];
1091 ds->EVR =
_free(ds->EVR);
1094 Flags =
xmalloc((ds->Count+1) *
sizeof(*Flags));
1096 memcpy(Flags, ds->Flags, ds->u *
sizeof(*Flags));
1097 if (ds->u < ds->Count)
1098 memcpy(Flags + ds->u + 1, ds->Flags + ds->u, (ds->Count - ds->u) *
sizeof(*Flags));
1099 Flags[ds->u] = ods->Flags[ods->i];
1100 ds->Flags =
_free(ds->Flags);
1120 if (ds == NULL || ods == NULL)
1130 comparison = strcmp(ods->N[ods->i], ds->N[i]);
1134 else if (comparison > 0)
1138 if (strcmp(ods->N[ods->i], ds->N[l]))
1140 while (l > 0 && !strcmp(ods->N[ods->i], ds->N[l-1]))
1143 if (u >= (
int)ds->Count || strcmp(ods->N[ods->i], ds->N[u]))
1145 while (++u < (
int)ds->Count) {
1146 if (strcmp(ods->N[ods->i], ds->N[u]))
1157 while ((l =
rpmdsNext(ds)) >= 0 && (l < u)) {
1169 if (ods->Result != NULL)
1184 const char *N,
const char *EVR,
evrFlags Flags)
1191 t = (
char *)
alloca(strlen(NS)+
sizeof(
"()")+strlen(N));
1201 #if defined(WITH_CPUINFO)
1204 const char * NS =
"cpuinfo";
1205 struct cpuinfo *cip = cpuinfo_new();
1206 cpuinfo_feature_t feature;
1210 unsigned char uc[4];
1212 static union _dbswap orderedbytes = { .
ui = 0x11223344 };
1213 const char *
endian = NULL;
1215 snprintf(tmp, 19,
"%d", cpuinfo_get_frequency(cip));
1218 snprintf(tmp, 19,
"%d", cpuinfo_get_cores(cip));
1220 snprintf(tmp, 19,
"%d", cpuinfo_get_threads(cip));
1223 if(orderedbytes.
uc[0] == 0x44)
1225 else if(orderedbytes.
uc[0] == 0x11)
1227 else if(orderedbytes.
uc[0] == 0x22)
1231 for (feature = cpuinfo_feature_common; feature != cpuinfo_feature_architecture_max; feature++) {
1232 if(feature == cpuinfo_feature_common_max)
1233 feature = cpuinfo_feature_architecture;
1234 if (cpuinfo_has_feature(cip, feature)) {
1235 const char *
name = cpuinfo_string_of_feature(feature);
1237 rpmdsNSAdd(dsp, NS, name,
"", RPMSENSE_PROBE);
1240 cpuinfo_destroy(cip);
1256 {
"processor", 0, 0 },
1257 {
"Processor", 0, 1 },
1258 {
"vendor_id", 0, 0 },
1259 {
"cpu_family", 0, 1 },
1261 {
"model_name", 0, 0 },
1262 {
"stepping", 0, 1 },
1263 {
"cpu_MHz", 0, 1 },
1264 {
"CPU_implementer",0, 1 },
1265 {
"CPU_architecture",0, 1 },
1266 {
"CPU_variant", 0, 1 },
1267 {
"CPU_part", 0, 1 },
1268 {
"CPU_revision", 0, 1 },
1269 {
"Hardware", 0, 2 },
1270 {
"Revision", 0, 1 },
1272 {
"cache_size", 0, 1 },
1273 {
"physical_id", 0, 0 },
1274 {
"siblings", 0, 0 },
1275 {
"core_id", 0, 0 },
1276 {
"cpu_cores", 0, 0 },
1277 {
"fdiv_bug", 0, 3 },
1278 {
"hlt_bug", 0, 3 },
1279 {
"f00f_bug", 0, 3 },
1280 {
"coma_bug", 0, 3 },
1282 {
"fpu_exception", 0, 3 },
1283 {
"cpuid_level", 0, 0 },
1286 {
"Features", 0, 4 },
1287 {
"bogomips", 0, 1 },
1288 {
"BogoMIPS", 0, 1 },
1289 {
"clflush_size", 0, 1 },
1305 for (ct = ctags; ct->
name != NULL; ct++) {
1306 if (strcmp(ct->
name, name))
1317 #define _PROC_CPUINFO "/proc/cpuinfo"
1328 const char * NS =
"cpuinfo";
1330 char * f, * fe, * fend;
1337 if (_cpuinfo_path == NULL) {
1338 _cpuinfo_path =
rpmExpand(
"%{?_rpmds_cpuinfo_path}", NULL);
1340 if (!(_cpuinfo_path != NULL && *_cpuinfo_path ==
'/')) {
1342 _cpuinfo_path =
_free(_cpuinfo_path);
1353 for (ct = ctags; ct->
name != NULL; ct++)
1357 if (!(xx == 0 && iob != NULL))
1360 for (f = (
char *)iob->b; *f !=
'\0'; f = fend) {
1363 while (*fe !=
'\0' && !(*fe ==
'\n' || *fe ==
'\r'))
1366 while (*fe !=
'\0' && (*fe ==
'\n' || *fe ==
'\r'))
1380 while (*fe && *fe !=
':')
1399 for (t = f; *t !=
'\0'; t++) {
1411 for (t = g; *t !=
'\0'; t++) {
1412 if (
_isspace(*t) || *t ==
'(' || *t ==
')')
1418 for (t = g; *t !=
'\0'; t++) {
1419 if (
_isspace(*t) || *t ==
'(' || *t ==
')')
1425 if (!strcmp(g,
"yes"))
1429 {
char ** av = NULL;
1431 rc = poptParseArgvString(g, NULL, (
const char ***)&av);
1432 if (!rc && av != NULL)
1433 while ((t = av[i++]) != NULL)
1460 {
"rpmlib(VersionedDependencies)",
"3.0.3-1",
1462 N_(
"PreReq:, Provides:, and Obsoletes: dependencies support versions.") },
1463 {
"rpmlib(CompressedFileNames)",
"3.0.4-1",
1465 N_(
"file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.")},
1466 #if defined(WITH_BZIP2)
1467 {
"rpmlib(PayloadIsBzip2)",
"3.0.5-1",
1469 N_(
"package payload can be compressed using bzip2.") },
1471 {
"rpmlib(PayloadFilesHavePrefix)",
"4.0-1",
1473 N_(
"package payload file(s) have \"./\" prefix.") },
1474 {
"rpmlib(ExplicitPackageProvide)",
"4.0-1",
1476 N_(
"package name-version-release is not implicitly provided.") },
1477 {
"rpmlib(HeaderLoadSortsTags)",
"4.0.1-1",
1479 N_(
"header tags are always sorted after being loaded.") },
1480 {
"rpmlib(ScriptletInterpreterArgs)",
"4.0.3-1",
1482 N_(
"the scriptlet interpreter can use arguments from header.") },
1483 {
"rpmlib(PartialHardlinkSets)",
"4.0.4-1",
1485 N_(
"a hardlink file set may be installed without being complete.") },
1486 {
"rpmlib(ConcurrentAccess)",
"4.1-1",
1488 N_(
"package scriptlets may access the rpm database while installing.") },
1489 #if defined(WITH_LUA)
1490 {
"rpmlib(BuiltinLuaScripts)",
"4.2.2-1",
1492 N_(
"internal embedded lua scripts.") },
1494 #if defined(WITH_AUGEAS)
1495 {
"rpmlib(BuiltinAugeasScripts)",
"5.3-1",
1497 N_(
"internal embedded Augeas.") },
1499 #if defined(WITH_FICL)
1500 {
"rpmlib(BuiltinFiclScripts)",
"5.2-1",
1502 N_(
"internal embedded FICL.") },
1504 #if defined(WITH_GPSEE)
1505 {
"rpmlib(BuiltinJavaScript)",
"5.2-1",
1507 N_(
"internal embedded JavaScript.") },
1509 #if defined(WITH_PERLEMBED)
1510 {
"rpmlib(BuiltinPerlScripts)",
"5.2-1",
1512 N_(
"internal embedded perl scripts.") },
1514 #if defined(WITH_PYTHONEMBED)
1515 {
"rpmlib(BuiltinPythonScripts)",
"5.2-1",
1517 N_(
"internal embedded python scripts.") },
1519 #if defined(WITH_RUBYEMBED)
1520 {
"rpmlib(BuiltinRubyScripts)",
"5.2-1",
1522 N_(
"internal embedded ruby scripts.") },
1524 #if defined(WITH_SEMANAGE)
1525 {
"rpmlib(BuiltinSpookScripts)",
"5.3-1",
1527 N_(
"internal embedded Spook scripts.") },
1529 #if defined(WITH_SQLITE)
1530 {
"rpmlib(BuiltinSqlScripts)",
"5.3-1",
1532 N_(
"internal embedded sqlite3 scripts.") },
1534 #if defined(WITH_SQUIRREL)
1535 {
"rpmlib(BuiltinSquirrelScripts)",
"5.2-1",
1537 N_(
"internal embedded squirrel scripts.") },
1539 #if defined(WITH_TCL)
1540 {
"rpmlib(BuiltinTclScripts)",
"5.2-1",
1542 N_(
"internal embedded tcl scripts.") },
1544 {
"rpmlib(HeaderTagTypeInt64)",
"4.4.3-1",
1546 N_(
"header tag data can be of type uint64_t.") },
1547 {
"rpmlib(PayloadIsUstar)",
"4.4.4-1",
1549 N_(
"package payload can be in ustar tar archive format.") },
1550 #if defined(WITH_XZ)
1551 {
"rpmlib(PayloadIsLzma)",
"4.4.2-1",
1553 N_(
"package payload can be compressed using lzma.") },
1555 {
"rpmlib(FileDigestParameterized)",
"4.4.6-1",
1557 N_(
"file digests can be other than MD5.") },
1558 {
"rpmlib(FileDigests)",
"4.6.0-1",
1560 N_(
"file digests can be other than MD5.") },
1561 #if defined(SUPPORT_AR_PAYLOADS)
1562 {
"rpmlib(PayloadIsAr)",
"5.1-1",
1564 N_(
"package payload can be in ar archive format.") },
1566 #if defined(WITH_XZ)
1567 {
"rpmlib(PayloadIsXz)",
"5.2-1",
1569 N_(
"package payload can be compressed using xz.") },
1572 {
"rpmlib(SetVersions)",
"4.0.4-alt98",
1574 N_(
"dependencies support set/subset versions.") },
1575 #if defined(RPM_VENDOR_MANDRIVA)
1576 {
"rpmlib(DistEpoch)",
"5.4.7-1",
1578 N_(
"package has distepoch.") },
1598 for (rlp = rltblp; rlp->
featureName != NULL; rlp++) {
1620 const char *N, *EVR;
1636 fd =
Fopen(fn,
"r.fpio");
1637 if (fd == NULL ||
Ferror(fd))
1643 while((f = fgets(buf, (
int)
sizeof(buf), fp)) != NULL) {
1647 buf[
sizeof(buf)-1] =
'\0';
1654 if (f[0] ==
'-' &&
_isspace(f[1])) {
1655 f +=
sizeof(
"- ")-1;
1661 if (*f ==
'\0' || *f ==
'#')
1669 if (!(
xisalnum(f[0]) || strchr(
"/_%!", f[0]) != NULL)) {
1670 fprintf(stderr,
_(
"%s:%d \"%s\" has invalid name. Skipping ...\n"),
1677 if (*f ==
'!') fe++;
1678 while (*fe && !
_isspace(*fe) && strchr(
"!<=>", *fe) == NULL)
1688 if (*f !=
'/' && *fe !=
'\0') {
1693 fprintf(stderr,
_(
"%s:%d \"%s\" has no comparison operator. Skipping ...\n"),
1704 fprintf(stderr,
_(
"%s:%d \"%s\" has no EVR string. Skipping ...\n"),
1721 Flags = (
evrFlags) (Flags | RPMSENSE_PROBE);
1732 if (fd != NULL) (void)
Fclose(fd);
1736 #if defined(RPM_VENDOR_WINDRIVER)
1737 #define _ETC_RPM_SYSINFO "%{_etcrpm}/sysinfo"
1739 #define _ETC_RPM_SYSINFO SYSCONFIGDIR "/sysinfo"
1762 struct stat * st = (
struct stat *) memset(
alloca(
sizeof(*st)), 0,
sizeof(*st));
1767 if (_sysinfo_path == NULL) {
1768 _sysinfo_path =
rpmExpand(
"%{?_rpmds_sysinfo_path}", NULL);
1770 if (!(_sysinfo_path != NULL && *_sysinfo_path ==
'/')) {
1772 _sysinfo_path =
_free(_sysinfo_path);
1789 if (S_ISDIR(st->st_mode)) {
1790 const char *dn = fn;
1794 for (av = _sysinfo_tags; av && *av; av++) {
1799 st = (
struct stat *) memset(st, 0,
sizeof(*st));
1801 if (xx == 0 && S_ISREG(st->st_mode))
1809 if (S_ISREG(st->st_mode))
1827 {
"LINK_MAX", _PC_LINK_MAX,
PATHCONF },
1830 {
"_POSIX_LINK_MAX", _PC_LINK_MAX,
PATHCONF },
1832 #ifdef _PC_MAX_CANON
1833 {
"MAX_CANON", _PC_MAX_CANON,
PATHCONF },
1835 #ifdef _PC_MAX_CANON
1836 {
"_POSIX_MAX_CANON", _PC_MAX_CANON,
PATHCONF },
1838 #ifdef _PC_MAX_INPUT
1839 {
"MAX_INPUT", _PC_MAX_INPUT,
PATHCONF },
1841 #ifdef _PC_MAX_INPUT
1842 {
"_POSIX_MAX_INPUT", _PC_MAX_INPUT,
PATHCONF },
1845 {
"NAME_MAX", _PC_NAME_MAX,
PATHCONF },
1848 {
"_POSIX_NAME_MAX", _PC_NAME_MAX,
PATHCONF },
1851 {
"PATH_MAX", _PC_PATH_MAX,
PATHCONF },
1854 {
"_POSIX_PATH_MAX", _PC_PATH_MAX,
PATHCONF },
1857 {
"PIPE_BUF", _PC_PIPE_BUF,
PATHCONF },
1860 {
"_POSIX_PIPE_BUF", _PC_PIPE_BUF,
PATHCONF },
1862 #ifdef _PC_SOCK_MAXBUF
1863 {
"SOCK_MAXBUF", _PC_SOCK_MAXBUF,
PATHCONF },
1866 {
"_POSIX_ASYNC_IO", _PC_ASYNC_IO,
PATHCONF },
1868 #ifdef _PC_CHOWN_RESTRICTED
1869 {
"_POSIX_CHOWN_RESTRICTED", _PC_CHOWN_RESTRICTED,
PATHCONF },
1872 {
"_POSIX_NO_TRUNC", _PC_NO_TRUNC,
PATHCONF },
1875 {
"_POSIX_PRIO_IO", _PC_PRIO_IO,
PATHCONF },
1878 {
"_POSIX_SYNC_IO", _PC_SYNC_IO,
PATHCONF },
1881 {
"_POSIX_VDISABLE", _PC_VDISABLE,
PATHCONF },
1885 {
"ARG_MAX", _SC_ARG_MAX,
SYSCONF },
1887 #ifdef _SC_ATEXIT_MAX
1888 {
"ATEXIT_MAX", _SC_ATEXIT_MAX,
SYSCONF },
1891 {
"CHAR_BIT", _SC_CHAR_BIT,
SYSCONF },
1894 {
"CHAR_MAX", _SC_CHAR_MAX,
SYSCONF },
1897 {
"CHAR_MIN", _SC_CHAR_MIN,
SYSCONF },
1899 #ifdef _SC_CHILD_MAX
1900 {
"CHILD_MAX", _SC_CHILD_MAX,
SYSCONF },
1903 {
"CLK_TCK", _SC_CLK_TCK,
SYSCONF },
1906 {
"INT_MAX", _SC_INT_MAX,
SYSCONF },
1909 {
"INT_MIN", _SC_INT_MIN,
SYSCONF },
1911 #ifdef _SC_UIO_MAXIOV
1912 {
"IOV_MAX", _SC_UIO_MAXIOV,
SYSCONF },
1914 #ifdef _SC_LOGIN_NAME_MAX
1915 {
"LOGNAME_MAX", _SC_LOGIN_NAME_MAX,
SYSCONF },
1918 {
"LONG_BIT", _SC_LONG_BIT,
SYSCONF },
1920 #ifdef _SC_MB_LEN_MAX
1921 {
"MB_LEN_MAX", _SC_MB_LEN_MAX,
SYSCONF },
1923 #ifdef _SC_NGROUPS_MAX
1924 {
"NGROUPS_MAX", _SC_NGROUPS_MAX,
SYSCONF },
1926 #ifdef _SC_NL_ARGMAX
1927 {
"NL_ARGMAX", _SC_NL_ARGMAX,
SYSCONF },
1929 #ifdef _SC_NL_LANGMAX
1930 {
"NL_LANGMAX", _SC_NL_LANGMAX,
SYSCONF },
1932 #ifdef _SC_NL_MSGMAX
1933 {
"NL_MSGMAX", _SC_NL_MSGMAX,
SYSCONF },
1936 {
"NL_NMAX", _SC_NL_NMAX,
SYSCONF },
1938 #ifdef _SC_NL_SETMAX
1939 {
"NL_SETMAX", _SC_NL_SETMAX,
SYSCONF },
1941 #ifdef _SC_NL_TEXTMAX
1942 {
"NL_TEXTMAX", _SC_NL_TEXTMAX,
SYSCONF },
1944 #ifdef _SC_GETGR_R_SIZE_MAX
1945 {
"NSS_BUFLEN_GROUP", _SC_GETGR_R_SIZE_MAX,
SYSCONF },
1947 #ifdef _SC_GETPW_R_SIZE_MAX
1948 {
"NSS_BUFLEN_PASSWD", _SC_GETPW_R_SIZE_MAX,
SYSCONF },
1951 {
"NZERO", _SC_NZERO,
SYSCONF },
1954 {
"OPEN_MAX", _SC_OPEN_MAX,
SYSCONF },
1957 {
"PAGESIZE", _SC_PAGESIZE,
SYSCONF },
1960 {
"PAGE_SIZE", _SC_PAGESIZE,
SYSCONF },
1963 {
"PASS_MAX", _SC_PASS_MAX,
SYSCONF },
1965 #ifdef _SC_THREAD_DESTRUCTOR_ITERATIONS
1966 {
"PTHREAD_DESTRUCTOR_ITERATIONS", _SC_THREAD_DESTRUCTOR_ITERATIONS,
SYSCONF },
1968 #ifdef _SC_THREAD_KEYS_MAX
1969 {
"PTHREAD_KEYS_MAX", _SC_THREAD_KEYS_MAX,
SYSCONF },
1971 #ifdef _SC_THREAD_STACK_MIN
1972 {
"PTHREAD_STACK_MIN", _SC_THREAD_STACK_MIN,
SYSCONF },
1974 #ifdef _SC_THREAD_THREADS_MAX
1975 {
"PTHREAD_THREADS_MAX", _SC_THREAD_THREADS_MAX,
SYSCONF },
1977 #ifdef _SC_SCHAR_MAX
1978 {
"SCHAR_MAX", _SC_SCHAR_MAX,
SYSCONF },
1980 #ifdef _SC_SCHAR_MIN
1981 {
"SCHAR_MIN", _SC_SCHAR_MIN,
SYSCONF },
1984 {
"SHRT_MAX", _SC_SHRT_MAX,
SYSCONF },
1987 {
"SHRT_MIN", _SC_SHRT_MIN,
SYSCONF },
1989 #ifdef _SC_SSIZE_MAX
1990 {
"SSIZE_MAX", _SC_SSIZE_MAX,
SYSCONF },
1992 #ifdef _SC_TTY_NAME_MAX
1993 {
"TTY_NAME_MAX", _SC_TTY_NAME_MAX,
SYSCONF },
1995 #ifdef _SC_TZNAME_MAX
1996 {
"TZNAME_MAX", _SC_TZNAME_MAX,
SYSCONF },
1998 #ifdef _SC_UCHAR_MAX
1999 {
"UCHAR_MAX", _SC_UCHAR_MAX,
SYSCONF },
2002 {
"UINT_MAX", _SC_UINT_MAX,
SYSCONF },
2004 #ifdef _SC_UIO_MAXIOV
2005 {
"UIO_MAXIOV", _SC_UIO_MAXIOV,
SYSCONF },
2007 #ifdef _SC_ULONG_MAX
2008 {
"ULONG_MAX", _SC_ULONG_MAX,
SYSCONF },
2010 #ifdef _SC_USHRT_MAX
2011 {
"USHRT_MAX", _SC_USHRT_MAX,
SYSCONF },
2014 {
"WORD_BIT", _SC_WORD_BIT,
SYSCONF },
2016 #ifdef _SC_AVPHYS_PAGES
2017 {
"_AVPHYS_PAGES", _SC_AVPHYS_PAGES,
SYSCONF },
2019 #ifdef _SC_NPROCESSORS_CONF
2020 {
"_NPROCESSORS_CONF", _SC_NPROCESSORS_CONF,
SYSCONF },
2022 #ifdef _SC_NPROCESSORS_ONLN
2023 {
"_NPROCESSORS_ONLN", _SC_NPROCESSORS_ONLN,
SYSCONF },
2025 #ifdef _SC_PHYS_PAGES
2026 {
"_PHYS_PAGES", _SC_PHYS_PAGES,
SYSCONF },
2029 {
"_POSIX_ARG_MAX", _SC_ARG_MAX,
SYSCONF },
2031 #ifdef _SC_ASYNCHRONOUS_IO
2032 {
"_POSIX_ASYNCHRONOUS_IO", _SC_ASYNCHRONOUS_IO,
SYSCONF },
2034 #ifdef _SC_CHILD_MAX
2035 {
"_POSIX_CHILD_MAX", _SC_CHILD_MAX,
SYSCONF },
2038 {
"_POSIX_FSYNC", _SC_FSYNC,
SYSCONF },
2040 #ifdef _SC_JOB_CONTROL
2041 {
"_POSIX_JOB_CONTROL", _SC_JOB_CONTROL,
SYSCONF },
2043 #ifdef _SC_MAPPED_FILES
2044 {
"_POSIX_MAPPED_FILES", _SC_MAPPED_FILES,
SYSCONF },
2047 {
"_POSIX_MEMLOCK", _SC_MEMLOCK,
SYSCONF },
2049 #ifdef _SC_MEMLOCK_RANGE
2050 {
"_POSIX_MEMLOCK_RANGE", _SC_MEMLOCK_RANGE,
SYSCONF },
2052 #ifdef _SC_MEMORY_PROTECTION
2053 {
"_POSIX_MEMORY_PROTECTION", _SC_MEMORY_PROTECTION,
SYSCONF },
2055 #ifdef _SC_MESSAGE_PASSING
2056 {
"_POSIX_MESSAGE_PASSING", _SC_MESSAGE_PASSING,
SYSCONF },
2058 #ifdef _SC_NGROUPS_MAX
2059 {
"_POSIX_NGROUPS_MAX", _SC_NGROUPS_MAX,
SYSCONF },
2062 {
"_POSIX_OPEN_MAX", _SC_OPEN_MAX,
SYSCONF },
2065 {
"_POSIX_PII", _SC_PII,
SYSCONF },
2067 #ifdef _SC_PII_INTERNET
2068 {
"_POSIX_PII_INTERNET", _SC_PII_INTERNET,
SYSCONF },
2070 #ifdef _SC_PII_INTERNET_DGRAM
2071 {
"_POSIX_PII_INTERNET_DGRAM", _SC_PII_INTERNET_DGRAM,
SYSCONF },
2073 #ifdef _SC_PII_INTERNET_STREAM
2074 {
"_POSIX_PII_INTERNET_STREAM", _SC_PII_INTERNET_STREAM,
SYSCONF },
2077 {
"_POSIX_PII_OSI", _SC_PII_OSI,
SYSCONF },
2079 #ifdef _SC_PII_OSI_CLTS
2080 {
"_POSIX_PII_OSI_CLTS", _SC_PII_OSI_CLTS,
SYSCONF },
2082 #ifdef _SC_PII_OSI_COTS
2083 {
"_POSIX_PII_OSI_COTS", _SC_PII_OSI_COTS,
SYSCONF },
2085 #ifdef _SC_PII_OSI_M
2086 {
"_POSIX_PII_OSI_M", _SC_PII_OSI_M,
SYSCONF },
2088 #ifdef _SC_PII_SOCKET
2089 {
"_POSIX_PII_SOCKET", _SC_PII_SOCKET,
SYSCONF },
2092 {
"_POSIX_PII_XTI", _SC_PII_XTI,
SYSCONF },
2095 {
"_POSIX_POLL", _SC_POLL,
SYSCONF },
2097 #ifdef _SC_PRIORITIZED_IO
2098 {
"_POSIX_PRIORITIZED_IO", _SC_PRIORITIZED_IO,
SYSCONF },
2100 #ifdef _SC_PRIORITY_SCHEDULING
2101 {
"_POSIX_PRIORITY_SCHEDULING", _SC_PRIORITY_SCHEDULING,
SYSCONF },
2103 #ifdef _SC_REALTIME_SIGNALS
2104 {
"_POSIX_REALTIME_SIGNALS", _SC_REALTIME_SIGNALS,
SYSCONF },
2106 #ifdef _SC_SAVED_IDS
2107 {
"_POSIX_SAVED_IDS", _SC_SAVED_IDS,
SYSCONF },
2110 {
"_POSIX_SELECT", _SC_SELECT,
SYSCONF },
2112 #ifdef _SC_SEMAPHORES
2113 {
"_POSIX_SEMAPHORES", _SC_SEMAPHORES,
SYSCONF },
2115 #ifdef _SC_SHARED_MEMORY_OBJECTS
2116 {
"_POSIX_SHARED_MEMORY_OBJECTS", _SC_SHARED_MEMORY_OBJECTS,
SYSCONF },
2118 #ifdef _SC_SSIZE_MAX
2119 {
"_POSIX_SSIZE_MAX", _SC_SSIZE_MAX,
SYSCONF },
2121 #ifdef _SC_STREAM_MAX
2122 {
"_POSIX_STREAM_MAX", _SC_STREAM_MAX,
SYSCONF },
2124 #ifdef _SC_SYNCHRONIZED_IO
2125 {
"_POSIX_SYNCHRONIZED_IO", _SC_SYNCHRONIZED_IO,
SYSCONF },
2128 {
"_POSIX_THREADS", _SC_THREADS,
SYSCONF },
2130 #ifdef _SC_THREAD_ATTR_STACKADDR
2131 {
"_POSIX_THREAD_ATTR_STACKADDR", _SC_THREAD_ATTR_STACKADDR,
SYSCONF },
2133 #ifdef _SC_THREAD_ATTR_STACKSIZE
2134 {
"_POSIX_THREAD_ATTR_STACKSIZE", _SC_THREAD_ATTR_STACKSIZE,
SYSCONF },
2136 #ifdef _SC_THREAD_PRIORITY_SCHEDULING
2137 {
"_POSIX_THREAD_PRIORITY_SCHEDULING", _SC_THREAD_PRIORITY_SCHEDULING,
SYSCONF },
2139 #ifdef _SC_THREAD_PRIO_INHERIT
2140 {
"_POSIX_THREAD_PRIO_INHERIT", _SC_THREAD_PRIO_INHERIT,
SYSCONF },
2142 #ifdef _SC_THREAD_PRIO_PROTECT
2143 {
"_POSIX_THREAD_PRIO_PROTECT", _SC_THREAD_PRIO_PROTECT,
SYSCONF },
2145 #ifdef _SC_THREAD_PROCESS_SHARED
2146 {
"_POSIX_THREAD_PROCESS_SHARED", _SC_THREAD_PROCESS_SHARED,
SYSCONF },
2148 #ifdef _SC_THREAD_SAFE_FUNCTIONS
2149 {
"_POSIX_THREAD_SAFE_FUNCTIONS", _SC_THREAD_SAFE_FUNCTIONS,
SYSCONF },
2152 {
"_POSIX_TIMERS", _SC_TIMERS,
SYSCONF },
2154 #ifdef _SC_TIMER_MAX
2155 {
"TIMER_MAX", _SC_TIMER_MAX,
SYSCONF },
2157 #ifdef _SC_TZNAME_MAX
2158 {
"_POSIX_TZNAME_MAX", _SC_TZNAME_MAX,
SYSCONF },
2161 {
"_POSIX_VERSION", _SC_VERSION,
SYSCONF },
2163 #ifdef _SC_T_IOV_MAX
2164 {
"_T_IOV_MAX", _SC_T_IOV_MAX,
SYSCONF },
2166 #ifdef _SC_XOPEN_CRYPT
2167 {
"_XOPEN_CRYPT", _SC_XOPEN_CRYPT,
SYSCONF },
2169 #ifdef _SC_XOPEN_ENH_I18N
2170 {
"_XOPEN_ENH_I18N", _SC_XOPEN_ENH_I18N,
SYSCONF },
2172 #ifdef _SC_XOPEN_LEGACY
2173 {
"_XOPEN_LEGACY", _SC_XOPEN_LEGACY,
SYSCONF },
2175 #ifdef _SC_XOPEN_REALTIME
2176 {
"_XOPEN_REALTIME", _SC_XOPEN_REALTIME,
SYSCONF },
2178 #ifdef _SC_XOPEN_REALTIME_THREADS
2179 {
"_XOPEN_REALTIME_THREADS", _SC_XOPEN_REALTIME_THREADS,
SYSCONF },
2181 #ifdef _SC_XOPEN_SHM
2182 {
"_XOPEN_SHM", _SC_XOPEN_SHM,
SYSCONF },
2184 #ifdef _SC_XOPEN_UNIX
2185 {
"_XOPEN_UNIX", _SC_XOPEN_UNIX,
SYSCONF },
2187 #ifdef _SC_XOPEN_VERSION
2188 {
"_XOPEN_VERSION", _SC_XOPEN_VERSION,
SYSCONF },
2190 #ifdef _SC_XOPEN_XCU_VERSION
2191 {
"_XOPEN_XCU_VERSION", _SC_XOPEN_XCU_VERSION,
SYSCONF },
2193 #ifdef _SC_XOPEN_XPG2
2194 {
"_XOPEN_XPG2", _SC_XOPEN_XPG2,
SYSCONF },
2196 #ifdef _SC_XOPEN_XPG3
2197 {
"_XOPEN_XPG3", _SC_XOPEN_XPG3,
SYSCONF },
2199 #ifdef _SC_XOPEN_XPG4
2200 {
"_XOPEN_XPG4", _SC_XOPEN_XPG4,
SYSCONF },
2203 #ifdef _SC_BC_BASE_MAX
2204 {
"BC_BASE_MAX", _SC_BC_BASE_MAX,
SYSCONF },
2206 #ifdef _SC_BC_DIM_MAX
2207 {
"BC_DIM_MAX", _SC_BC_DIM_MAX,
SYSCONF },
2209 #ifdef _SC_BC_SCALE_MAX
2210 {
"BC_SCALE_MAX", _SC_BC_SCALE_MAX,
SYSCONF },
2212 #ifdef _SC_BC_STRING_MAX
2213 {
"BC_STRING_MAX", _SC_BC_STRING_MAX,
SYSCONF },
2215 #ifdef _SC_CHARCLASS_NAME_MAX
2216 {
"CHARCLASS_NAME_MAX", _SC_CHARCLASS_NAME_MAX,
SYSCONF },
2218 #ifdef _SC_COLL_WEIGHTS_MAX
2219 {
"COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX,
SYSCONF },
2221 #ifdef _SC_EQUIV_CLASS_MAX
2222 {
"EQUIV_CLASS_MAX", _SC_EQUIV_CLASS_MAX,
SYSCONF },
2224 #ifdef _SC_EXPR_NEST_MAX
2225 {
"EXPR_NEST_MAX", _SC_EXPR_NEST_MAX,
SYSCONF },
2228 {
"LINE_MAX", _SC_LINE_MAX,
SYSCONF },
2230 #ifdef _SC_BC_BASE_MAX
2231 {
"POSIX2_BC_BASE_MAX", _SC_BC_BASE_MAX,
SYSCONF },
2233 #ifdef _SC_BC_DIM_MAX
2234 {
"POSIX2_BC_DIM_MAX", _SC_BC_DIM_MAX,
SYSCONF },
2236 #ifdef _SC_BC_SCALE_MAX
2237 {
"POSIX2_BC_SCALE_MAX", _SC_BC_SCALE_MAX,
SYSCONF },
2239 #ifdef _SC_BC_STRING_MAX
2240 {
"POSIX2_BC_STRING_MAX", _SC_BC_STRING_MAX,
SYSCONF },
2242 #ifdef _SC_2_CHAR_TERM
2243 {
"POSIX2_CHAR_TERM", _SC_2_CHAR_TERM,
SYSCONF },
2245 #ifdef _SC_COLL_WEIGHTS_MAX
2246 {
"POSIX2_COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX,
SYSCONF },
2249 {
"POSIX2_C_BIND", _SC_2_C_BIND,
SYSCONF },
2252 {
"POSIX2_C_DEV", _SC_2_C_DEV,
SYSCONF },
2254 #ifdef _SC_2_C_VERSION
2255 {
"POSIX2_C_VERSION", _SC_2_C_VERSION,
SYSCONF },
2257 #ifdef _SC_EXPR_NEST_MAX
2258 {
"POSIX2_EXPR_NEST_MAX", _SC_EXPR_NEST_MAX,
SYSCONF },
2260 #ifdef _SC_2_FORT_DEV
2261 {
"POSIX2_FORT_DEV", _SC_2_FORT_DEV,
SYSCONF },
2263 #ifdef _SC_2_FORT_RUN
2264 {
"POSIX2_FORT_RUN", _SC_2_FORT_RUN,
SYSCONF },
2267 {
"_POSIX2_LINE_MAX", _SC_LINE_MAX,
SYSCONF },
2269 #ifdef _SC_2_LOCALEDEF
2270 {
"POSIX2_LOCALEDEF", _SC_2_LOCALEDEF,
SYSCONF },
2272 #ifdef _SC_RE_DUP_MAX
2273 {
"POSIX2_RE_DUP_MAX", _SC_RE_DUP_MAX,
SYSCONF },
2276 {
"POSIX2_SW_DEV", _SC_2_SW_DEV,
SYSCONF },
2279 {
"POSIX2_UPE", _SC_2_UPE,
SYSCONF },
2281 #ifdef _SC_2_VERSION
2282 {
"POSIX2_VERSION", _SC_2_VERSION,
SYSCONF },
2284 #ifdef _SC_RE_DUP_MAX
2285 {
"RE_DUP_MAX", _SC_RE_DUP_MAX,
SYSCONF },
2289 {
"PATH", _CS_PATH,
CONFSTR },
2290 {
"CS_PATH", _CS_PATH,
CONFSTR },
2294 #ifdef _CS_LFS_CFLAGS
2295 {
"LFS_CFLAGS", _CS_LFS_CFLAGS,
CONFSTR },
2297 #ifdef _CS_LFS_LDFLAGS
2298 {
"LFS_LDFLAGS", _CS_LFS_LDFLAGS,
CONFSTR },
2301 {
"LFS_LIBS", _CS_LFS_LIBS,
CONFSTR },
2303 #ifdef _CS_LFS_LINTFLAGS
2304 {
"LFS_LINTFLAGS", _CS_LFS_LINTFLAGS,
CONFSTR },
2306 #ifdef _CS_LFS64_CFLAGS
2307 {
"LFS64_CFLAGS", _CS_LFS64_CFLAGS,
CONFSTR },
2309 #ifdef _CS_LFS64_LDFLAGS
2310 {
"LFS64_LDFLAGS", _CS_LFS64_LDFLAGS,
CONFSTR },
2312 #ifdef _CS_LFS64_LIBS
2313 {
"LFS64_LIBS", _CS_LFS64_LIBS,
CONFSTR },
2315 #ifdef _CS_LFS64_LINTFLAGS
2316 {
"LFS64_LINTFLAGS", _CS_LFS64_LINTFLAGS,
CONFSTR },
2320 #ifdef _SC_XBS5_ILP32_OFF32
2321 {
"_XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32,
SYSCONF },
2323 #ifdef _CS_XBS5_ILP32_OFF32_CFLAGS
2324 {
"XBS5_ILP32_OFF32_CFLAGS", _CS_XBS5_ILP32_OFF32_CFLAGS,
CONFSTR },
2326 #ifdef _CS_XBS5_ILP32_OFF32_LDFLAGS
2327 {
"XBS5_ILP32_OFF32_LDFLAGS", _CS_XBS5_ILP32_OFF32_LDFLAGS,
CONFSTR },
2329 #ifdef _CS_XBS5_ILP32_OFF32_LIBS
2330 {
"XBS5_ILP32_OFF32_LIBS", _CS_XBS5_ILP32_OFF32_LIBS,
CONFSTR },
2332 #ifdef _CS_XBS5_ILP32_OFF32_LINTFLAGS
2333 {
"XBS5_ILP32_OFF32_LINTFLAGS", _CS_XBS5_ILP32_OFF32_LINTFLAGS,
CONFSTR },
2336 #ifdef _SC_XBS5_ILP32_OFFBIG
2337 {
"_XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG,
SYSCONF },
2339 #ifdef _CS_XBS5_ILP32_OFFBIG_CFLAGS
2340 {
"XBS5_ILP32_OFFBIG_CFLAGS", _CS_XBS5_ILP32_OFFBIG_CFLAGS,
CONFSTR },
2342 #ifdef _CS_XBS5_ILP32_OFFBIG_LDFLAGS
2343 {
"XBS5_ILP32_OFFBIG_LDFLAGS", _CS_XBS5_ILP32_OFFBIG_LDFLAGS,
CONFSTR },
2345 #ifdef _CS_XBS5_ILP32_OFFBIG_LIBS
2346 {
"XBS5_ILP32_OFFBIG_LIBS", _CS_XBS5_ILP32_OFFBIG_LIBS,
CONFSTR },
2348 #ifdef _CS_XBS5_ILP32_OFFBIG_LINTFLAGS
2349 {
"XBS5_ILP32_OFFBIG_LINTFLAGS", _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,
CONFSTR },
2352 #ifdef _SC_XBS5_LP64_OFF64
2353 {
"_XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64,
SYSCONF },
2355 #ifdef _CS_XBS5_LP64_OFF64_CFLAGS
2356 {
"XBS5_LP64_OFF64_CFLAGS", _CS_XBS5_LP64_OFF64_CFLAGS,
CONFSTR },
2358 #ifdef _CS_XBS5_LP64_OFF64_LDFLAGS
2359 {
"XBS5_LP64_OFF64_LDFLAGS", _CS_XBS5_LP64_OFF64_LDFLAGS,
CONFSTR },
2361 #ifdef _CS_XBS5_LP64_OFF64_LIBS
2362 {
"XBS5_LP64_OFF64_LIBS", _CS_XBS5_LP64_OFF64_LIBS,
CONFSTR },
2364 #ifdef _CS_XBS5_LP64_OFF64_LINTFLAGS
2365 {
"XBS5_LP64_OFF64_LINTFLAGS", _CS_XBS5_LP64_OFF64_LINTFLAGS,
CONFSTR },
2368 #ifdef _SC_XBS5_LPBIG_OFFBIG
2369 {
"_XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG,
SYSCONF },
2371 #ifdef _CS_XBS5_LPBIG_OFFBIG_CFLAGS
2372 {
"XBS5_LPBIG_OFFBIG_CFLAGS", _CS_XBS5_LPBIG_OFFBIG_CFLAGS,
CONFSTR },
2374 #ifdef _CS_XBS5_LPBIG_OFFBIG_LDFLAGS
2375 {
"XBS5_LPBIG_OFFBIG_LDFLAGS", _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,
CONFSTR },
2377 #ifdef _CS_XBS5_LPBIG_OFFBIG_LIBS
2378 {
"XBS5_LPBIG_OFFBIG_LIBS", _CS_XBS5_LPBIG_OFFBIG_LIBS,
CONFSTR },
2380 #ifdef _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
2381 {
"XBS5_LPBIG_OFFBIG_LINTFLAGS", _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,
CONFSTR },
2384 #ifdef _SC_V6_ILP32_OFF32
2385 {
"_POSIX_V6_ILP32_OFF32", _SC_V6_ILP32_OFF32,
SYSCONF },
2387 #ifdef _CS_POSIX_V6_ILP32_OFF32_CFLAGS
2388 {
"POSIX_V6_ILP32_OFF32_CFLAGS", _CS_POSIX_V6_ILP32_OFF32_CFLAGS,
CONFSTR },
2390 #ifdef _CS_POSIX_V6_ILP32_OFF32_LDFLAGS
2391 {
"POSIX_V6_ILP32_OFF32_LDFLAGS", _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,
CONFSTR },
2393 #ifdef _CS_POSIX_V6_ILP32_OFF32_LIBS
2394 {
"POSIX_V6_ILP32_OFF32_LIBS", _CS_POSIX_V6_ILP32_OFF32_LIBS,
CONFSTR },
2396 #ifdef _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS
2397 {
"POSIX_V6_ILP32_OFF32_LINTFLAGS", _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,
CONFSTR },
2400 #ifdef _CS_V6_WIDTH_RESTRICTED_ENVS
2401 {
"_POSIX_V6_WIDTH_RESTRICTED_ENVS", _CS_V6_WIDTH_RESTRICTED_ENVS,
CONFSTR },
2404 #ifdef _SC_V6_ILP32_OFFBIG
2405 {
"_POSIX_V6_ILP32_OFFBIG", _SC_V6_ILP32_OFFBIG,
SYSCONF },
2407 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
2408 {
"POSIX_V6_ILP32_OFFBIG_CFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,
CONFSTR },
2410 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
2411 {
"POSIX_V6_ILP32_OFFBIG_LDFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,
CONFSTR },
2413 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_LIBS
2414 {
"POSIX_V6_ILP32_OFFBIG_LIBS", _CS_POSIX_V6_ILP32_OFFBIG_LIBS,
CONFSTR },
2416 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS
2417 {
"POSIX_V6_ILP32_OFFBIG_LINTFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,
CONFSTR },
2420 #ifdef _SC_V6_LP64_OFF64
2421 {
"_POSIX_V6_LP64_OFF64", _SC_V6_LP64_OFF64,
SYSCONF },
2423 #ifdef _CS_POSIX_V6_LP64_OFF64_CFLAGS
2424 {
"POSIX_V6_LP64_OFF64_CFLAGS", _CS_POSIX_V6_LP64_OFF64_CFLAGS,
CONFSTR },
2426 #ifdef _CS_POSIX_V6_LP64_OFF64_LDFLAGS
2427 {
"POSIX_V6_LP64_OFF64_LDFLAGS", _CS_POSIX_V6_LP64_OFF64_LDFLAGS,
CONFSTR },
2429 #ifdef _CS_POSIX_V6_LP64_OFF64_LIBS
2430 {
"POSIX_V6_LP64_OFF64_LIBS", _CS_POSIX_V6_LP64_OFF64_LIBS,
CONFSTR },
2432 #ifdef _CS_POSIX_V6_LP64_OFF64_LINTFLAGS
2433 {
"POSIX_V6_LP64_OFF64_LINTFLAGS", _CS_POSIX_V6_LP64_OFF64_LINTFLAGS,
CONFSTR },
2436 #ifdef _SC_V6_LPBIG_OFFBIG
2437 {
"_POSIX_V6_LPBIG_OFFBIG", _SC_V6_LPBIG_OFFBIG,
SYSCONF },
2439 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
2440 {
"POSIX_V6_LPBIG_OFFBIG_CFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,
CONFSTR },
2442 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
2443 {
"POSIX_V6_LPBIG_OFFBIG_LDFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,
CONFSTR },
2445 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LIBS
2446 {
"POSIX_V6_LPBIG_OFFBIG_LIBS", _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,
CONFSTR },
2448 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS
2449 {
"POSIX_V6_LPBIG_OFFBIG_LINTFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,
CONFSTR },
2452 #ifdef _SC_ADVISORY_INFO
2453 {
"_POSIX_ADVISORY_INFO", _SC_ADVISORY_INFO,
SYSCONF },
2456 {
"_POSIX_BARRIERS", _SC_BARRIERS,
SYSCONF },
2459 {
"_POSIX_BASE", _SC_BASE,
SYSCONF },
2461 #ifdef _SC_C_LANG_SUPPORT
2462 {
"_POSIX_C_LANG_SUPPORT", _SC_C_LANG_SUPPORT,
SYSCONF },
2464 #ifdef _SC_C_LANG_SUPPORT_R
2465 {
"_POSIX_C_LANG_SUPPORT_R", _SC_C_LANG_SUPPORT_R,
SYSCONF },
2467 #ifdef _SC_CLOCK_SELECTION
2468 {
"_POSIX_CLOCK_SELECTION", _SC_CLOCK_SELECTION,
SYSCONF },
2471 {
"_POSIX_CPUTIME", _SC_CPUTIME,
SYSCONF },
2473 #ifdef _SC_THREAD_CPUTIME
2474 {
"_POSIX_THREAD_CPUTIME", _SC_THREAD_CPUTIME,
SYSCONF },
2476 #ifdef _SC_DEVICE_SPECIFIC
2477 {
"_POSIX_DEVICE_SPECIFIC", _SC_DEVICE_SPECIFIC,
SYSCONF },
2479 #ifdef _SC_DEVICE_SPECIFIC_R
2480 {
"_POSIX_DEVICE_SPECIFIC_R", _SC_DEVICE_SPECIFIC_R,
SYSCONF },
2483 {
"_POSIX_FD_MGMT", _SC_FD_MGMT,
SYSCONF },
2486 {
"_POSIX_FIFO", _SC_FIFO,
SYSCONF },
2489 {
"_POSIX_PIPE", _SC_PIPE,
SYSCONF },
2491 #ifdef _SC_FILE_ATTRIBUTES
2492 {
"_POSIX_FILE_ATTRIBUTES", _SC_FILE_ATTRIBUTES,
SYSCONF },
2494 #ifdef _SC_FILE_LOCKING
2495 {
"_POSIX_FILE_LOCKING", _SC_FILE_LOCKING,
SYSCONF },
2497 #ifdef _SC_FILE_SYSTEM
2498 {
"_POSIX_FILE_SYSTEM", _SC_FILE_SYSTEM,
SYSCONF },
2500 #ifdef _SC_MONOTONIC_CLOCK
2501 {
"_POSIX_MONOTONIC_CLOCK", _SC_MONOTONIC_CLOCK,
SYSCONF },
2503 #ifdef _SC_MULTI_PROCESS
2504 {
"_POSIX_MULTI_PROCESS", _SC_MULTI_PROCESS,
SYSCONF },
2506 #ifdef _SC_SINGLE_PROCESS
2507 {
"_POSIX_SINGLE_PROCESS", _SC_SINGLE_PROCESS,
SYSCONF },
2509 #ifdef _SC_NETWORKING
2510 {
"_POSIX_NETWORKING", _SC_NETWORKING,
SYSCONF },
2512 #ifdef _SC_READER_WRITER_LOCKS
2513 {
"_POSIX_READER_WRITER_LOCKS", _SC_READER_WRITER_LOCKS,
SYSCONF },
2515 #ifdef _SC_SPIN_LOCKS
2516 {
"_POSIX_SPIN_LOCKS", _SC_SPIN_LOCKS,
SYSCONF },
2519 {
"_POSIX_REGEXP", _SC_REGEXP,
SYSCONF },
2521 #ifdef _SC_REGEX_VERSION
2522 {
"_REGEX_VERSION", _SC_REGEX_VERSION,
SYSCONF },
2525 {
"_POSIX_SHELL", _SC_SHELL,
SYSCONF },
2528 {
"_POSIX_SIGNALS", _SC_SIGNALS,
SYSCONF },
2531 {
"_POSIX_SPAWN", _SC_SPAWN,
SYSCONF },
2533 #ifdef _SC_SPORADIC_SERVER
2534 {
"_POSIX_SPORADIC_SERVER", _SC_SPORADIC_SERVER,
SYSCONF },
2536 #ifdef _SC_THREAD_SPORADIC_SERVER
2537 {
"_POSIX_THREAD_SPORADIC_SERVER", _SC_THREAD_SPORADIC_SERVER,
SYSCONF },
2539 #ifdef _SC_SYSTEM_DATABASE
2540 {
"_POSIX_SYSTEM_DATABASE", _SC_SYSTEM_DATABASE,
SYSCONF },
2542 #ifdef _SC_SYSTEM_DATABASE_R
2543 {
"_POSIX_SYSTEM_DATABASE_R", _SC_SYSTEM_DATABASE_R,
SYSCONF },
2546 {
"_POSIX_TIMEOUTS", _SC_TIMEOUTS,
SYSCONF },
2548 #ifdef _SC_TYPED_MEMORY_OBJECTS
2549 {
"_POSIX_TYPED_MEMORY_OBJECTS", _SC_TYPED_MEMORY_OBJECTS,
SYSCONF },
2551 #ifdef _SC_USER_GROUPS
2552 {
"_POSIX_USER_GROUPS", _SC_USER_GROUPS,
SYSCONF },
2554 #ifdef _SC_USER_GROUPS_R
2555 {
"_POSIX_USER_GROUPS_R", _SC_USER_GROUPS_R,
SYSCONF },
2558 {
"POSIX2_PBS", _SC_2_PBS,
SYSCONF },
2560 #ifdef _SC_2_PBS_ACCOUNTING
2561 {
"POSIX2_PBS_ACCOUNTING", _SC_2_PBS_ACCOUNTING,
SYSCONF },
2563 #ifdef _SC_2_PBS_LOCATE
2564 {
"POSIX2_PBS_LOCATE", _SC_2_PBS_LOCATE,
SYSCONF },
2566 #ifdef _SC_2_PBS_TRACK
2567 {
"POSIX2_PBS_TRACK", _SC_2_PBS_TRACK,
SYSCONF },
2569 #ifdef _SC_2_PBS_MESSAGE
2570 {
"POSIX2_PBS_MESSAGE", _SC_2_PBS_MESSAGE,
SYSCONF },
2572 #ifdef _SC_SYMLOOP_MAX
2573 {
"SYMLOOP_MAX", _SC_SYMLOOP_MAX,
SYSCONF },
2575 #ifdef _SC_STREAM_MAX
2576 {
"STREAM_MAX", _SC_STREAM_MAX,
SYSCONF },
2578 #ifdef _SC_AIO_LISTIO_MAX
2579 {
"AIO_LISTIO_MAX", _SC_AIO_LISTIO_MAX,
SYSCONF },
2582 {
"AIO_MAX", _SC_AIO_MAX,
SYSCONF },
2584 #ifdef _SC_AIO_PRIO_DELTA_MAX
2585 {
"AIO_PRIO_DELTA_MAX", _SC_AIO_PRIO_DELTA_MAX,
SYSCONF },
2587 #ifdef _SC_DELAYTIMER_MAX
2588 {
"DELAYTIMER_MAX", _SC_DELAYTIMER_MAX,
SYSCONF },
2590 #ifdef _SC_HOST_NAME_MAX
2591 {
"HOST_NAME_MAX", _SC_HOST_NAME_MAX,
SYSCONF },
2593 #ifdef _SC_LOGIN_NAME_MAX
2594 {
"LOGIN_NAME_MAX", _SC_LOGIN_NAME_MAX,
SYSCONF },
2596 #ifdef _SC_MQ_OPEN_MAX
2597 {
"MQ_OPEN_MAX", _SC_MQ_OPEN_MAX,
SYSCONF },
2599 #ifdef _SC_MQ_PRIO_MAX
2600 {
"MQ_PRIO_MAX", _SC_MQ_PRIO_MAX,
SYSCONF },
2602 #ifdef _SC_DEVICE_IO
2603 {
"_POSIX_DEVICE_IO", _SC_DEVICE_IO,
SYSCONF },
2606 {
"_POSIX_TRACE", _SC_TRACE,
SYSCONF },
2608 #ifdef _SC_TRACE_EVENT_FILTER
2609 {
"_POSIX_TRACE_EVENT_FILTER", _SC_TRACE_EVENT_FILTER,
SYSCONF },
2611 #ifdef _SC_TRACE_INHERIT
2612 {
"_POSIX_TRACE_INHERIT", _SC_TRACE_INHERIT,
SYSCONF },
2614 #ifdef _SC_TRACE_LOG
2615 {
"_POSIX_TRACE_LOG", _SC_TRACE_LOG,
SYSCONF },
2617 #ifdef _SC_RTSIG_MAX
2618 {
"RTSIG_MAX", _SC_RTSIG_MAX,
SYSCONF },
2620 #ifdef _SC_SEM_NSEMS_MAX
2621 {
"SEM_NSEMS_MAX", _SC_SEM_NSEMS_MAX,
SYSCONF },
2623 #ifdef _SC_SEM_VALUE_MAX
2624 {
"SEM_VALUE_MAX", _SC_SEM_VALUE_MAX,
SYSCONF },
2626 #ifdef _SC_SIGQUEUE_MAX
2627 {
"SIGQUEUE_MAX", _SC_SIGQUEUE_MAX,
SYSCONF },
2629 #ifdef _PC_FILESIZEBITS
2630 {
"FILESIZEBITS", _PC_FILESIZEBITS,
PATHCONF },
2632 #ifdef _PC_ALLOC_SIZE_MIN
2633 {
"POSIX_ALLOC_SIZE_MIN", _PC_ALLOC_SIZE_MIN,
PATHCONF },
2635 #ifdef _PC_REC_INCR_XFER_SIZE
2636 {
"POSIX_REC_INCR_XFER_SIZE", _PC_REC_INCR_XFER_SIZE,
PATHCONF },
2638 #ifdef _PC_REC_MAX_XFER_SIZE
2639 {
"POSIX_REC_MAX_XFER_SIZE", _PC_REC_MAX_XFER_SIZE,
PATHCONF },
2641 #ifdef _PC_REC_MIN_XFER_SIZE
2642 {
"POSIX_REC_MIN_XFER_SIZE", _PC_REC_MIN_XFER_SIZE,
PATHCONF },
2644 #ifdef _PC_REC_XFER_ALIGN
2645 {
"POSIX_REC_XFER_ALIGN", _PC_REC_XFER_ALIGN,
PATHCONF },
2647 #ifdef _PC_SYMLINK_MAX
2648 {
"SYMLINK_MAX", _PC_SYMLINK_MAX,
PATHCONF },
2650 #ifdef _CS_GNU_LIBC_VERSION
2651 {
"GNU_LIBC_VERSION", _CS_GNU_LIBC_VERSION,
CONFSTR },
2653 #ifdef _CS_GNU_LIBPTHREAD_VERSION
2654 {
"GNU_LIBPTHREAD_VERSION", _CS_GNU_LIBPTHREAD_VERSION,
CONFSTR },
2656 #ifdef _PC_2_SYMLINKS
2657 {
"POSIX2_SYMLINKS", _PC_2_SYMLINKS,
PATHCONF },
2660 #ifdef _SC_LEVEL1_ICACHE_SIZE
2661 {
"LEVEL1_ICACHE_SIZE", _SC_LEVEL1_ICACHE_SIZE,
SYSCONF },
2663 #ifdef _SC_LEVEL1_ICACHE_ASSOC
2664 {
"LEVEL1_ICACHE_ASSOC", _SC_LEVEL1_ICACHE_ASSOC,
SYSCONF },
2666 #ifdef _SC_LEVEL1_ICACHE_LINESIZE
2667 {
"LEVEL1_ICACHE_LINESIZE", _SC_LEVEL1_ICACHE_LINESIZE,
SYSCONF },
2669 #ifdef _SC_LEVEL1_DCACHE_SIZE
2670 {
"LEVEL1_DCACHE_SIZE", _SC_LEVEL1_DCACHE_SIZE,
SYSCONF },
2672 #ifdef _SC_LEVEL1_DCACHE_ASSOC
2673 {
"LEVEL1_DCACHE_ASSOC", _SC_LEVEL1_DCACHE_ASSOC,
SYSCONF },
2675 #ifdef _SC_LEVEL1_DCACHE_LINESIZE
2676 {
"LEVEL1_DCACHE_LINESIZE", _SC_LEVEL1_DCACHE_LINESIZE,
SYSCONF },
2678 #ifdef _SC_LEVEL2_CACHE_SIZE
2679 {
"LEVEL2_CACHE_SIZE", _SC_LEVEL2_CACHE_SIZE,
SYSCONF },
2681 #ifdef _SC_LEVEL2_CACHE_ASSOC
2682 {
"LEVEL2_CACHE_ASSOC", _SC_LEVEL2_CACHE_ASSOC,
SYSCONF },
2684 #ifdef _SC_LEVEL2_CACHE_LINESIZE
2685 {
"LEVEL2_CACHE_LINESIZE", _SC_LEVEL2_CACHE_LINESIZE,
SYSCONF },
2687 #ifdef _SC_LEVEL3_CACHE_SIZE
2688 {
"LEVEL3_CACHE_SIZE", _SC_LEVEL3_CACHE_SIZE,
SYSCONF },
2690 #ifdef _SC_LEVEL3_CACHE_ASSOC
2691 {
"LEVEL3_CACHE_ASSOC", _SC_LEVEL3_CACHE_ASSOC,
SYSCONF },
2693 #ifdef _SC_LEVEL3_CACHE_LINESIZE
2694 {
"LEVEL3_CACHE_LINESIZE", _SC_LEVEL3_CACHE_LINESIZE,
SYSCONF },
2696 #ifdef _SC_LEVEL4_CACHE_SIZE
2697 {
"LEVEL4_CACHE_SIZE", _SC_LEVEL4_CACHE_SIZE,
SYSCONF },
2699 #ifdef _SC_LEVEL4_CACHE_ASSOC
2700 {
"LEVEL4_CACHE_ASSOC", _SC_LEVEL4_CACHE_ASSOC,
SYSCONF },
2704 {
"IPV6", _SC_IPV6,
SYSCONF },
2706 #ifdef _SC_RAW_SOCKETS
2707 {
"RAW_SOCKETS", _SC_RAW_SOCKETS,
SYSCONF },
2713 #define _GETCONF_PATH "/"
2725 const char * NS =
"getconf";
2732 if (_getconf_path == NULL) {
2733 _getconf_path =
rpmExpand(
"%{?_rpmds__getconf_path}", NULL);
2735 if (!(_getconf_path != NULL && *_getconf_path ==
'/')) {
2737 _getconf_path =
_free(_getconf_path);
2747 for (c = vars; c->
name != NULL; ++c) {
2755 sprintf(EVR,
"%ld", value);
2761 #if defined(_SC_UINT_MAX) && defined(_SC_ULONG_MAX)
2766 sprintf(EVR,
"%lu", value);
2772 sprintf(EVR,
"%ld", value);
2777 clen = confstr(c->
call_name, (
char *) NULL, 0);
2778 EVR = (
char *)
xmalloc(clen+1);
2780 if (confstr (c->
call_name, EVR, clen) != clen) {
2781 fprintf(stderr,
"confstr: %s\n", strerror(
errno));
2791 for (t = EVR; *t; t++) {
2792 if (*t ==
'\n') *t =
' ';
2794 if (!strcmp(N,
"GNU_LIBC_VERSION")
2795 || !strcmp(N,
"GNU_LIBPTHREAD_VERSION"))
2797 for (t = EVR; *t; t++) {
2798 if (*t ==
' ') *t =
'-';
2802 if (*EVR ==
'\0' || strchr(EVR,
' ') != NULL
2803 || (EVR[0] ==
'-' && strchr(
"0123456789", EVR[1]) == NULL))
2822 if (_rpmds_debug < 0)
2872 memset(PRCO, 0,
sizeof(*PRCO));
2883 static int scareMem = 0;
2893 PRCO->Pdsp = &PRCO->P;
2894 PRCO->Rdsp = &PRCO->R;
2895 PRCO->Cdsp = &PRCO->C;
2896 PRCO->Odsp = &PRCO->O;
2897 PRCO->Tdsp = &PRCO->T;
2898 PRCO->Ddsp = &PRCO->D;
2899 PRCO->Ldsp = &PRCO->L;
2928 #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__)
2929 #if defined(RPM_VENDOR_MANDRIVA)
2930 static char * sonameDep(
char * t,
const char * s,
int isElf64,
int devel,
int uClibc)
2936 tmp =
stpcpy(tmp,
"uClibc(");
2938 tmp =
stpcpy(tmp,
"devel(");
2940 #if !defined(__alpha__) && !defined(__sun)
2943 if (!devel && s[strlen(s)-1] !=
')')
2948 tmp = strstr(t,
".so");
2949 tmp =
stpcpy(tmp,
"(64bit)");
2955 char *
suffix = strstr(t,
".so");
2966 static char *find_elf_interpreter(GElf_Ehdr *ehdr, Elf *elf,
char *filename,
char *prev)
2969 struct stat statbuf;
2971 GElf_Shdr shdr_mem, *shdr;
2972 GElf_Phdr phdr_mem, *phdr;
2973 GElf_Dyn dyn_mem, *dyn;
2975 Elf_Scn *scn = NULL;
2977 char *interp_name = NULL;
2978 char *libpath = NULL;
2986 if (!(fp = fopen(filename,
"r"))) {
2990 if (fstat((fdno = fileno(fp)), &statbuf) < 0) {
2994 if ((
size_t) statbuf.st_size <
sizeof(Elf64_Ehdr) || !S_ISREG(statbuf.st_mode))
2997 (void) elf_version(EV_CURRENT);
2999 if ((elf = elf_begin (fdno, ELF_C_READ, NULL)) == NULL
3000 || elf_kind(elf) != ELF_K_ELF
3001 || (ehdr = gelf_getehdr(elf, &ehdr_mem)) == NULL
3002 || !(ehdr->e_type == ET_DYN || ehdr->e_type == ET_EXEC))
3007 if (ehdr->e_type != ET_EXEC && ehdr->e_type != ET_DYN) {
3008 fprintf(stderr,
"%s: not a dynamic executable\n", filename);
3011 class = gelf_getclass(elf);
3013 for (cnt = 0; cnt < ehdr->e_phnum; cnt++) {
3014 phdr = gelf_getphdr (elf, cnt, &phdr_mem);
3015 if (phdr->p_type == PT_INTERP)
3020 Elf_Data *data = NULL;
3022 scn = gelf_offscn (elf, phdr->p_offset);
3023 shdr = gelf_getshdr(scn, &shdr_mem);
3024 data = elf_getdata (scn, data);
3025 if (data && data->d_buf) {
3026 interp_name = strdup(data->d_buf);
3032 if (elf_getshdrstrndx (elf, &shstrndx) >= 0)
3033 while ((scn = elf_nextscn(elf, scn)) != NULL) {
3034 shdr = gelf_getshdr(scn, &shdr_mem);
3035 if (shdr->sh_type == SHT_DYNAMIC) {
3037 for (cnt = 0; cnt < ehdr->e_phnum; cnt++) {
3038 phdr = gelf_getphdr (elf, cnt, &phdr_mem);
3039 if (phdr->p_type == PT_LOAD)
3044 while ((data = elf_getdata (scn, data)) != NULL) {
3045 int dynsize = (int)(shdr->sh_size / shdr->sh_entsize)-1;
3046 for (cnt = dynsize; cnt >= 0; --cnt) {
3047 dyn = gelf_getdyn (data, cnt, &dyn_mem);
3049 if (dyn->d_tag == DT_RPATH || dyn->d_tag == DT_RUNPATH) {
3050 rpath = elf_strptr (elf, shdr->sh_link, dyn->d_un.d_val);
3054 for (cnt = 0; cnt <= dynsize; ++cnt) {
3055 dyn = gelf_getdyn (data, cnt, &dyn_mem);
3060 if (phdr && dyn->d_tag == DT_SONAME) {
3061 interp_name = strdup(elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val));
3064 if (dyn->d_tag == DT_NEEDED) {
3071 libpath = elf_strptr (elf, shdr->sh_link, dyn->d_un.d_val);
3072 if (prev && *prev && libpath && !strcmp(basename(prev), libpath))
3075 if (!libpath || !strlen(libpath))
3086 if (stat(libpath, &statbuf) == 0)
3090 if (rpath && *rpath) {
3091 tmp2 =
stpcpy(buf, rpath);
3093 tmp =
getenv(
"LD_LIBRARY_PATH");
3095 tmp2 =
stpcpy(tmp2, tmp);
3096 if ((rpath && *rpath) || tmp)
3097 tmp2 =
stpcpy(tmp2,
":");
3099 tmp2 =
stpcpy(tmp2, (
class == ELFCLASS64) ?
"/lib64:/usr/lib64" :
"/lib:/usr/lib");
3101 buildroot =
rpmExpand(
"%{buildroot}", NULL);
3102 if (stat(buildroot, &statbuf) == 0) {
3104 for (tmp2 = buf, tmp = path;
3107 tmp =
stpcpy(tmp, buildroot);
3108 tmp3 = strchr(tmp2,
':');
3129 while ((path_n = strstr(path_n,
"//"))) {
3131 memmove(path_n, path_n + 1, i - 1);
3132 *(path_n + i - 1) =
'\0';
3136 for (i = strlen(path); i > 0; i--) {
3137 if (path[i] ==
':') {
3143 for (i = 0; i < count; i++) {
3144 strcpy(tmp, path_n);
3146 strcat(tmp, libpath);
3148 if (stat(tmp, &statbuf) == 0 && statbuf.st_mode & S_IRUSR) {
3152 path_n += (strlen(path_n) + 1);
3167 if (elf) (void) elf_end(elf);
3170 if (!interp_name && libpath)
3171 return find_elf_interpreter(NULL, NULL, libpath, filename);
3175 static int checkuClibc(GElf_Ehdr *ehdr, Elf *elf) {
3177 char *interp = find_elf_interpreter(ehdr, elf, NULL, NULL);
3180 char *tmp = basename(interp);
3181 if (tmp[0] ==
'l' && tmp[1] ==
'd') {
3182 tmp += ((tmp[2] ==
'3' && tmp[3] ==
'2') ||
3183 (tmp[2] ==
'6' && tmp[3] ==
'4')) ?
3185 if (!strncasecmp(tmp,
"uClibc.so",
sizeof(
"uClibc.so")-1))
3193 static char * sonameDep(
char * t,
const char * s,
int isElf64,
int devel,
int uClibc)
3197 #if !defined(__alpha__) && !defined(__sun)
3199 if (s[strlen(s)-1] !=
')')
3213 int (*add) (
void * context,
rpmds ds),
void * context)
3215 #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__)
3219 GElf_Ehdr ehdr_mem, * ehdr;
3220 GElf_Shdr shdr_mem, * shdr;
3221 GElf_Verdef def_mem, * def;
3222 GElf_Verneed need_mem, * need;
3223 GElf_Dyn dyn_mem, * dyn;
3224 unsigned int auxoffset;
3225 unsigned int offset;
3232 const char * soname = NULL;
3245 static int filter_GLIBC_PRIVATE = 0;
3246 static int oneshot = 0;
3249 if (_rpmds_debug < 0)
3250 fprintf(stderr,
"*** rpmdsELF(%s, %d, %p, %p)\n", fn, flags, (
void *)add, context);
3258 {
struct stat sb, * st = &sb;
3259 if (stat(fn, st) != 0)
3261 is_executable = (int)(st->st_mode & (S_IXUSR|S_IXGRP|S_IXOTH));
3264 fdno = open(fn, O_RDONLY);
3268 (void) elf_version(EV_CURRENT);
3272 if ((elf = elf_begin (fdno, ELF_C_READ, NULL)) == NULL
3273 || elf_kind(elf) != ELF_K_ELF
3274 || (ehdr = gelf_getehdr(elf, &ehdr_mem)) == NULL
3275 || !(ehdr->e_type == ET_DYN || ehdr->e_type == ET_EXEC))
3279 isElf64 = ehdr->e_ident[EI_CLASS] == ELFCLASS64;
3280 isDSO = ehdr->e_type == ET_DYN;
3281 #if defined(RPM_VENDOR_MANDRIVA)
3282 isuClibc = checkuClibc(ehdr, elf);
3289 while ((scn = elf_nextscn(elf, scn)) != NULL) {
3290 shdr = gelf_getshdr(scn, &shdr_mem);
3294 soname =
_free(soname);
3295 switch (shdr->sh_type) {
3300 #if defined(HAVE_GELF_GETNOTE)
3301 if (!(shdr->sh_flags & SHF_ALLOC))
3304 while ((data = elf_getdata(scn, data)) != NULL) {
3309 while (offset < data->d_size
3310 && (offset = gelf_getnote(data, offset,
3311 &nhdr, &name_offset, &desc_offset)) > 0)
3313 const char *
name = ((
char *)data->d_buf) + name_offset;
3314 const char *desc = ((
char *)data->d_buf) + desc_offset;
3315 if (
memchr(name,
'\0', nhdr.n_namesz) == NULL)
3317 switch (nhdr.n_type) {
3319 #if !defined(NT_GNU_BUILD_ID)
3320 #define NT_GNU_BUILD_ID 3
3322 case NT_GNU_BUILD_ID:
3323 if (strcmp(name,
"GNU") == 0 && nhdr.n_descsz > 0) {
3324 static const char hex[] =
"0123456789abcdef";
3330 for (i = 0; i < nhdr.n_descsz; ++i) {
3331 *t++ = hex[ (((unsigned)desc[i] >> 4) & 0x0f) ];
3332 *t++ = hex[ (((unsigned)desc[i] ) & 0x0f) ];
3338 xx = add(context, ds);
3348 case SHT_GNU_verdef:
3351 while ((data = elf_getdata (scn, data)) != NULL) {
3353 for (cnt = (
int)shdr->sh_info; --cnt >= 0; ) {
3355 def = gelf_getverdef (data, offset, &def_mem);
3358 auxoffset = (unsigned)(offset + def->vd_aux);
3359 for (cnt2 = (
int)def->vd_cnt; --cnt2 >= 0; ) {
3360 GElf_Verdaux aux_mem, * aux;
3362 aux = gelf_getverdaux (data, auxoffset, &aux_mem);
3366 s = elf_strptr(elf, shdr->sh_link, aux->vda_name);
3370 if (def->vd_flags & VER_FLG_BASE) {
3371 soname =
_free(soname);
3375 && !(filter_GLIBC_PRIVATE != 0
3376 && !strcmp(s,
"GLIBC_PRIVATE")))
3386 sonameDep(t, buf, isElf64, 0, isuClibc),
3387 "", RPMSENSE_FIND_PROVIDES);
3388 xx = add(context, ds);
3392 auxoffset += aux->vda_next;
3394 offset += def->vd_next;
3398 case SHT_GNU_verneed:
3401 if (!skipR && is_executable)
3402 while ((data = elf_getdata (scn, data)) != NULL) {
3404 for (cnt = (
int)shdr->sh_info; --cnt >= 0; ) {
3405 need = gelf_getverneed (data, offset, &need_mem);
3409 s = elf_strptr(elf, shdr->sh_link, need->vn_file);
3412 soname =
_free(soname);
3414 auxoffset = (unsigned)(offset + need->vn_aux);
3415 for (cnt2 = (
int)need->vn_cnt; --cnt2 >= 0; ) {
3416 GElf_Vernaux aux_mem, * aux;
3418 aux = gelf_getvernaux (data, auxoffset, &aux_mem);
3422 s = elf_strptr(elf, shdr->sh_link, aux->vna_name);
3428 && !(filter_GLIBC_PRIVATE != 0
3429 && !strcmp(s,
"GLIBC_PRIVATE")))
3439 sonameDep(t, buf, isElf64, 0, isuClibc),
3440 "", RPMSENSE_FIND_REQUIRES);
3441 xx = add(context, ds);
3445 auxoffset += aux->vna_next;
3447 offset += need->vn_next;
3453 while ((data = elf_getdata (scn, data)) != NULL) {
3454 for (cnt = 0; cnt < (int)(shdr->sh_size / shdr->sh_entsize); ++cnt) {
3455 dyn = gelf_getdyn (data, cnt, &dyn_mem);
3459 switch (dyn->d_tag) {
3474 if (skipR || !is_executable)
3477 s = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val);
3481 sonameDep(buf, s, isElf64, 0, isuClibc),
3482 "", RPMSENSE_FIND_REQUIRES);
3483 xx = add(context, ds);
3491 s = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val);
3496 sonameDep(buf, s, isElf64, 0, isuClibc),
3497 "", RPMSENSE_FIND_PROVIDES);
3498 xx = add(context, ds);
3510 #if !defined(RPM_VENDOR_MANDRIVA)
3513 if (gotGNUHASH && !gotHASH) {
3515 RPMSENSE_FIND_REQUIRES);
3516 xx = add(context, ds);
3523 if (!skipP && isDSO && !gotDEBUG && !gotSONAME) {
3524 s = strrchr(fn,
'/');
3534 sonameDep(buf, s, isElf64, 0, isuClibc),
"", RPMSENSE_FIND_PROVIDES);
3535 xx = add(context, ds);
3541 soname =
_free(soname);
3542 if (elf) (void) elf_end(elf);
3553 #if defined(RPM_VENDOR_MANDRIVA)
3563 int rpmdsSymlink(
const char * fn,
int flags,
3564 int (*add) (
void * context,
rpmds ds),
void * context)
3567 int rpmdsSymlink(
const char * fn,
int flags,
3568 int (*add) (
void * context,
rpmds ds),
void * context)
3570 #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__)
3574 GElf_Ehdr ehdr_mem, * ehdr;
3575 GElf_Shdr shdr_mem, * shdr;
3576 GElf_Dyn dyn_mem, * dyn;
3581 const char * s, * bn;
3584 const char * soname = NULL;
3598 const char *filterRequires[] = {
"ld-linux",
"ld64-linux" "libBrokenLocale.so",
3599 "libanl.so",
"libc.so",
"libcidn.so",
"libcrypt.so",
"libdl.so",
"libm.so",
3600 "libnsl.so",
"libnss_compat.so",
"libnss_dns.so",
"libnss_files.so",
3601 "libnss_hesiod.so",
"libnss_nis.so",
"libnss_nisplus.so",
"libpthread.so",
3602 "libresolv.so",
"librt.so",
"libutil.so",
"libthread_db.so"};
3606 bn = basename((
char*)fn);
3616 if (!
mireRegcomp(mire,
"^.*/(usr/)?lib(64)?/lib.*\\.so$"))
3624 if (_rpmds_debug < 0)
3625 fprintf(stderr,
"*** rpmdsELF(%s, %d, %p, %p)\n", fn, flags, (
void *)add, context);
3629 {
struct stat sb, * st = &sb;
3630 if (lstat(fn, st) != 0)
3632 is_executable = (int)(st->st_mode & (S_IXUSR|S_IXGRP|S_IXOTH));
3633 is_symlink =
S_ISLNK(st->st_mode);
3638 if ((lnklen = readlink(fn, path, MAXPATHLEN - 1)) == -1) {
3643 path[lnklen] =
'\0';
3648 bn = basename((
char*)fn);
3649 if (strncmp(bn, basename(path), (
size_t)(strstr(bn,
".so") - bn)))
3652 FILE *fp = fopen(fn,
"r");
3657 if (fp == NULL || ferror(fp)) {
3658 if (fp) (void) fclose(fp);
3665 while ((in = fgets(buf,
sizeof(buf) - 1, fp))) {
3666 in[
sizeof(buf)-1] =
'\0';
3667 if ((in = strstr(in,
"GROUP")) &&
3668 (in = strchr(in,
'(')) &&
3669 (fn = strchr(in,
'/')) &&
3670 (in = strchr(fn,
' '))) {
3674 if (ferror(fp) || feof(fp))
3682 struct stat sb, * st = &sb;
3684 while((in = strrchr(path,
'/'))) {
3686 if (stat(path, st) == 0) {
3697 fdno = open(fn, O_RDONLY);
3701 (void) elf_version(EV_CURRENT);
3705 if ((elf = elf_begin (fdno, ELF_C_READ, NULL)) == NULL
3706 || elf_kind(elf) != ELF_K_ELF
3707 || (ehdr = gelf_getehdr(elf, &ehdr_mem)) == NULL
3708 || !(ehdr->e_type == ET_DYN || ehdr->e_type == ET_EXEC))
3712 isElf64 = ehdr->e_ident[EI_CLASS] == ELFCLASS64;
3713 #if defined(RPM_VENDOR_MANDRIVA)
3714 isuClibc = checkuClibc(ehdr, elf);
3721 while ((scn = elf_nextscn(elf, scn)) != NULL) {
3722 shdr = gelf_getshdr(scn, &shdr_mem);
3726 soname =
_free(soname);
3727 switch (shdr->sh_type) {
3733 while ((data = elf_getdata (scn, data)) != NULL) {
3734 for (cnt = 0; cnt < (int)(shdr->sh_size / shdr->sh_entsize); ++cnt) {
3735 dyn = gelf_getdyn (data, cnt, &dyn_mem);
3739 switch (dyn->d_tag) {
3745 if (skipR || !is_executable)
3748 s = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val);
3752 for (i = 0; i < (int)(
sizeof(filterRequires)/
sizeof(filterRequires[0])); i++)
3753 if (!strncmp(s, filterRequires[i], strlen(filterRequires[i])) && !isuClibc)
3756 if (
sizeof(filterRequires)/
sizeof(filterRequires[0]) == i)
3761 s = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val);
3768 sonameDep(buf, s, isElf64, 1, isuClibc),
3769 "", RPMSENSE_FIND_PROVIDES);
3770 xx = add(context, ds);
3784 if (gotSONAME && !skipR) {
3785 for (i = 0, cnt =
argvCount(deps); i < cnt; i++) {
3786 if (deps[i][0] ==
'l' && deps[i][1] ==
'd')
3789 sonameDep(buf, deps[i], isElf64, 1, isuClibc),
3790 "", RPMSENSE_FIND_REQUIRES);
3791 xx = add(context, ds);
3798 if (elf) (void) elf_end(elf);
3808 #define _SBIN_LDCONFIG_P "/sbin/ldconfig -p"
3812 #define _LD_SO_CACHE "/etc/ld.so.cache"
3822 const char *N, *EVR;
3836 if (_ldconfig_cmd == NULL) {
3837 _ldconfig_cmd =
rpmExpand(
"%{?_rpmds_ldconfig_cmd}", NULL);
3838 if (!(_ldconfig_cmd != NULL && *_ldconfig_cmd ==
'/')) {
3840 _ldconfig_cmd =
_free(_ldconfig_cmd);
3846 if (_ldconfig_cache == NULL) {
3847 _ldconfig_cache =
rpmExpand(
"%{?_rpmds_ldconfig_cache}", NULL);
3849 if (!(_ldconfig_cache != NULL && *_ldconfig_cache ==
'/')) {
3851 _ldconfig_cache =
_free(_ldconfig_cache);
3861 if (_rpmds_debug < 0)
3862 fprintf(stderr,
"*** rpmdsLdconfig(%p, %s) P %p R %p C %p O %p T %p D %p L %p\n", PRCO, fn, PRCO->Pdsp, PRCO->Rdsp, PRCO->Cdsp, PRCO->Odsp, PRCO->Tdsp, PRCO->Ddsp, PRCO->Ldsp);
3864 fp = popen(_ldconfig_cmd,
"r");
3868 while((f = fgets(buf, (
int)
sizeof(buf), fp)) != NULL) {
3881 while (*fe && !(fe[0] ==
'=' && fe[1] ==
'>'))
3896 if (fe > f && fe[-1] ==
' ') fe[-1] =
'\0';
3908 for (t = f; *t !=
'\0'; t++) {
3926 Flags = (
evrFlags) (Flags | RPMSENSE_PROBE);
3937 if (fp != NULL) (void) pclose(fp);
3943 #define _RLD_SEARCH_PATH "/lib:/usr/lib"
3945 static const char * _rld_search_path = NULL;
3948 int rpmdsRldpath(
rpmPRCO PRCO,
const char * rldp)
3953 const char *N, *EVR;
3967 if (_rld_search_path == NULL) {
3968 _rld_search_path =
rpmExpand(
"%{?_rpmds_rld_search_path}", NULL);
3970 if (!(_rld_search_path != NULL && *_rld_search_path ==
'/')) {
3972 _rld_search_path =
_free(_rld_search_path);
3974 _rld_search_path =
xstrdup(_RLD_SEARCH_PATH);
3980 rldp = _rld_search_path;
3982 if (_rpmds_debug > 0)
3983 fprintf(stderr,
"*** rpmdsRldpath(%p, %s) P %p R %p C %p O %p\n", PRCO, rldp, PRCO->Pdsp, PRCO->Rdsp, PRCO->Cdsp, PRCO->Odsp);
3996 strncpy(buf, f, g - f + 1);
4003 if ( !(strlen(buf) > 0 && buf[0] ==
'/') )
4008 strcat(buf,
"/*.so.*");
4010 if (_rpmds_debug > 0)
4011 fprintf(stderr,
"*** rpmdsRldpath(%p, %s) globbing %s\n", PRCO, rldp, buf);
4013 xx =
Glob(buf, 0, NULL, &gl);
4017 if (_rpmds_debug > 0)
4018 fprintf(stderr,
"*** rpmdsRldpath(%p, %s) glob matched %d files\n", PRCO, rldp, gl.
gl_pathc);
4031 N = DSOfn + strlen(DSOfn);
4032 while (N > DSOfn && *N !=
'/')
4035 Flags |= RPMSENSE_PROBE;
4052 #define _SOLARIS_CRLE "/usr/sbin/crle"
4054 static const char * _crle_cmd = NULL;
4056 int rpmdsCrle(
rpmPRCO PRCO,
const char * fn)
4072 if (_crle_cmd == NULL) {
4073 _crle_cmd =
rpmExpand(
"%{?_rpmds_crle_cmd}", NULL);
4074 if (!(_crle_cmd != NULL && *_crle_cmd ==
'/')) {
4076 _crle_cmd =
_free(_crle_cmd);
4078 _crle_cmd =
xstrdup(_SOLARIS_CRLE);
4083 fp = popen(_crle_cmd,
"r");
4092 while((f = fgets(buf,
sizeof(buf), fp)) != NULL) {
4096 g = strstr(f,
"(ELF):");
4101 f = g + (
sizeof(
"(ELF):")-1);
4114 rc = rpmdsRldpath(PRCO, f);
4123 static const char * NS =
"uname";
4124 struct utsname myun;
4137 if (un->sysname != NULL)
4139 if (un->nodename != NULL)
4141 if (un->release != NULL)
4144 if (un->version != NULL)
4147 if (un->machine != NULL)
4149 #if defined(__linux__)
4150 if (un->domainname != NULL && strcmp(un->domainname,
"(none)"))
4160 #define _PERL_PROVIDES "/usr/bin/find /usr/lib/perl5 | /usr/lib/rpm/perl.prov"
4169 const char *N, *EVR;
4175 const char * fn =
"pipe";
4182 if (_perldeps_cmd == NULL) {
4183 _perldeps_cmd =
rpmExpand(
"%{?_rpmds_perldeps_cmd}", NULL);
4185 if (!(_perldeps_cmd != NULL && *_perldeps_cmd ==
'/')) {
4187 _perldeps_cmd =
_free(_perldeps_cmd);
4199 fp = popen(cmd,
"r");
4205 while((f = fgets(buf, (
int)
sizeof(buf), fp)) != NULL) {
4209 buf[
sizeof(buf)-1] =
'\0';
4216 if (*f ==
'\0' || *f ==
'#')
4226 if (*f ==
'!') fe++;
4227 while (*fe && !
_isspace(*fe) && strchr(
"!<=>", *fe) == NULL)
4232 if (!(
xisalnum(f[0]) || strchr(
"/_%!", f[0]) != NULL)) {
4234 fprintf(stderr,
_(
"running \"%s\" pipe command\n"), cmd);
4235 fprintf(stderr,
_(
"%s:%d \"%s\" has invalid name. Skipping ...\n"),
4245 if (*f !=
'/' && *fe !=
'\0') {
4251 fprintf(stderr,
_(
"running \"%s\" pipe command\n"), cmd),
4252 fprintf(stderr,
_(
"%s:%d \"%s\" has no comparison operator. Skipping ...\n"),
4263 fprintf(stderr,
_(
"running \"%s\" pipe command\n"), cmd),
4265 fprintf(stderr,
_(
"\tline %d: No EVR comparison value found.\n Skipping ..."),
4267 fprintf(stderr,
_(
"%s:%d \"%s\" has no EVR string. Skipping ...\n"),
4284 Flags = (
evrFlags) (Flags | RPMSENSE_PROBE);
4293 if (fp != NULL) (void) pclose(fp);
4300 const char * AN = A->ns.N;
4301 const char * AA = A->ns.A;
4302 const char * BN = B->ns.N;
4303 const char * BA = B->ns.A;
4307 rc = strcmp(AN, BN);
4308 }
else if (AA && !BA) {
4309 rc = strncmp(AN, BN, (AA - AN)) || BN[AA - AN];
4311 rc = strcmp(AA, B->A);
4312 }
else if (!AA && BA) {
4313 rc = strncmp(AN, BN, (BA - BN)) || AN[BA - BN];
4315 rc = strcmp(BA, A->A);
4317 rc = strcmp(AN, BN);
4334 if (evr_tuple_order == NULL) {
4336 evr_tuple_order =
rpmExpand(
"%{?evr_tuple_order}", NULL);
4338 if (evr_tuple_order == NULL || evr_tuple_order[0] ==
'\0')
4339 evr_tuple_order =
xstrdup(
"EVR");
4341 assert(evr_tuple_order != NULL && evr_tuple_order[0] !=
'\0');
4349 const char *aDepend = (A->DNEVR != NULL ?
xstrdup(A->DNEVR+2) :
"");
4350 const char *bDepend = (B->DNEVR != NULL ?
xstrdup(B->DNEVR+2) :
"");
4355 int (*EVRcmp) (
const char *a,
const char *b);
4358 int set_version = 0;
4363 assert((
rpmdsFlags(B) & RPMSENSE_SENSEMASK) == B->ns.Flags);
4372 if (!(A->EVR && A->Flags && B->EVR && B->Flags))
4376 if (!(aFlags && bFlags))
4380 if (!(A->EVR[A->i] && *A->EVR[A->i] && B->EVR[B->i] && *B->EVR[B->i]))
4384 xx = (A->EVRparse ? A->EVRparse :
rpmEVRparse) (A->EVR[A->i], a);
4385 xx = (B->EVRparse ? B->EVRparse :
rpmEVRparse) (B->EVR[B->i], b);
4388 EVRcmp = (A->EVRcmp && B->EVRcmp && A->EVRcmp == B->EVRcmp)
4396 default:
continue;
break;
4399 if (a->F[ix] && *a->F[ix] && b->F[ix] && *b->F[ix]) {
4401 if (!strcmp(a->F[ix],
"set") && !strcmp(b->F[ix],
"set"))
4407 if (a->F[ix] && *a->F[ix] && atol(a->F[ix]) > 0) {
4408 if (!B->nopromote) {
4409 int lvl = (_rpmds_unspecified_epoch_noise
4411 rpmlog(lvl,
_(
"The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n\tA = \"%s\"\tB = \"%s\"\n"),
4417 if (b->F[ix] && *b->F[ix] && atol(b->F[ix]) > 0)
4420 case 'V': ix = RPMEVR_V;
break;
4421 case 'T': ix = RPMEVR_T;
break;
4422 case 'R': ix = RPMEVR_R;
break;
4423 case 'D': ix = RPMEVR_D;
break;
4425 #if defined(RPM_VENDOR_MANDRIVA)
4428 && *(b->F[ix]) ==
'\0')
4430 if (a->F[ix] && b->F[ix])
4432 if (a->F[ix] && *a->F[ix] && b->F[ix] && *b->F[ix])
4436 if (ix == RPMEVR_V && set_version) {
4438 sense = rpmsetCmp(a->F[ix], b->F[ix]);
4449 sense = -EVRcmp(a->F[ix], b->F[ix]);
4451 sense = EVRcmp(a->F[ix], b->F[ix]);
4457 a->str =
_free(a->str);
4458 b->str =
_free(b->str);
4462 result = (sense != 0);
4465 }
else if (sense > 0 && ((aFlags & RPMSENSE_LESS) || (bFlags & RPMSENSE_GREATER))) {
4467 }
else if (sense == 0 &&
4469 ((aFlags & RPMSENSE_LESS) && (bFlags & RPMSENSE_LESS)) ||
4470 ((aFlags & RPMSENSE_GREATER) && (bFlags & RPMSENSE_GREATER)))) {
4477 if (_noisy_range_comparison_debug_message)
4479 (result ?
_(
"YES") :
_(
"NO ")), aDepend, bDepend);
4480 aDepend =
_free(aDepend);
4481 bDepend =
_free(bDepend);
4498 const fnpyKey * suggestedKeys,
int adding)
4500 const char * Name =
rpmdsN(ds);
4506 if (ps == NULL)
return;
4508 if (Name == NULL) Name =
"?N?";
4509 if (EVR == NULL) EVR =
"?EVR?";
4510 if (DNEVR == NULL) DNEVR =
"? ?N? ?OP? ?EVR?";
4513 pkgNEVR, ds->Type, DNEVR+2);
4515 switch ((
unsigned)DNEVR[0]) {
4521 key = (suggestedKeys ? suggestedKeys[0] : NULL);
4522 rpmpsAppend(ps, type, pkgNEVR, key, NULL, NULL, DNEVR, adding);
4528 rpmds provides = NULL;
4534 if (req->EVR == NULL || req->Flags == NULL)
4537 switch(req->ns.Type) {
4540 if (!reqFlags || !req->EVR[req->i] || *req->EVR[req->i] ==
'\0')
4549 if (provides == NULL) {
4561 if (provides->EVR == NULL)
4566 if (provides != NULL)
4581 const char * pkgN, * V, * R;
4582 #ifdef RPM_VENDOR_MANDRIVA
4588 const char * pkgEVR;
4598 if (req->EVR == NULL || req->Flags == NULL)
4601 if (!(reqFlags && req->EVR[req->i] && *req->EVR[req->i]))
4609 if (pkgN == NULL) pkgN =
xstrdup(
"N");
4610 if (V == NULL) V =
xstrdup(
"V");
4611 if (R == NULL) R =
xstrdup(
"R");
4617 #if defined(RPM_VENDOR_MANDRIVA)
4620 D = (he->
p.
str ? he->
p.
str : NULL);
4624 if (V) nb += strlen(V);
4625 if (R) nb += strlen(R);
4626 #if defined(RPM_VENDOR_MANDRIVA)
4627 if (gotD) nb += strlen(D) + 1;
4629 pkgEVR = t = (
char *)
alloca(nb);
4632 sprintf(t,
"%d:", E);
4636 #if defined(RPM_VENDOR_MANDRIVA)
4660 if (ds->ns.str[0] ==
'!')