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)
976 assert(ods->EVR != NULL);
977 assert(ods->Flags != NULL);
979 nb = (ds->Count+1) *
sizeof(*ds->EVR);
980 ds->EVR = (
const char **) (ds->h != NULL
981 ? memcpy(
xmalloc(nb), ods->EVR, nb)
984 nb = (ds->Count *
sizeof(*ds->Flags));
985 ds->Flags = (
evrFlags *) (ds->h != NULL
987 : memcpy(
xmalloc(nb), ods->Flags, nb) );
988 ds->nopromote = ods->nopromote;
990 ds->EVRcmp = ods->EVRcmp;;
994 return rpmdsLink(ds, (ds ? ds->Type : NULL));
1002 if (ds == NULL || ods == NULL)
1007 while (ds->l < ds->u) {
1008 ds->i = (ds->l + ds->u) / 2;
1010 comparison = strcmp(ods->N[ods->i], ds->N[ds->i]);
1014 if (comparison == 0 && ods->EVR && ds->EVR)
1015 comparison = strcmp(ods->EVR[ods->i], ds->EVR[ds->i]);
1016 if (comparison == 0 && ods->Flags && ds->Flags)
1017 comparison = (ods->Flags[ods->i] - ds->Flags[ds->i]);
1022 else if (comparison > 0)
1039 if (dsp == NULL || ods == NULL)
1069 for (j = ds->Count; j > (
int)ds->u; j--)
1070 ds->N[
j] = ds->N[j-1];
1071 ds->N[ds->u] = ods->N[ods->i];
1073 ds->N =
_free(ds->N);
1078 assert(ods->EVR != NULL);
1079 assert(ods->Flags != NULL);
1081 for (j = ds->Count; j > (
int)ds->u; j--)
1082 ds->EVR[
j] = ds->EVR[j-1];
1083 ds->EVR[ds->u] = ods->EVR[ods->i];
1085 ds->EVR =
_free(ds->EVR);
1090 memcpy(Flags, ds->Flags, ds->u *
sizeof(*Flags));
1091 if (ds->u < ds->Count)
1092 memcpy(Flags + ds->u + 1, ds->Flags + ds->u, (ds->Count - ds->u) *
sizeof(*Flags));
1093 Flags[ds->u] = ods->Flags[ods->i];
1094 ds->Flags =
_free(ds->Flags);
1113 if (ds == NULL || ods == NULL)
1123 comparison = strcmp(ods->N[ods->i], ds->N[i]);
1127 else if (comparison > 0)
1131 if (strcmp(ods->N[ods->i], ds->N[l]))
1133 while (l > 0 && !strcmp(ods->N[ods->i], ds->N[l-1]))
1136 if (u >= (
int)ds->Count || strcmp(ods->N[ods->i], ds->N[u]))
1138 while (++u < (
int)ds->Count) {
1139 if (strcmp(ods->N[ods->i], ds->N[u]))
1150 while ((l =
rpmdsNext(ds)) >= 0 && (l < u)) {
1162 if (ods->Result != NULL)
1177 const char *N,
const char *EVR,
evrFlags Flags)
1184 t = (
char *)
alloca(strlen(NS)+
sizeof(
"()")+strlen(N));
1194 #if defined(WITH_CPUINFO)
1197 const char * NS =
"cpuinfo";
1198 struct cpuinfo *cip = cpuinfo_new();
1199 cpuinfo_feature_t feature;
1203 unsigned char uc[4];
1205 static union _dbswap orderedbytes = { .
ui = 0x11223344 };
1206 const char *
endian = NULL;
1208 snprintf(tmp, 19,
"%d", cpuinfo_get_frequency(cip));
1211 snprintf(tmp, 19,
"%d", cpuinfo_get_cores(cip));
1213 snprintf(tmp, 19,
"%d", cpuinfo_get_threads(cip));
1216 if(orderedbytes.
uc[0] == 0x44)
1218 else if(orderedbytes.
uc[0] == 0x11)
1220 else if(orderedbytes.
uc[0] == 0x22)
1224 for (feature = cpuinfo_feature_common; feature != cpuinfo_feature_architecture_max; feature++) {
1225 if(feature == cpuinfo_feature_common_max)
1226 feature = cpuinfo_feature_architecture;
1227 if (cpuinfo_has_feature(cip, feature)) {
1228 const char *
name = cpuinfo_string_of_feature(feature);
1230 rpmdsNSAdd(dsp, NS, name,
"", RPMSENSE_PROBE);
1233 cpuinfo_destroy(cip);
1249 {
"processor", 0, 0 },
1250 {
"Processor", 0, 1 },
1251 {
"vendor_id", 0, 0 },
1252 {
"cpu_family", 0, 1 },
1254 {
"model_name", 0, 0 },
1255 {
"stepping", 0, 1 },
1256 {
"cpu_MHz", 0, 1 },
1257 {
"CPU_implementer",0, 1 },
1258 {
"CPU_architecture",0, 1 },
1259 {
"CPU_variant", 0, 1 },
1260 {
"CPU_part", 0, 1 },
1261 {
"CPU_revision", 0, 1 },
1262 {
"Hardware", 0, 2 },
1263 {
"Revision", 0, 1 },
1265 {
"cache_size", 0, 1 },
1266 {
"physical_id", 0, 0 },
1267 {
"siblings", 0, 0 },
1268 {
"core_id", 0, 0 },
1269 {
"cpu_cores", 0, 0 },
1270 {
"fdiv_bug", 0, 3 },
1271 {
"hlt_bug", 0, 3 },
1272 {
"f00f_bug", 0, 3 },
1273 {
"coma_bug", 0, 3 },
1275 {
"fpu_exception", 0, 3 },
1276 {
"cpuid_level", 0, 0 },
1279 {
"Features", 0, 4 },
1280 {
"bogomips", 0, 1 },
1281 {
"BogoMIPS", 0, 1 },
1282 {
"clflush_size", 0, 1 },
1298 for (ct = ctags; ct->
name != NULL; ct++) {
1299 if (strcmp(ct->
name, name))
1310 #define _PROC_CPUINFO "/proc/cpuinfo"
1321 const char * NS =
"cpuinfo";
1323 char * f, * fe, * fend;
1330 if (_cpuinfo_path == NULL) {
1331 _cpuinfo_path =
rpmExpand(
"%{?_rpmds_cpuinfo_path}", NULL);
1333 if (!(_cpuinfo_path != NULL && *_cpuinfo_path ==
'/')) {
1335 _cpuinfo_path =
_free(_cpuinfo_path);
1346 for (ct = ctags; ct->
name != NULL; ct++)
1350 if (!(xx == 0 && iob != NULL))
1353 for (f = (
char *)iob->b; *f !=
'\0'; f = fend) {
1356 while (*fe !=
'\0' && !(*fe ==
'\n' || *fe ==
'\r'))
1359 while (*fe !=
'\0' && (*fe ==
'\n' || *fe ==
'\r'))
1373 while (*fe && *fe !=
':')
1392 for (t = f; *t !=
'\0'; t++) {
1404 for (t = g; *t !=
'\0'; t++) {
1405 if (
_isspace(*t) || *t ==
'(' || *t ==
')')
1411 for (t = g; *t !=
'\0'; t++) {
1412 if (
_isspace(*t) || *t ==
'(' || *t ==
')')
1418 if (!strcmp(g,
"yes"))
1422 {
char ** av = NULL;
1424 rc = poptParseArgvString(g, NULL, (
const char ***)&av);
1425 if (!rc && av != NULL)
1426 while ((t = av[i++]) != NULL)
1453 {
"rpmlib(VersionedDependencies)",
"3.0.3-1",
1455 N_(
"PreReq:, Provides:, and Obsoletes: dependencies support versions.") },
1456 {
"rpmlib(CompressedFileNames)",
"3.0.4-1",
1458 N_(
"file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.")},
1459 #if defined(WITH_BZIP2)
1460 {
"rpmlib(PayloadIsBzip2)",
"3.0.5-1",
1462 N_(
"package payload can be compressed using bzip2.") },
1464 {
"rpmlib(PayloadFilesHavePrefix)",
"4.0-1",
1466 N_(
"package payload file(s) have \"./\" prefix.") },
1467 {
"rpmlib(ExplicitPackageProvide)",
"4.0-1",
1469 N_(
"package name-version-release is not implicitly provided.") },
1470 {
"rpmlib(HeaderLoadSortsTags)",
"4.0.1-1",
1472 N_(
"header tags are always sorted after being loaded.") },
1473 {
"rpmlib(ScriptletInterpreterArgs)",
"4.0.3-1",
1475 N_(
"the scriptlet interpreter can use arguments from header.") },
1476 {
"rpmlib(PartialHardlinkSets)",
"4.0.4-1",
1478 N_(
"a hardlink file set may be installed without being complete.") },
1479 {
"rpmlib(ConcurrentAccess)",
"4.1-1",
1481 N_(
"package scriptlets may access the rpm database while installing.") },
1482 #if defined(WITH_LUA)
1483 {
"rpmlib(BuiltinLuaScripts)",
"4.2.2-1",
1485 N_(
"internal embedded lua scripts.") },
1487 #if defined(WITH_AUGEAS)
1488 {
"rpmlib(BuiltinAugeasScripts)",
"5.3-1",
1490 N_(
"internal embedded Augeas.") },
1492 #if defined(WITH_FICL)
1493 {
"rpmlib(BuiltinFiclScripts)",
"5.2-1",
1495 N_(
"internal embedded FICL.") },
1497 #if defined(WITH_JNIEMBED)
1498 {
"rpmlib(BuiltinJVMBeanShell)",
"5.4.15-1",
1500 N_(
"internal embedded JVM BeanShell.") },
1502 #if defined(WITH_GPSEE)
1503 {
"rpmlib(BuiltinJavaScript)",
"5.2-1",
1505 N_(
"internal embedded JavaScript.") },
1507 #if defined(WITH_MRBEMBED)
1508 {
"rpmlib(BuiltinMRubyScripts)",
"5.4.15-1",
1510 N_(
"internal embedded Mruby scripts.") },
1512 #if defined(WITH_PERLEMBED)
1513 {
"rpmlib(BuiltinPerlScripts)",
"5.2-1",
1515 N_(
"internal embedded perl scripts.") },
1517 #if defined(WITH_PYTHONEMBED)
1518 {
"rpmlib(BuiltinPythonScripts)",
"5.2-1",
1520 N_(
"internal embedded python scripts.") },
1522 #if defined(WITH_RUBYEMBED)
1523 {
"rpmlib(BuiltinRubyScripts)",
"5.2-1",
1525 N_(
"internal embedded Cruby scripts.") },
1527 #if defined(WITH_SEMANAGE)
1528 {
"rpmlib(BuiltinSpookScripts)",
"5.3-1",
1530 N_(
"internal embedded Spook scripts.") },
1532 #if defined(WITH_SQLITE)
1533 {
"rpmlib(BuiltinSqlScripts)",
"5.3-1",
1535 N_(
"internal embedded sqlite3 scripts.") },
1537 #if defined(WITH_SQUIRREL)
1538 {
"rpmlib(BuiltinSquirrelScripts)",
"5.2-1",
1540 N_(
"internal embedded squirrel scripts.") },
1542 #if defined(WITH_TCL)
1543 {
"rpmlib(BuiltinTclScripts)",
"5.2-1",
1545 N_(
"internal embedded tcl scripts.") },
1547 {
"rpmlib(HeaderTagTypeInt64)",
"4.4.3-1",
1549 N_(
"header tag data can be of type uint64_t.") },
1550 {
"rpmlib(PayloadIsUstar)",
"4.4.4-1",
1552 N_(
"package payload can be in ustar tar archive format.") },
1553 #if defined(WITH_XZ)
1554 {
"rpmlib(PayloadIsLzma)",
"4.4.2-1",
1556 N_(
"package payload can be compressed using lzma.") },
1558 {
"rpmlib(FileDigestParameterized)",
"4.4.6-1",
1560 N_(
"file digests can be other than MD5.") },
1561 {
"rpmlib(FileDigests)",
"4.6.0-1",
1563 N_(
"file digests can be other than MD5.") },
1564 #if defined(SUPPORT_AR_PAYLOADS)
1565 {
"rpmlib(PayloadIsAr)",
"5.1-1",
1567 N_(
"package payload can be in ar archive format.") },
1569 #if defined(WITH_XZ)
1570 {
"rpmlib(PayloadIsXz)",
"5.2-1",
1572 N_(
"package payload can be compressed using xz.") },
1575 {
"rpmlib(SetVersions)",
"4.0.4-alt98",
1577 N_(
"dependencies support set/subset versions.") },
1596 for (rlp = rltblp; rlp->
featureName != NULL; rlp++) {
1618 const char *N, *EVR;
1634 fd =
Fopen(fn,
"r.fpio");
1635 if (fd == NULL ||
Ferror(fd))
1641 while((f = fgets(buf, (
int)
sizeof(buf), fp)) != NULL) {
1645 buf[
sizeof(buf)-1] =
'\0';
1652 if (f[0] ==
'-' &&
_isspace(f[1])) {
1653 f +=
sizeof(
"- ")-1;
1659 if (*f ==
'\0' || *f ==
'#')
1667 if (!(
xisalnum(f[0]) || strchr(
"/_%!", f[0]) != NULL)) {
1668 fprintf(stderr,
_(
"%s:%d \"%s\" has invalid name. Skipping ...\n"),
1675 if (*f ==
'!') fe++;
1676 while (*fe && !
_isspace(*fe) && strchr(
"!<=>", *fe) == NULL)
1686 if (*f !=
'/' && *fe !=
'\0') {
1691 fprintf(stderr,
_(
"%s:%d \"%s\" has no comparison operator. Skipping ...\n"),
1702 fprintf(stderr,
_(
"%s:%d \"%s\" has no EVR string. Skipping ...\n"),
1719 Flags = (
evrFlags) (Flags | RPMSENSE_PROBE);
1730 if (fd != NULL) (void)
Fclose(fd);
1734 #if defined(RPM_VENDOR_WINDRIVER)
1735 #define _ETC_RPM_SYSINFO "%{_etcrpm}/sysinfo"
1737 #define _ETC_RPM_SYSINFO SYSCONFIGDIR "/sysinfo"
1760 struct stat * st = (
struct stat *) memset(
alloca(
sizeof(*st)), 0,
sizeof(*st));
1765 if (_sysinfo_path == NULL) {
1766 _sysinfo_path =
rpmExpand(
"%{?_rpmds_sysinfo_path}", NULL);
1768 if (!(_sysinfo_path != NULL && *_sysinfo_path ==
'/')) {
1770 _sysinfo_path =
_free(_sysinfo_path);
1787 if (S_ISDIR(st->st_mode)) {
1788 const char *dn = fn;
1792 for (av = _sysinfo_tags; av && *av; av++) {
1797 st = (
struct stat *) memset(st, 0,
sizeof(*st));
1799 if (xx == 0 && S_ISREG(st->st_mode))
1807 if (S_ISREG(st->st_mode))
1825 {
"LINK_MAX", _PC_LINK_MAX,
PATHCONF },
1828 {
"_POSIX_LINK_MAX", _PC_LINK_MAX,
PATHCONF },
1830 #ifdef _PC_MAX_CANON
1831 {
"MAX_CANON", _PC_MAX_CANON,
PATHCONF },
1833 #ifdef _PC_MAX_CANON
1834 {
"_POSIX_MAX_CANON", _PC_MAX_CANON,
PATHCONF },
1836 #ifdef _PC_MAX_INPUT
1837 {
"MAX_INPUT", _PC_MAX_INPUT,
PATHCONF },
1839 #ifdef _PC_MAX_INPUT
1840 {
"_POSIX_MAX_INPUT", _PC_MAX_INPUT,
PATHCONF },
1843 {
"NAME_MAX", _PC_NAME_MAX,
PATHCONF },
1846 {
"_POSIX_NAME_MAX", _PC_NAME_MAX,
PATHCONF },
1849 {
"PATH_MAX", _PC_PATH_MAX,
PATHCONF },
1852 {
"_POSIX_PATH_MAX", _PC_PATH_MAX,
PATHCONF },
1855 {
"PIPE_BUF", _PC_PIPE_BUF,
PATHCONF },
1858 {
"_POSIX_PIPE_BUF", _PC_PIPE_BUF,
PATHCONF },
1860 #ifdef _PC_SOCK_MAXBUF
1861 {
"SOCK_MAXBUF", _PC_SOCK_MAXBUF,
PATHCONF },
1864 {
"_POSIX_ASYNC_IO", _PC_ASYNC_IO,
PATHCONF },
1866 #ifdef _PC_CHOWN_RESTRICTED
1867 {
"_POSIX_CHOWN_RESTRICTED", _PC_CHOWN_RESTRICTED,
PATHCONF },
1870 {
"_POSIX_NO_TRUNC", _PC_NO_TRUNC,
PATHCONF },
1873 {
"_POSIX_PRIO_IO", _PC_PRIO_IO,
PATHCONF },
1876 {
"_POSIX_SYNC_IO", _PC_SYNC_IO,
PATHCONF },
1879 {
"_POSIX_VDISABLE", _PC_VDISABLE,
PATHCONF },
1883 {
"ARG_MAX", _SC_ARG_MAX,
SYSCONF },
1885 #ifdef _SC_ATEXIT_MAX
1886 {
"ATEXIT_MAX", _SC_ATEXIT_MAX,
SYSCONF },
1889 {
"CHAR_BIT", _SC_CHAR_BIT,
SYSCONF },
1892 {
"CHAR_MAX", _SC_CHAR_MAX,
SYSCONF },
1895 {
"CHAR_MIN", _SC_CHAR_MIN,
SYSCONF },
1897 #ifdef _SC_CHILD_MAX
1898 {
"CHILD_MAX", _SC_CHILD_MAX,
SYSCONF },
1901 {
"CLK_TCK", _SC_CLK_TCK,
SYSCONF },
1904 {
"INT_MAX", _SC_INT_MAX,
SYSCONF },
1907 {
"INT_MIN", _SC_INT_MIN,
SYSCONF },
1909 #ifdef _SC_UIO_MAXIOV
1910 {
"IOV_MAX", _SC_UIO_MAXIOV,
SYSCONF },
1912 #ifdef _SC_LOGIN_NAME_MAX
1913 {
"LOGNAME_MAX", _SC_LOGIN_NAME_MAX,
SYSCONF },
1916 {
"LONG_BIT", _SC_LONG_BIT,
SYSCONF },
1918 #ifdef _SC_MB_LEN_MAX
1919 {
"MB_LEN_MAX", _SC_MB_LEN_MAX,
SYSCONF },
1921 #ifdef _SC_NGROUPS_MAX
1922 {
"NGROUPS_MAX", _SC_NGROUPS_MAX,
SYSCONF },
1924 #ifdef _SC_NL_ARGMAX
1925 {
"NL_ARGMAX", _SC_NL_ARGMAX,
SYSCONF },
1927 #ifdef _SC_NL_LANGMAX
1928 {
"NL_LANGMAX", _SC_NL_LANGMAX,
SYSCONF },
1930 #ifdef _SC_NL_MSGMAX
1931 {
"NL_MSGMAX", _SC_NL_MSGMAX,
SYSCONF },
1934 {
"NL_NMAX", _SC_NL_NMAX,
SYSCONF },
1936 #ifdef _SC_NL_SETMAX
1937 {
"NL_SETMAX", _SC_NL_SETMAX,
SYSCONF },
1939 #ifdef _SC_NL_TEXTMAX
1940 {
"NL_TEXTMAX", _SC_NL_TEXTMAX,
SYSCONF },
1942 #ifdef _SC_GETGR_R_SIZE_MAX
1943 {
"NSS_BUFLEN_GROUP", _SC_GETGR_R_SIZE_MAX,
SYSCONF },
1945 #ifdef _SC_GETPW_R_SIZE_MAX
1946 {
"NSS_BUFLEN_PASSWD", _SC_GETPW_R_SIZE_MAX,
SYSCONF },
1949 {
"NZERO", _SC_NZERO,
SYSCONF },
1952 {
"OPEN_MAX", _SC_OPEN_MAX,
SYSCONF },
1955 {
"PAGESIZE", _SC_PAGESIZE,
SYSCONF },
1958 {
"PAGE_SIZE", _SC_PAGESIZE,
SYSCONF },
1961 {
"PASS_MAX", _SC_PASS_MAX,
SYSCONF },
1963 #ifdef _SC_THREAD_DESTRUCTOR_ITERATIONS
1964 {
"PTHREAD_DESTRUCTOR_ITERATIONS", _SC_THREAD_DESTRUCTOR_ITERATIONS,
SYSCONF },
1966 #ifdef _SC_THREAD_KEYS_MAX
1967 {
"PTHREAD_KEYS_MAX", _SC_THREAD_KEYS_MAX,
SYSCONF },
1969 #ifdef _SC_THREAD_STACK_MIN
1970 {
"PTHREAD_STACK_MIN", _SC_THREAD_STACK_MIN,
SYSCONF },
1972 #ifdef _SC_THREAD_THREADS_MAX
1973 {
"PTHREAD_THREADS_MAX", _SC_THREAD_THREADS_MAX,
SYSCONF },
1975 #ifdef _SC_SCHAR_MAX
1976 {
"SCHAR_MAX", _SC_SCHAR_MAX,
SYSCONF },
1978 #ifdef _SC_SCHAR_MIN
1979 {
"SCHAR_MIN", _SC_SCHAR_MIN,
SYSCONF },
1982 {
"SHRT_MAX", _SC_SHRT_MAX,
SYSCONF },
1985 {
"SHRT_MIN", _SC_SHRT_MIN,
SYSCONF },
1987 #ifdef _SC_SSIZE_MAX
1988 {
"SSIZE_MAX", _SC_SSIZE_MAX,
SYSCONF },
1990 #ifdef _SC_TTY_NAME_MAX
1991 {
"TTY_NAME_MAX", _SC_TTY_NAME_MAX,
SYSCONF },
1993 #ifdef _SC_TZNAME_MAX
1994 {
"TZNAME_MAX", _SC_TZNAME_MAX,
SYSCONF },
1996 #ifdef _SC_UCHAR_MAX
1997 {
"UCHAR_MAX", _SC_UCHAR_MAX,
SYSCONF },
2000 {
"UINT_MAX", _SC_UINT_MAX,
SYSCONF },
2002 #ifdef _SC_UIO_MAXIOV
2003 {
"UIO_MAXIOV", _SC_UIO_MAXIOV,
SYSCONF },
2005 #ifdef _SC_ULONG_MAX
2006 {
"ULONG_MAX", _SC_ULONG_MAX,
SYSCONF },
2008 #ifdef _SC_USHRT_MAX
2009 {
"USHRT_MAX", _SC_USHRT_MAX,
SYSCONF },
2012 {
"WORD_BIT", _SC_WORD_BIT,
SYSCONF },
2014 #ifdef _SC_AVPHYS_PAGES
2015 {
"_AVPHYS_PAGES", _SC_AVPHYS_PAGES,
SYSCONF },
2017 #ifdef _SC_NPROCESSORS_CONF
2018 {
"_NPROCESSORS_CONF", _SC_NPROCESSORS_CONF,
SYSCONF },
2020 #ifdef _SC_NPROCESSORS_ONLN
2021 {
"_NPROCESSORS_ONLN", _SC_NPROCESSORS_ONLN,
SYSCONF },
2023 #ifdef _SC_PHYS_PAGES
2024 {
"_PHYS_PAGES", _SC_PHYS_PAGES,
SYSCONF },
2027 {
"_POSIX_ARG_MAX", _SC_ARG_MAX,
SYSCONF },
2029 #ifdef _SC_ASYNCHRONOUS_IO
2030 {
"_POSIX_ASYNCHRONOUS_IO", _SC_ASYNCHRONOUS_IO,
SYSCONF },
2032 #ifdef _SC_CHILD_MAX
2033 {
"_POSIX_CHILD_MAX", _SC_CHILD_MAX,
SYSCONF },
2036 {
"_POSIX_FSYNC", _SC_FSYNC,
SYSCONF },
2038 #ifdef _SC_JOB_CONTROL
2039 {
"_POSIX_JOB_CONTROL", _SC_JOB_CONTROL,
SYSCONF },
2041 #ifdef _SC_MAPPED_FILES
2042 {
"_POSIX_MAPPED_FILES", _SC_MAPPED_FILES,
SYSCONF },
2045 {
"_POSIX_MEMLOCK", _SC_MEMLOCK,
SYSCONF },
2047 #ifdef _SC_MEMLOCK_RANGE
2048 {
"_POSIX_MEMLOCK_RANGE", _SC_MEMLOCK_RANGE,
SYSCONF },
2050 #ifdef _SC_MEMORY_PROTECTION
2051 {
"_POSIX_MEMORY_PROTECTION", _SC_MEMORY_PROTECTION,
SYSCONF },
2053 #ifdef _SC_MESSAGE_PASSING
2054 {
"_POSIX_MESSAGE_PASSING", _SC_MESSAGE_PASSING,
SYSCONF },
2056 #ifdef _SC_NGROUPS_MAX
2057 {
"_POSIX_NGROUPS_MAX", _SC_NGROUPS_MAX,
SYSCONF },
2060 {
"_POSIX_OPEN_MAX", _SC_OPEN_MAX,
SYSCONF },
2063 {
"_POSIX_PII", _SC_PII,
SYSCONF },
2065 #ifdef _SC_PII_INTERNET
2066 {
"_POSIX_PII_INTERNET", _SC_PII_INTERNET,
SYSCONF },
2068 #ifdef _SC_PII_INTERNET_DGRAM
2069 {
"_POSIX_PII_INTERNET_DGRAM", _SC_PII_INTERNET_DGRAM,
SYSCONF },
2071 #ifdef _SC_PII_INTERNET_STREAM
2072 {
"_POSIX_PII_INTERNET_STREAM", _SC_PII_INTERNET_STREAM,
SYSCONF },
2075 {
"_POSIX_PII_OSI", _SC_PII_OSI,
SYSCONF },
2077 #ifdef _SC_PII_OSI_CLTS
2078 {
"_POSIX_PII_OSI_CLTS", _SC_PII_OSI_CLTS,
SYSCONF },
2080 #ifdef _SC_PII_OSI_COTS
2081 {
"_POSIX_PII_OSI_COTS", _SC_PII_OSI_COTS,
SYSCONF },
2083 #ifdef _SC_PII_OSI_M
2084 {
"_POSIX_PII_OSI_M", _SC_PII_OSI_M,
SYSCONF },
2086 #ifdef _SC_PII_SOCKET
2087 {
"_POSIX_PII_SOCKET", _SC_PII_SOCKET,
SYSCONF },
2090 {
"_POSIX_PII_XTI", _SC_PII_XTI,
SYSCONF },
2093 {
"_POSIX_POLL", _SC_POLL,
SYSCONF },
2095 #ifdef _SC_PRIORITIZED_IO
2096 {
"_POSIX_PRIORITIZED_IO", _SC_PRIORITIZED_IO,
SYSCONF },
2098 #ifdef _SC_PRIORITY_SCHEDULING
2099 {
"_POSIX_PRIORITY_SCHEDULING", _SC_PRIORITY_SCHEDULING,
SYSCONF },
2101 #ifdef _SC_REALTIME_SIGNALS
2102 {
"_POSIX_REALTIME_SIGNALS", _SC_REALTIME_SIGNALS,
SYSCONF },
2104 #ifdef _SC_SAVED_IDS
2105 {
"_POSIX_SAVED_IDS", _SC_SAVED_IDS,
SYSCONF },
2108 {
"_POSIX_SELECT", _SC_SELECT,
SYSCONF },
2110 #ifdef _SC_SEMAPHORES
2111 {
"_POSIX_SEMAPHORES", _SC_SEMAPHORES,
SYSCONF },
2113 #ifdef _SC_SHARED_MEMORY_OBJECTS
2114 {
"_POSIX_SHARED_MEMORY_OBJECTS", _SC_SHARED_MEMORY_OBJECTS,
SYSCONF },
2116 #ifdef _SC_SSIZE_MAX
2117 {
"_POSIX_SSIZE_MAX", _SC_SSIZE_MAX,
SYSCONF },
2119 #ifdef _SC_STREAM_MAX
2120 {
"_POSIX_STREAM_MAX", _SC_STREAM_MAX,
SYSCONF },
2122 #ifdef _SC_SYNCHRONIZED_IO
2123 {
"_POSIX_SYNCHRONIZED_IO", _SC_SYNCHRONIZED_IO,
SYSCONF },
2126 {
"_POSIX_THREADS", _SC_THREADS,
SYSCONF },
2128 #ifdef _SC_THREAD_ATTR_STACKADDR
2129 {
"_POSIX_THREAD_ATTR_STACKADDR", _SC_THREAD_ATTR_STACKADDR,
SYSCONF },
2131 #ifdef _SC_THREAD_ATTR_STACKSIZE
2132 {
"_POSIX_THREAD_ATTR_STACKSIZE", _SC_THREAD_ATTR_STACKSIZE,
SYSCONF },
2134 #ifdef _SC_THREAD_PRIORITY_SCHEDULING
2135 {
"_POSIX_THREAD_PRIORITY_SCHEDULING", _SC_THREAD_PRIORITY_SCHEDULING,
SYSCONF },
2137 #ifdef _SC_THREAD_PRIO_INHERIT
2138 {
"_POSIX_THREAD_PRIO_INHERIT", _SC_THREAD_PRIO_INHERIT,
SYSCONF },
2140 #ifdef _SC_THREAD_PRIO_PROTECT
2141 {
"_POSIX_THREAD_PRIO_PROTECT", _SC_THREAD_PRIO_PROTECT,
SYSCONF },
2143 #ifdef _SC_THREAD_PROCESS_SHARED
2144 {
"_POSIX_THREAD_PROCESS_SHARED", _SC_THREAD_PROCESS_SHARED,
SYSCONF },
2146 #ifdef _SC_THREAD_SAFE_FUNCTIONS
2147 {
"_POSIX_THREAD_SAFE_FUNCTIONS", _SC_THREAD_SAFE_FUNCTIONS,
SYSCONF },
2150 {
"_POSIX_TIMERS", _SC_TIMERS,
SYSCONF },
2152 #ifdef _SC_TIMER_MAX
2153 {
"TIMER_MAX", _SC_TIMER_MAX,
SYSCONF },
2155 #ifdef _SC_TZNAME_MAX
2156 {
"_POSIX_TZNAME_MAX", _SC_TZNAME_MAX,
SYSCONF },
2159 {
"_POSIX_VERSION", _SC_VERSION,
SYSCONF },
2161 #ifdef _SC_T_IOV_MAX
2162 {
"_T_IOV_MAX", _SC_T_IOV_MAX,
SYSCONF },
2164 #ifdef _SC_XOPEN_CRYPT
2165 {
"_XOPEN_CRYPT", _SC_XOPEN_CRYPT,
SYSCONF },
2167 #ifdef _SC_XOPEN_ENH_I18N
2168 {
"_XOPEN_ENH_I18N", _SC_XOPEN_ENH_I18N,
SYSCONF },
2170 #ifdef _SC_XOPEN_LEGACY
2171 {
"_XOPEN_LEGACY", _SC_XOPEN_LEGACY,
SYSCONF },
2173 #ifdef _SC_XOPEN_REALTIME
2174 {
"_XOPEN_REALTIME", _SC_XOPEN_REALTIME,
SYSCONF },
2176 #ifdef _SC_XOPEN_REALTIME_THREADS
2177 {
"_XOPEN_REALTIME_THREADS", _SC_XOPEN_REALTIME_THREADS,
SYSCONF },
2179 #ifdef _SC_XOPEN_SHM
2180 {
"_XOPEN_SHM", _SC_XOPEN_SHM,
SYSCONF },
2182 #ifdef _SC_XOPEN_UNIX
2183 {
"_XOPEN_UNIX", _SC_XOPEN_UNIX,
SYSCONF },
2185 #ifdef _SC_XOPEN_VERSION
2186 {
"_XOPEN_VERSION", _SC_XOPEN_VERSION,
SYSCONF },
2188 #ifdef _SC_XOPEN_XCU_VERSION
2189 {
"_XOPEN_XCU_VERSION", _SC_XOPEN_XCU_VERSION,
SYSCONF },
2191 #ifdef _SC_XOPEN_XPG2
2192 {
"_XOPEN_XPG2", _SC_XOPEN_XPG2,
SYSCONF },
2194 #ifdef _SC_XOPEN_XPG3
2195 {
"_XOPEN_XPG3", _SC_XOPEN_XPG3,
SYSCONF },
2197 #ifdef _SC_XOPEN_XPG4
2198 {
"_XOPEN_XPG4", _SC_XOPEN_XPG4,
SYSCONF },
2201 #ifdef _SC_BC_BASE_MAX
2202 {
"BC_BASE_MAX", _SC_BC_BASE_MAX,
SYSCONF },
2204 #ifdef _SC_BC_DIM_MAX
2205 {
"BC_DIM_MAX", _SC_BC_DIM_MAX,
SYSCONF },
2207 #ifdef _SC_BC_SCALE_MAX
2208 {
"BC_SCALE_MAX", _SC_BC_SCALE_MAX,
SYSCONF },
2210 #ifdef _SC_BC_STRING_MAX
2211 {
"BC_STRING_MAX", _SC_BC_STRING_MAX,
SYSCONF },
2213 #ifdef _SC_CHARCLASS_NAME_MAX
2214 {
"CHARCLASS_NAME_MAX", _SC_CHARCLASS_NAME_MAX,
SYSCONF },
2216 #ifdef _SC_COLL_WEIGHTS_MAX
2217 {
"COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX,
SYSCONF },
2219 #ifdef _SC_EQUIV_CLASS_MAX
2220 {
"EQUIV_CLASS_MAX", _SC_EQUIV_CLASS_MAX,
SYSCONF },
2222 #ifdef _SC_EXPR_NEST_MAX
2223 {
"EXPR_NEST_MAX", _SC_EXPR_NEST_MAX,
SYSCONF },
2226 {
"LINE_MAX", _SC_LINE_MAX,
SYSCONF },
2228 #ifdef _SC_BC_BASE_MAX
2229 {
"POSIX2_BC_BASE_MAX", _SC_BC_BASE_MAX,
SYSCONF },
2231 #ifdef _SC_BC_DIM_MAX
2232 {
"POSIX2_BC_DIM_MAX", _SC_BC_DIM_MAX,
SYSCONF },
2234 #ifdef _SC_BC_SCALE_MAX
2235 {
"POSIX2_BC_SCALE_MAX", _SC_BC_SCALE_MAX,
SYSCONF },
2237 #ifdef _SC_BC_STRING_MAX
2238 {
"POSIX2_BC_STRING_MAX", _SC_BC_STRING_MAX,
SYSCONF },
2240 #ifdef _SC_2_CHAR_TERM
2241 {
"POSIX2_CHAR_TERM", _SC_2_CHAR_TERM,
SYSCONF },
2243 #ifdef _SC_COLL_WEIGHTS_MAX
2244 {
"POSIX2_COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX,
SYSCONF },
2247 {
"POSIX2_C_BIND", _SC_2_C_BIND,
SYSCONF },
2250 {
"POSIX2_C_DEV", _SC_2_C_DEV,
SYSCONF },
2252 #ifdef _SC_2_C_VERSION
2253 {
"POSIX2_C_VERSION", _SC_2_C_VERSION,
SYSCONF },
2255 #ifdef _SC_EXPR_NEST_MAX
2256 {
"POSIX2_EXPR_NEST_MAX", _SC_EXPR_NEST_MAX,
SYSCONF },
2258 #ifdef _SC_2_FORT_DEV
2259 {
"POSIX2_FORT_DEV", _SC_2_FORT_DEV,
SYSCONF },
2261 #ifdef _SC_2_FORT_RUN
2262 {
"POSIX2_FORT_RUN", _SC_2_FORT_RUN,
SYSCONF },
2265 {
"_POSIX2_LINE_MAX", _SC_LINE_MAX,
SYSCONF },
2267 #ifdef _SC_2_LOCALEDEF
2268 {
"POSIX2_LOCALEDEF", _SC_2_LOCALEDEF,
SYSCONF },
2270 #ifdef _SC_RE_DUP_MAX
2271 {
"POSIX2_RE_DUP_MAX", _SC_RE_DUP_MAX,
SYSCONF },
2274 {
"POSIX2_SW_DEV", _SC_2_SW_DEV,
SYSCONF },
2277 {
"POSIX2_UPE", _SC_2_UPE,
SYSCONF },
2279 #ifdef _SC_2_VERSION
2280 {
"POSIX2_VERSION", _SC_2_VERSION,
SYSCONF },
2282 #ifdef _SC_RE_DUP_MAX
2283 {
"RE_DUP_MAX", _SC_RE_DUP_MAX,
SYSCONF },
2287 {
"PATH", _CS_PATH,
CONFSTR },
2288 {
"CS_PATH", _CS_PATH,
CONFSTR },
2292 #ifdef _CS_LFS_CFLAGS
2293 {
"LFS_CFLAGS", _CS_LFS_CFLAGS,
CONFSTR },
2295 #ifdef _CS_LFS_LDFLAGS
2296 {
"LFS_LDFLAGS", _CS_LFS_LDFLAGS,
CONFSTR },
2299 {
"LFS_LIBS", _CS_LFS_LIBS,
CONFSTR },
2301 #ifdef _CS_LFS_LINTFLAGS
2302 {
"LFS_LINTFLAGS", _CS_LFS_LINTFLAGS,
CONFSTR },
2304 #ifdef _CS_LFS64_CFLAGS
2305 {
"LFS64_CFLAGS", _CS_LFS64_CFLAGS,
CONFSTR },
2307 #ifdef _CS_LFS64_LDFLAGS
2308 {
"LFS64_LDFLAGS", _CS_LFS64_LDFLAGS,
CONFSTR },
2310 #ifdef _CS_LFS64_LIBS
2311 {
"LFS64_LIBS", _CS_LFS64_LIBS,
CONFSTR },
2313 #ifdef _CS_LFS64_LINTFLAGS
2314 {
"LFS64_LINTFLAGS", _CS_LFS64_LINTFLAGS,
CONFSTR },
2318 #ifdef _SC_XBS5_ILP32_OFF32
2319 {
"_XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32,
SYSCONF },
2321 #ifdef _CS_XBS5_ILP32_OFF32_CFLAGS
2322 {
"XBS5_ILP32_OFF32_CFLAGS", _CS_XBS5_ILP32_OFF32_CFLAGS,
CONFSTR },
2324 #ifdef _CS_XBS5_ILP32_OFF32_LDFLAGS
2325 {
"XBS5_ILP32_OFF32_LDFLAGS", _CS_XBS5_ILP32_OFF32_LDFLAGS,
CONFSTR },
2327 #ifdef _CS_XBS5_ILP32_OFF32_LIBS
2328 {
"XBS5_ILP32_OFF32_LIBS", _CS_XBS5_ILP32_OFF32_LIBS,
CONFSTR },
2330 #ifdef _CS_XBS5_ILP32_OFF32_LINTFLAGS
2331 {
"XBS5_ILP32_OFF32_LINTFLAGS", _CS_XBS5_ILP32_OFF32_LINTFLAGS,
CONFSTR },
2334 #ifdef _SC_XBS5_ILP32_OFFBIG
2335 {
"_XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG,
SYSCONF },
2337 #ifdef _CS_XBS5_ILP32_OFFBIG_CFLAGS
2338 {
"XBS5_ILP32_OFFBIG_CFLAGS", _CS_XBS5_ILP32_OFFBIG_CFLAGS,
CONFSTR },
2340 #ifdef _CS_XBS5_ILP32_OFFBIG_LDFLAGS
2341 {
"XBS5_ILP32_OFFBIG_LDFLAGS", _CS_XBS5_ILP32_OFFBIG_LDFLAGS,
CONFSTR },
2343 #ifdef _CS_XBS5_ILP32_OFFBIG_LIBS
2344 {
"XBS5_ILP32_OFFBIG_LIBS", _CS_XBS5_ILP32_OFFBIG_LIBS,
CONFSTR },
2346 #ifdef _CS_XBS5_ILP32_OFFBIG_LINTFLAGS
2347 {
"XBS5_ILP32_OFFBIG_LINTFLAGS", _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,
CONFSTR },
2350 #ifdef _SC_XBS5_LP64_OFF64
2351 {
"_XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64,
SYSCONF },
2353 #ifdef _CS_XBS5_LP64_OFF64_CFLAGS
2354 {
"XBS5_LP64_OFF64_CFLAGS", _CS_XBS5_LP64_OFF64_CFLAGS,
CONFSTR },
2356 #ifdef _CS_XBS5_LP64_OFF64_LDFLAGS
2357 {
"XBS5_LP64_OFF64_LDFLAGS", _CS_XBS5_LP64_OFF64_LDFLAGS,
CONFSTR },
2359 #ifdef _CS_XBS5_LP64_OFF64_LIBS
2360 {
"XBS5_LP64_OFF64_LIBS", _CS_XBS5_LP64_OFF64_LIBS,
CONFSTR },
2362 #ifdef _CS_XBS5_LP64_OFF64_LINTFLAGS
2363 {
"XBS5_LP64_OFF64_LINTFLAGS", _CS_XBS5_LP64_OFF64_LINTFLAGS,
CONFSTR },
2366 #ifdef _SC_XBS5_LPBIG_OFFBIG
2367 {
"_XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG,
SYSCONF },
2369 #ifdef _CS_XBS5_LPBIG_OFFBIG_CFLAGS
2370 {
"XBS5_LPBIG_OFFBIG_CFLAGS", _CS_XBS5_LPBIG_OFFBIG_CFLAGS,
CONFSTR },
2372 #ifdef _CS_XBS5_LPBIG_OFFBIG_LDFLAGS
2373 {
"XBS5_LPBIG_OFFBIG_LDFLAGS", _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,
CONFSTR },
2375 #ifdef _CS_XBS5_LPBIG_OFFBIG_LIBS
2376 {
"XBS5_LPBIG_OFFBIG_LIBS", _CS_XBS5_LPBIG_OFFBIG_LIBS,
CONFSTR },
2378 #ifdef _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
2379 {
"XBS5_LPBIG_OFFBIG_LINTFLAGS", _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,
CONFSTR },
2382 #ifdef _SC_V6_ILP32_OFF32
2383 {
"_POSIX_V6_ILP32_OFF32", _SC_V6_ILP32_OFF32,
SYSCONF },
2385 #ifdef _CS_POSIX_V6_ILP32_OFF32_CFLAGS
2386 {
"POSIX_V6_ILP32_OFF32_CFLAGS", _CS_POSIX_V6_ILP32_OFF32_CFLAGS,
CONFSTR },
2388 #ifdef _CS_POSIX_V6_ILP32_OFF32_LDFLAGS
2389 {
"POSIX_V6_ILP32_OFF32_LDFLAGS", _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,
CONFSTR },
2391 #ifdef _CS_POSIX_V6_ILP32_OFF32_LIBS
2392 {
"POSIX_V6_ILP32_OFF32_LIBS", _CS_POSIX_V6_ILP32_OFF32_LIBS,
CONFSTR },
2394 #ifdef _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS
2395 {
"POSIX_V6_ILP32_OFF32_LINTFLAGS", _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,
CONFSTR },
2398 #ifdef _CS_V6_WIDTH_RESTRICTED_ENVS
2399 {
"_POSIX_V6_WIDTH_RESTRICTED_ENVS", _CS_V6_WIDTH_RESTRICTED_ENVS,
CONFSTR },
2402 #ifdef _SC_V6_ILP32_OFFBIG
2403 {
"_POSIX_V6_ILP32_OFFBIG", _SC_V6_ILP32_OFFBIG,
SYSCONF },
2405 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
2406 {
"POSIX_V6_ILP32_OFFBIG_CFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,
CONFSTR },
2408 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
2409 {
"POSIX_V6_ILP32_OFFBIG_LDFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,
CONFSTR },
2411 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_LIBS
2412 {
"POSIX_V6_ILP32_OFFBIG_LIBS", _CS_POSIX_V6_ILP32_OFFBIG_LIBS,
CONFSTR },
2414 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS
2415 {
"POSIX_V6_ILP32_OFFBIG_LINTFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,
CONFSTR },
2418 #ifdef _SC_V6_LP64_OFF64
2419 {
"_POSIX_V6_LP64_OFF64", _SC_V6_LP64_OFF64,
SYSCONF },
2421 #ifdef _CS_POSIX_V6_LP64_OFF64_CFLAGS
2422 {
"POSIX_V6_LP64_OFF64_CFLAGS", _CS_POSIX_V6_LP64_OFF64_CFLAGS,
CONFSTR },
2424 #ifdef _CS_POSIX_V6_LP64_OFF64_LDFLAGS
2425 {
"POSIX_V6_LP64_OFF64_LDFLAGS", _CS_POSIX_V6_LP64_OFF64_LDFLAGS,
CONFSTR },
2427 #ifdef _CS_POSIX_V6_LP64_OFF64_LIBS
2428 {
"POSIX_V6_LP64_OFF64_LIBS", _CS_POSIX_V6_LP64_OFF64_LIBS,
CONFSTR },
2430 #ifdef _CS_POSIX_V6_LP64_OFF64_LINTFLAGS
2431 {
"POSIX_V6_LP64_OFF64_LINTFLAGS", _CS_POSIX_V6_LP64_OFF64_LINTFLAGS,
CONFSTR },
2434 #ifdef _SC_V6_LPBIG_OFFBIG
2435 {
"_POSIX_V6_LPBIG_OFFBIG", _SC_V6_LPBIG_OFFBIG,
SYSCONF },
2437 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
2438 {
"POSIX_V6_LPBIG_OFFBIG_CFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,
CONFSTR },
2440 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
2441 {
"POSIX_V6_LPBIG_OFFBIG_LDFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,
CONFSTR },
2443 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LIBS
2444 {
"POSIX_V6_LPBIG_OFFBIG_LIBS", _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,
CONFSTR },
2446 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS
2447 {
"POSIX_V6_LPBIG_OFFBIG_LINTFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,
CONFSTR },
2450 #ifdef _SC_ADVISORY_INFO
2451 {
"_POSIX_ADVISORY_INFO", _SC_ADVISORY_INFO,
SYSCONF },
2454 {
"_POSIX_BARRIERS", _SC_BARRIERS,
SYSCONF },
2457 {
"_POSIX_BASE", _SC_BASE,
SYSCONF },
2459 #ifdef _SC_C_LANG_SUPPORT
2460 {
"_POSIX_C_LANG_SUPPORT", _SC_C_LANG_SUPPORT,
SYSCONF },
2462 #ifdef _SC_C_LANG_SUPPORT_R
2463 {
"_POSIX_C_LANG_SUPPORT_R", _SC_C_LANG_SUPPORT_R,
SYSCONF },
2465 #ifdef _SC_CLOCK_SELECTION
2466 {
"_POSIX_CLOCK_SELECTION", _SC_CLOCK_SELECTION,
SYSCONF },
2469 {
"_POSIX_CPUTIME", _SC_CPUTIME,
SYSCONF },
2471 #ifdef _SC_THREAD_CPUTIME
2472 {
"_POSIX_THREAD_CPUTIME", _SC_THREAD_CPUTIME,
SYSCONF },
2474 #ifdef _SC_DEVICE_SPECIFIC
2475 {
"_POSIX_DEVICE_SPECIFIC", _SC_DEVICE_SPECIFIC,
SYSCONF },
2477 #ifdef _SC_DEVICE_SPECIFIC_R
2478 {
"_POSIX_DEVICE_SPECIFIC_R", _SC_DEVICE_SPECIFIC_R,
SYSCONF },
2481 {
"_POSIX_FD_MGMT", _SC_FD_MGMT,
SYSCONF },
2484 {
"_POSIX_FIFO", _SC_FIFO,
SYSCONF },
2487 {
"_POSIX_PIPE", _SC_PIPE,
SYSCONF },
2489 #ifdef _SC_FILE_ATTRIBUTES
2490 {
"_POSIX_FILE_ATTRIBUTES", _SC_FILE_ATTRIBUTES,
SYSCONF },
2492 #ifdef _SC_FILE_LOCKING
2493 {
"_POSIX_FILE_LOCKING", _SC_FILE_LOCKING,
SYSCONF },
2495 #ifdef _SC_FILE_SYSTEM
2496 {
"_POSIX_FILE_SYSTEM", _SC_FILE_SYSTEM,
SYSCONF },
2498 #ifdef _SC_MONOTONIC_CLOCK
2499 {
"_POSIX_MONOTONIC_CLOCK", _SC_MONOTONIC_CLOCK,
SYSCONF },
2501 #ifdef _SC_MULTI_PROCESS
2502 {
"_POSIX_MULTI_PROCESS", _SC_MULTI_PROCESS,
SYSCONF },
2504 #ifdef _SC_SINGLE_PROCESS
2505 {
"_POSIX_SINGLE_PROCESS", _SC_SINGLE_PROCESS,
SYSCONF },
2507 #ifdef _SC_NETWORKING
2508 {
"_POSIX_NETWORKING", _SC_NETWORKING,
SYSCONF },
2510 #ifdef _SC_READER_WRITER_LOCKS
2511 {
"_POSIX_READER_WRITER_LOCKS", _SC_READER_WRITER_LOCKS,
SYSCONF },
2513 #ifdef _SC_SPIN_LOCKS
2514 {
"_POSIX_SPIN_LOCKS", _SC_SPIN_LOCKS,
SYSCONF },
2517 {
"_POSIX_REGEXP", _SC_REGEXP,
SYSCONF },
2519 #ifdef _SC_REGEX_VERSION
2520 {
"_REGEX_VERSION", _SC_REGEX_VERSION,
SYSCONF },
2523 {
"_POSIX_SHELL", _SC_SHELL,
SYSCONF },
2526 {
"_POSIX_SIGNALS", _SC_SIGNALS,
SYSCONF },
2529 {
"_POSIX_SPAWN", _SC_SPAWN,
SYSCONF },
2531 #ifdef _SC_SPORADIC_SERVER
2532 {
"_POSIX_SPORADIC_SERVER", _SC_SPORADIC_SERVER,
SYSCONF },
2534 #ifdef _SC_THREAD_SPORADIC_SERVER
2535 {
"_POSIX_THREAD_SPORADIC_SERVER", _SC_THREAD_SPORADIC_SERVER,
SYSCONF },
2537 #ifdef _SC_SYSTEM_DATABASE
2538 {
"_POSIX_SYSTEM_DATABASE", _SC_SYSTEM_DATABASE,
SYSCONF },
2540 #ifdef _SC_SYSTEM_DATABASE_R
2541 {
"_POSIX_SYSTEM_DATABASE_R", _SC_SYSTEM_DATABASE_R,
SYSCONF },
2544 {
"_POSIX_TIMEOUTS", _SC_TIMEOUTS,
SYSCONF },
2546 #ifdef _SC_TYPED_MEMORY_OBJECTS
2547 {
"_POSIX_TYPED_MEMORY_OBJECTS", _SC_TYPED_MEMORY_OBJECTS,
SYSCONF },
2549 #ifdef _SC_USER_GROUPS
2550 {
"_POSIX_USER_GROUPS", _SC_USER_GROUPS,
SYSCONF },
2552 #ifdef _SC_USER_GROUPS_R
2553 {
"_POSIX_USER_GROUPS_R", _SC_USER_GROUPS_R,
SYSCONF },
2556 {
"POSIX2_PBS", _SC_2_PBS,
SYSCONF },
2558 #ifdef _SC_2_PBS_ACCOUNTING
2559 {
"POSIX2_PBS_ACCOUNTING", _SC_2_PBS_ACCOUNTING,
SYSCONF },
2561 #ifdef _SC_2_PBS_LOCATE
2562 {
"POSIX2_PBS_LOCATE", _SC_2_PBS_LOCATE,
SYSCONF },
2564 #ifdef _SC_2_PBS_TRACK
2565 {
"POSIX2_PBS_TRACK", _SC_2_PBS_TRACK,
SYSCONF },
2567 #ifdef _SC_2_PBS_MESSAGE
2568 {
"POSIX2_PBS_MESSAGE", _SC_2_PBS_MESSAGE,
SYSCONF },
2570 #ifdef _SC_SYMLOOP_MAX
2571 {
"SYMLOOP_MAX", _SC_SYMLOOP_MAX,
SYSCONF },
2573 #ifdef _SC_STREAM_MAX
2574 {
"STREAM_MAX", _SC_STREAM_MAX,
SYSCONF },
2576 #ifdef _SC_AIO_LISTIO_MAX
2577 {
"AIO_LISTIO_MAX", _SC_AIO_LISTIO_MAX,
SYSCONF },
2580 {
"AIO_MAX", _SC_AIO_MAX,
SYSCONF },
2582 #ifdef _SC_AIO_PRIO_DELTA_MAX
2583 {
"AIO_PRIO_DELTA_MAX", _SC_AIO_PRIO_DELTA_MAX,
SYSCONF },
2585 #ifdef _SC_DELAYTIMER_MAX
2586 {
"DELAYTIMER_MAX", _SC_DELAYTIMER_MAX,
SYSCONF },
2588 #ifdef _SC_HOST_NAME_MAX
2589 {
"HOST_NAME_MAX", _SC_HOST_NAME_MAX,
SYSCONF },
2591 #ifdef _SC_LOGIN_NAME_MAX
2592 {
"LOGIN_NAME_MAX", _SC_LOGIN_NAME_MAX,
SYSCONF },
2594 #ifdef _SC_MQ_OPEN_MAX
2595 {
"MQ_OPEN_MAX", _SC_MQ_OPEN_MAX,
SYSCONF },
2597 #ifdef _SC_MQ_PRIO_MAX
2598 {
"MQ_PRIO_MAX", _SC_MQ_PRIO_MAX,
SYSCONF },
2600 #ifdef _SC_DEVICE_IO
2601 {
"_POSIX_DEVICE_IO", _SC_DEVICE_IO,
SYSCONF },
2604 {
"_POSIX_TRACE", _SC_TRACE,
SYSCONF },
2606 #ifdef _SC_TRACE_EVENT_FILTER
2607 {
"_POSIX_TRACE_EVENT_FILTER", _SC_TRACE_EVENT_FILTER,
SYSCONF },
2609 #ifdef _SC_TRACE_INHERIT
2610 {
"_POSIX_TRACE_INHERIT", _SC_TRACE_INHERIT,
SYSCONF },
2612 #ifdef _SC_TRACE_LOG
2613 {
"_POSIX_TRACE_LOG", _SC_TRACE_LOG,
SYSCONF },
2615 #ifdef _SC_RTSIG_MAX
2616 {
"RTSIG_MAX", _SC_RTSIG_MAX,
SYSCONF },
2618 #ifdef _SC_SEM_NSEMS_MAX
2619 {
"SEM_NSEMS_MAX", _SC_SEM_NSEMS_MAX,
SYSCONF },
2621 #ifdef _SC_SEM_VALUE_MAX
2622 {
"SEM_VALUE_MAX", _SC_SEM_VALUE_MAX,
SYSCONF },
2624 #ifdef _SC_SIGQUEUE_MAX
2625 {
"SIGQUEUE_MAX", _SC_SIGQUEUE_MAX,
SYSCONF },
2627 #ifdef _PC_FILESIZEBITS
2628 {
"FILESIZEBITS", _PC_FILESIZEBITS,
PATHCONF },
2630 #ifdef _PC_ALLOC_SIZE_MIN
2631 {
"POSIX_ALLOC_SIZE_MIN", _PC_ALLOC_SIZE_MIN,
PATHCONF },
2633 #ifdef _PC_REC_INCR_XFER_SIZE
2634 {
"POSIX_REC_INCR_XFER_SIZE", _PC_REC_INCR_XFER_SIZE,
PATHCONF },
2636 #ifdef _PC_REC_MAX_XFER_SIZE
2637 {
"POSIX_REC_MAX_XFER_SIZE", _PC_REC_MAX_XFER_SIZE,
PATHCONF },
2639 #ifdef _PC_REC_MIN_XFER_SIZE
2640 {
"POSIX_REC_MIN_XFER_SIZE", _PC_REC_MIN_XFER_SIZE,
PATHCONF },
2642 #ifdef _PC_REC_XFER_ALIGN
2643 {
"POSIX_REC_XFER_ALIGN", _PC_REC_XFER_ALIGN,
PATHCONF },
2645 #ifdef _PC_SYMLINK_MAX
2646 {
"SYMLINK_MAX", _PC_SYMLINK_MAX,
PATHCONF },
2648 #ifdef _CS_GNU_LIBC_VERSION
2649 {
"GNU_LIBC_VERSION", _CS_GNU_LIBC_VERSION,
CONFSTR },
2651 #ifdef _CS_GNU_LIBPTHREAD_VERSION
2652 {
"GNU_LIBPTHREAD_VERSION", _CS_GNU_LIBPTHREAD_VERSION,
CONFSTR },
2654 #ifdef _PC_2_SYMLINKS
2655 {
"POSIX2_SYMLINKS", _PC_2_SYMLINKS,
PATHCONF },
2658 #ifdef _SC_LEVEL1_ICACHE_SIZE
2659 {
"LEVEL1_ICACHE_SIZE", _SC_LEVEL1_ICACHE_SIZE,
SYSCONF },
2661 #ifdef _SC_LEVEL1_ICACHE_ASSOC
2662 {
"LEVEL1_ICACHE_ASSOC", _SC_LEVEL1_ICACHE_ASSOC,
SYSCONF },
2664 #ifdef _SC_LEVEL1_ICACHE_LINESIZE
2665 {
"LEVEL1_ICACHE_LINESIZE", _SC_LEVEL1_ICACHE_LINESIZE,
SYSCONF },
2667 #ifdef _SC_LEVEL1_DCACHE_SIZE
2668 {
"LEVEL1_DCACHE_SIZE", _SC_LEVEL1_DCACHE_SIZE,
SYSCONF },
2670 #ifdef _SC_LEVEL1_DCACHE_ASSOC
2671 {
"LEVEL1_DCACHE_ASSOC", _SC_LEVEL1_DCACHE_ASSOC,
SYSCONF },
2673 #ifdef _SC_LEVEL1_DCACHE_LINESIZE
2674 {
"LEVEL1_DCACHE_LINESIZE", _SC_LEVEL1_DCACHE_LINESIZE,
SYSCONF },
2676 #ifdef _SC_LEVEL2_CACHE_SIZE
2677 {
"LEVEL2_CACHE_SIZE", _SC_LEVEL2_CACHE_SIZE,
SYSCONF },
2679 #ifdef _SC_LEVEL2_CACHE_ASSOC
2680 {
"LEVEL2_CACHE_ASSOC", _SC_LEVEL2_CACHE_ASSOC,
SYSCONF },
2682 #ifdef _SC_LEVEL2_CACHE_LINESIZE
2683 {
"LEVEL2_CACHE_LINESIZE", _SC_LEVEL2_CACHE_LINESIZE,
SYSCONF },
2685 #ifdef _SC_LEVEL3_CACHE_SIZE
2686 {
"LEVEL3_CACHE_SIZE", _SC_LEVEL3_CACHE_SIZE,
SYSCONF },
2688 #ifdef _SC_LEVEL3_CACHE_ASSOC
2689 {
"LEVEL3_CACHE_ASSOC", _SC_LEVEL3_CACHE_ASSOC,
SYSCONF },
2691 #ifdef _SC_LEVEL3_CACHE_LINESIZE
2692 {
"LEVEL3_CACHE_LINESIZE", _SC_LEVEL3_CACHE_LINESIZE,
SYSCONF },
2694 #ifdef _SC_LEVEL4_CACHE_SIZE
2695 {
"LEVEL4_CACHE_SIZE", _SC_LEVEL4_CACHE_SIZE,
SYSCONF },
2697 #ifdef _SC_LEVEL4_CACHE_ASSOC
2698 {
"LEVEL4_CACHE_ASSOC", _SC_LEVEL4_CACHE_ASSOC,
SYSCONF },
2702 {
"IPV6", _SC_IPV6,
SYSCONF },
2704 #ifdef _SC_RAW_SOCKETS
2705 {
"RAW_SOCKETS", _SC_RAW_SOCKETS,
SYSCONF },
2711 #define _GETCONF_PATH "/"
2723 const char * NS =
"getconf";
2730 if (_getconf_path == NULL) {
2731 _getconf_path =
rpmExpand(
"%{?_rpmds__getconf_path}", NULL);
2733 if (!(_getconf_path != NULL && *_getconf_path ==
'/')) {
2735 _getconf_path =
_free(_getconf_path);
2745 for (c = vars; c->
name != NULL; ++c) {
2753 sprintf(EVR,
"%ld", value);
2759 #if defined(_SC_UINT_MAX) && defined(_SC_ULONG_MAX)
2764 sprintf(EVR,
"%lu", value);
2770 sprintf(EVR,
"%ld", value);
2775 clen = confstr(c->
call_name, (
char *) NULL, 0);
2776 EVR = (
char *)
xmalloc(clen+1);
2778 if (confstr (c->
call_name, EVR, clen) != clen) {
2779 fprintf(stderr,
"confstr: %s\n", strerror(
errno));
2789 for (t = EVR; *t; t++) {
2790 if (*t ==
'\n') *t =
' ';
2792 if (!strcmp(N,
"GNU_LIBC_VERSION")
2793 || !strcmp(N,
"GNU_LIBPTHREAD_VERSION"))
2795 for (t = EVR; *t; t++) {
2796 if (*t ==
' ') *t =
'-';
2800 if (*EVR ==
'\0' || strchr(EVR,
' ') != NULL
2801 || (EVR[0] ==
'-' && strchr(
"0123456789", EVR[1]) == NULL))
2820 if (_rpmds_debug < 0)
2870 memset(PRCO, 0,
sizeof(*PRCO));
2881 static int scareMem = 0;
2891 PRCO->Pdsp = &PRCO->P;
2892 PRCO->Rdsp = &PRCO->R;
2893 PRCO->Cdsp = &PRCO->C;
2894 PRCO->Odsp = &PRCO->O;
2895 PRCO->Tdsp = &PRCO->T;
2896 PRCO->Ddsp = &PRCO->D;
2897 PRCO->Ldsp = &PRCO->L;
2926 #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__)
2927 static char * sonameDep(
char * t,
const char * s,
int isElf64)
2931 #if !defined(__alpha__) && !defined(__sun)
2933 if (s[strlen(s)-1] !=
')')
2946 int (*add) (
void * context,
rpmds ds),
void * context)
2948 #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__)
2952 GElf_Ehdr ehdr_mem, * ehdr;
2953 GElf_Shdr shdr_mem, * shdr;
2954 GElf_Verdef def_mem, * def;
2955 GElf_Verneed need_mem, * need;
2956 GElf_Dyn dyn_mem, * dyn;
2957 unsigned int auxoffset;
2958 unsigned int offset;
2965 const char * soname = NULL;
2977 static int filter_GLIBC_PRIVATE = 0;
2978 static int oneshot = 0;
2981 if (_rpmds_debug < 0)
2982 fprintf(stderr,
"*** rpmdsELF(%s, %d, %p, %p)\n", fn, flags, (
void *)add, context);
2990 {
struct stat sb, * st = &sb;
2991 if (stat(fn, st) != 0)
2993 is_executable = (int)(st->st_mode & (S_IXUSR|S_IXGRP|S_IXOTH));
2996 fdno = open(fn, O_RDONLY);
3000 (void) elf_version(EV_CURRENT);
3004 if ((elf = elf_begin (fdno, ELF_C_READ, NULL)) == NULL
3005 || elf_kind(elf) != ELF_K_ELF
3006 || (ehdr = gelf_getehdr(elf, &ehdr_mem)) == NULL
3007 || !(ehdr->e_type == ET_DYN || ehdr->e_type == ET_EXEC))
3011 isElf64 = ehdr->e_ident[EI_CLASS] == ELFCLASS64;
3012 isDSO = ehdr->e_type == ET_DYN;
3016 while ((scn = elf_nextscn(elf, scn)) != NULL) {
3017 shdr = gelf_getshdr(scn, &shdr_mem);
3021 soname =
_free(soname);
3022 switch (shdr->sh_type) {
3027 #if defined(HAVE_GELF_GETNOTE)
3028 if (!(shdr->sh_flags & SHF_ALLOC))
3031 while ((data = elf_getdata(scn, data)) != NULL) {
3036 while (offset < data->d_size
3037 && (offset = gelf_getnote(data, offset,
3038 &nhdr, &name_offset, &desc_offset)) > 0)
3040 const char *
name = ((
char *)data->d_buf) + name_offset;
3041 const char *desc = ((
char *)data->d_buf) + desc_offset;
3042 if (
memchr(name,
'\0', nhdr.n_namesz) == NULL)
3044 switch (nhdr.n_type) {
3046 #if !defined(NT_GNU_BUILD_ID)
3047 #define NT_GNU_BUILD_ID 3
3049 case NT_GNU_BUILD_ID:
3050 if (strcmp(name,
"GNU") == 0 && nhdr.n_descsz > 0) {
3051 static const char hex[] =
"0123456789abcdef";
3057 for (i = 0; i < nhdr.n_descsz; ++
i) {
3058 *t++ = hex[ (((unsigned)desc[i] >> 4) & 0x0f) ];
3059 *t++ = hex[ (((unsigned)desc[i] ) & 0x0f) ];
3065 xx = add(context, ds);
3075 case SHT_GNU_verdef:
3078 while ((data = elf_getdata (scn, data)) != NULL) {
3080 for (cnt = (
int)shdr->sh_info; --cnt >= 0; ) {
3082 def = gelf_getverdef (data, offset, &def_mem);
3085 auxoffset = (unsigned)(offset + def->vd_aux);
3086 for (cnt2 = (
int)def->vd_cnt; --cnt2 >= 0; ) {
3087 GElf_Verdaux aux_mem, * aux;
3089 aux = gelf_getverdaux (data, auxoffset, &aux_mem);
3093 s = elf_strptr(elf, shdr->sh_link, aux->vda_name);
3097 if (def->vd_flags & VER_FLG_BASE) {
3098 soname =
_free(soname);
3102 && !(filter_GLIBC_PRIVATE != 0
3103 && !strcmp(s,
"GLIBC_PRIVATE")))
3113 sonameDep(t, buf, isElf64),
3114 "", RPMSENSE_FIND_PROVIDES);
3115 xx = add(context, ds);
3119 auxoffset += aux->vda_next;
3121 offset += def->vd_next;
3125 case SHT_GNU_verneed:
3128 if (!skipR && is_executable)
3129 while ((data = elf_getdata (scn, data)) != NULL) {
3131 for (cnt = (
int)shdr->sh_info; --cnt >= 0; ) {
3132 need = gelf_getverneed (data, offset, &need_mem);
3136 s = elf_strptr(elf, shdr->sh_link, need->vn_file);
3139 soname =
_free(soname);
3141 auxoffset = (unsigned)(offset + need->vn_aux);
3142 for (cnt2 = (
int)need->vn_cnt; --cnt2 >= 0; ) {
3143 GElf_Vernaux aux_mem, * aux;
3145 aux = gelf_getvernaux (data, auxoffset, &aux_mem);
3149 s = elf_strptr(elf, shdr->sh_link, aux->vna_name);
3155 && !(filter_GLIBC_PRIVATE != 0
3156 && !strcmp(s,
"GLIBC_PRIVATE")))
3166 sonameDep(t, buf, isElf64),
3167 "", RPMSENSE_FIND_REQUIRES);
3168 xx = add(context, ds);
3172 auxoffset += aux->vna_next;
3174 offset += need->vn_next;
3180 while ((data = elf_getdata (scn, data)) != NULL) {
3181 for (cnt = 0; cnt < (int)(shdr->sh_size / shdr->sh_entsize); ++cnt) {
3182 dyn = gelf_getdyn (data, cnt, &dyn_mem);
3186 switch (dyn->d_tag) {
3201 if (skipR || !is_executable)
3204 s = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val);
3208 sonameDep(buf, s, isElf64),
3209 "", RPMSENSE_FIND_REQUIRES);
3210 xx = add(context, ds);
3218 s = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val);
3223 sonameDep(buf, s, isElf64),
3224 "", RPMSENSE_FIND_PROVIDES);
3225 xx = add(context, ds);
3239 if (gotGNUHASH && !gotHASH) {
3241 RPMSENSE_FIND_REQUIRES);
3242 xx = add(context, ds);
3248 if (!skipP && isDSO && !gotDEBUG && !gotSONAME) {
3249 s = strrchr(fn,
'/');
3259 sonameDep(buf, s, isElf64),
"", RPMSENSE_FIND_PROVIDES);
3260 xx = add(context, ds);
3266 soname =
_free(soname);
3267 if (elf) (void) elf_end(elf);
3278 #if defined(RPM_VENDOR_MANDRIVA)
3285 #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__)
3286 static char * mdvSonameDep(
char * t,
const char * s,
int isElf64,
int devel)
3292 tmp =
stpcpy(t,
"devel(");
3294 #if !defined(__alpha__) && !defined(__sun)
3297 if (!devel && s[strlen(s)-1] !=
')')
3302 tmp = strstr(t,
".so");
3303 tmp =
stpcpy(tmp,
"(64bit)");
3309 char *
suffix = strstr(t,
".so");
3328 int rpmdsSymlink(
const char * fn,
int flags,
3329 int (*add) (
void * context,
rpmds ds),
void * context)
3332 int rpmdsSymlink(
const char * fn,
int flags,
3333 int (*add) (
void * context,
rpmds ds),
void * context)
3335 #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__)
3339 GElf_Ehdr ehdr_mem, * ehdr;
3340 GElf_Shdr shdr_mem, * shdr;
3341 GElf_Dyn dyn_mem, * dyn;
3348 const char * soname = NULL;
3361 const char *filterRequires[] = {
"ld-linux",
"ld64-linux" "libBrokenLocale.so",
3362 "libanl.so",
"libc.so",
"libcidn.so",
"libcrypt.so",
"libdl.so",
"libm.so",
3363 "libnsl.so",
"libnss_compat.so",
"libnss_dns.so",
"libnss_files.so",
3364 "libnss_hesiod.so",
"libnss_nis.so",
"libnss_nisplus.so",
"libpthread.so",
3365 "libresolv.so",
"librt.so",
"libutil.so",
"libthread_db.so"};
3369 if ((s = strrchr(fn,
'.')) && strcmp(s,
".so"))
3372 if ((lnklen = readlink(fn, path,
MAXPATHLEN - 1)) == -1) {
3376 path[lnklen] =
'\0';
3379 if (_rpmds_debug < 0)
3380 fprintf(stderr,
"*** rpmdsELF(%s, %d, %p, %p)\n", fn, flags, (
void *)add, context);
3384 {
struct stat sb, * st = &sb;
3385 if (lstat(fn, st) != 0)
3387 is_executable = (int)(st->st_mode & (S_IXUSR|S_IXGRP|S_IXOTH));
3390 fdno = open(fn, O_RDONLY);
3394 (void) elf_version(EV_CURRENT);
3398 if ((elf = elf_begin (fdno, ELF_C_READ, NULL)) == NULL
3399 || elf_kind(elf) != ELF_K_ELF
3400 || (ehdr = gelf_getehdr(elf, &ehdr_mem)) == NULL
3401 || !(ehdr->e_type == ET_DYN || ehdr->e_type == ET_EXEC))
3405 isElf64 = ehdr->e_ident[EI_CLASS] == ELFCLASS64;
3409 while ((scn = elf_nextscn(elf, scn)) != NULL) {
3410 shdr = gelf_getshdr(scn, &shdr_mem);
3414 soname =
_free(soname);
3415 switch (shdr->sh_type) {
3421 while ((data = elf_getdata (scn, data)) != NULL) {
3422 for (cnt = 0; cnt < (int)(shdr->sh_size / shdr->sh_entsize); ++cnt) {
3423 dyn = gelf_getdyn (data, cnt, &dyn_mem);
3427 switch (dyn->d_tag) {
3433 if (skipR || !is_executable)
3436 s = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val);
3440 for (i = 0; i < (int)(
sizeof(filterRequires)/
sizeof(filterRequires[0])); i++)
3441 if (!strncmp(s, filterRequires[i], strlen(filterRequires[i])))
3444 if (
sizeof(filterRequires)/
sizeof(filterRequires[0]) == i)
3449 s = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val);
3456 mdvSonameDep(buf, s, isElf64, 1),
3457 "", RPMSENSE_FIND_PROVIDES);
3458 xx = add(context, ds);
3472 if (gotSONAME && !skipR)
3473 for (i = 0, cnt =
argvCount(deps); i < cnt; i++) {
3475 mdvSonameDep(buf, deps[i], isElf64, 1),
3476 "", RPMSENSE_FIND_REQUIRES);
3477 xx = add(context, ds);
3483 if (elf) (void) elf_end(elf);
3493 #define _SBIN_LDCONFIG_P "/sbin/ldconfig -p"
3497 #define _LD_SO_CACHE "/etc/ld.so.cache"
3507 const char *N, *EVR;
3521 if (_ldconfig_cmd == NULL) {
3522 _ldconfig_cmd =
rpmExpand(
"%{?_rpmds_ldconfig_cmd}", NULL);
3523 if (!(_ldconfig_cmd != NULL && *_ldconfig_cmd ==
'/')) {
3525 _ldconfig_cmd =
_free(_ldconfig_cmd);
3531 if (_ldconfig_cache == NULL) {
3532 _ldconfig_cache =
rpmExpand(
"%{?_rpmds_ldconfig_cache}", NULL);
3534 if (!(_ldconfig_cache != NULL && *_ldconfig_cache ==
'/')) {
3536 _ldconfig_cache =
_free(_ldconfig_cache);
3546 if (_rpmds_debug < 0)
3547 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);
3549 fp = popen(_ldconfig_cmd,
"r");
3553 while((f = fgets(buf, (
int)
sizeof(buf), fp)) != NULL) {
3566 while (*fe && !(fe[0] ==
'=' && fe[1] ==
'>'))
3581 if (fe > f && fe[-1] ==
' ') fe[-1] =
'\0';
3593 for (t = f; *t !=
'\0'; t++) {
3611 Flags = (
evrFlags) (Flags | RPMSENSE_PROBE);
3622 if (fp != NULL) (void) pclose(fp);
3628 #define _RLD_SEARCH_PATH "/lib:/usr/lib"
3630 static const char * _rld_search_path = NULL;
3633 int rpmdsRldpath(
rpmPRCO PRCO,
const char * rldp)
3638 const char *N, *EVR;
3652 if (_rld_search_path == NULL) {
3653 _rld_search_path =
rpmExpand(
"%{?_rpmds_rld_search_path}", NULL);
3655 if (!(_rld_search_path != NULL && *_rld_search_path ==
'/')) {
3657 _rld_search_path =
_free(_rld_search_path);
3659 _rld_search_path =
xstrdup(_RLD_SEARCH_PATH);
3665 rldp = _rld_search_path;
3667 if (_rpmds_debug > 0)
3668 fprintf(stderr,
"*** rpmdsRldpath(%p, %s) P %p R %p C %p O %p\n", PRCO, rldp, PRCO->Pdsp, PRCO->Rdsp, PRCO->Cdsp, PRCO->Odsp);
3681 strncpy(buf, f, g - f + 1);
3688 if ( !(strlen(buf) > 0 && buf[0] ==
'/') )
3693 strcat(buf,
"/*.so.*");
3695 if (_rpmds_debug > 0)
3696 fprintf(stderr,
"*** rpmdsRldpath(%p, %s) globbing %s\n", PRCO, rldp, buf);
3698 xx =
Glob(buf, 0, NULL, &gl);
3702 if (_rpmds_debug > 0)
3703 fprintf(stderr,
"*** rpmdsRldpath(%p, %s) glob matched %d files\n", PRCO, rldp, gl.
gl_pathc);
3716 N = DSOfn + strlen(DSOfn);
3717 while (N > DSOfn && *N !=
'/')
3720 Flags |= RPMSENSE_PROBE;
3737 #define _SOLARIS_CRLE "/usr/sbin/crle"
3739 static const char * _crle_cmd = NULL;
3741 int rpmdsCrle(
rpmPRCO PRCO,
const char * fn)
3757 if (_crle_cmd == NULL) {
3758 _crle_cmd =
rpmExpand(
"%{?_rpmds_crle_cmd}", NULL);
3759 if (!(_crle_cmd != NULL && *_crle_cmd ==
'/')) {
3761 _crle_cmd =
_free(_crle_cmd);
3763 _crle_cmd =
xstrdup(_SOLARIS_CRLE);
3768 fp = popen(_crle_cmd,
"r");
3777 while((f = fgets(buf,
sizeof(buf), fp)) != NULL) {
3781 g = strstr(f,
"(ELF):");
3786 f = g + (
sizeof(
"(ELF):")-1);
3799 rc = rpmdsRldpath(PRCO, f);
3808 static const char * NS =
"uname";
3809 struct utsname myun;
3822 if (un->sysname != NULL)
3824 if (un->nodename != NULL)
3826 if (un->release != NULL)
3829 if (un->version != NULL)
3832 if (un->machine != NULL)
3834 #if defined(__linux__)
3835 if (un->domainname != NULL && strcmp(un->domainname,
"(none)"))
3845 #define _PERL_PROVIDES "/usr/bin/find /usr/lib/perl5 | /usr/lib/rpm/perl.prov"
3854 const char *N, *EVR;
3860 const char * fn =
"pipe";
3867 if (_perldeps_cmd == NULL) {
3868 _perldeps_cmd =
rpmExpand(
"%{?_rpmds_perldeps_cmd}", NULL);
3870 if (!(_perldeps_cmd != NULL && *_perldeps_cmd ==
'/')) {
3872 _perldeps_cmd =
_free(_perldeps_cmd);
3884 fp = popen(cmd,
"r");
3890 while((f = fgets(buf, (
int)
sizeof(buf), fp)) != NULL) {
3894 buf[
sizeof(buf)-1] =
'\0';
3901 if (*f ==
'\0' || *f ==
'#')
3911 if (*f ==
'!') fe++;
3912 while (*fe && !
_isspace(*fe) && strchr(
"!<=>", *fe) == NULL)
3917 if (!(
xisalnum(f[0]) || strchr(
"/_%!", f[0]) != NULL)) {
3919 fprintf(stderr,
_(
"running \"%s\" pipe command\n"), cmd);
3920 fprintf(stderr,
_(
"%s:%d \"%s\" has invalid name. Skipping ...\n"),
3930 if (*f !=
'/' && *fe !=
'\0') {
3936 fprintf(stderr,
_(
"running \"%s\" pipe command\n"), cmd),
3937 fprintf(stderr,
_(
"%s:%d \"%s\" has no comparison operator. Skipping ...\n"),
3948 fprintf(stderr,
_(
"running \"%s\" pipe command\n"), cmd),
3950 fprintf(stderr,
_(
"\tline %d: No EVR comparison value found.\n Skipping ..."),
3952 fprintf(stderr,
_(
"%s:%d \"%s\" has no EVR string. Skipping ...\n"),
3969 Flags = (
evrFlags) (Flags | RPMSENSE_PROBE);
3978 if (fp != NULL) (void) pclose(fp);
3985 const char * AN = A->ns.N;
3986 const char * AA = A->ns.A;
3987 const char * BN = B->ns.N;
3988 const char * BA = B->ns.A;
3992 rc = strcmp(AN, BN);
3993 }
else if (AA && !BA) {
3994 rc = strncmp(AN, BN, (AA - AN)) || BN[AA - AN];
3996 rc = strcmp(AA, B->A);
3997 }
else if (!AA && BA) {
3998 rc = strncmp(AN, BN, (BA - BN)) || AN[BA - BN];
4000 rc = strcmp(BA, A->A);
4002 rc = strcmp(AN, BN);
4019 if (evr_tuple_order == NULL) {
4021 evr_tuple_order =
rpmExpand(
"%{?evr_tuple_order}", NULL);
4023 if (evr_tuple_order == NULL || evr_tuple_order[0] ==
'\0') {
4025 evr_tuple_order =
_free(evr_tuple_order);
4026 evr_tuple_order =
xstrdup(
"EVR");
4029 assert(evr_tuple_order != NULL && evr_tuple_order[0] !=
'\0');
4037 const char *aDepend = (A->DNEVR != NULL ?
xstrdup(A->DNEVR+2) :
"");
4038 const char *bDepend = (B->DNEVR != NULL ?
xstrdup(B->DNEVR+2) :
"");
4043 int (*EVRcmp) (
const char *a,
const char *
b);
4046 int set_version = 0;
4051 assert((
rpmdsFlags(B) & RPMSENSE_SENSEMASK) == B->ns.Flags);
4053 if (A->ns.Type != B->ns.Type) {
4066 if (!(A->EVR && A->Flags && B->EVR && B->Flags))
4070 if (!(aFlags && bFlags))
4074 if (!(A->EVR[A->i] && *A->EVR[A->i] && B->EVR[B->i] && *B->EVR[B->i]))
4078 xx = (A->EVRparse ? A->EVRparse :
rpmEVRparse) (A->EVR[A->i], a);
4079 xx = (B->EVRparse ? B->EVRparse :
rpmEVRparse) (B->EVR[B->i], b);
4082 EVRcmp = (A->EVRcmp && B->EVRcmp && A->EVRcmp == B->EVRcmp)
4090 default:
continue;
break;
4093 if (a->F[ix] && *a->F[ix] && b->F[ix] && *b->F[ix]) {
4095 if (!strcmp(a->F[ix],
"set") && !strcmp(b->F[ix],
"set"))
4101 if (a->F[ix] && *a->F[ix] && atol(a->F[ix]) > 0) {
4102 if (!B->nopromote) {
4103 int lvl = (_rpmds_unspecified_epoch_noise
4105 rpmlog(lvl,
_(
"The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n\tA = \"%s\"\tB = \"%s\"\n"),
4111 if (b->F[ix] && *b->F[ix] && atol(b->F[ix]) > 0)
4114 case 'V': ix = RPMEVR_V;
break;
4115 case 'T': ix = RPMEVR_T;
break;
4116 case 'R': ix = RPMEVR_R;
break;
4117 case 'D': ix = RPMEVR_D;
break;
4119 #if defined(RPM_VENDOR_MANDRIVA)
4122 && *(b->F[ix]) ==
'\0')
4124 if (a->F[ix] && b->F[ix])
4126 if (a->F[ix] && *a->F[ix] && b->F[ix] && *b->F[ix])
4130 if (ix == RPMEVR_V && set_version) {
4143 sense = -EVRcmp(a->F[ix], b->F[ix]);
4145 sense = EVRcmp(a->F[ix], b->F[ix]);
4151 a->str =
_free(a->str);
4152 b->str =
_free(b->str);
4156 result = (sense != 0);
4159 }
else if (sense > 0 && ((aFlags & RPMSENSE_LESS) || (bFlags & RPMSENSE_GREATER))) {
4161 }
else if (sense == 0 &&
4163 ((aFlags & RPMSENSE_LESS) && (bFlags & RPMSENSE_LESS)) ||
4164 ((aFlags & RPMSENSE_GREATER) && (bFlags & RPMSENSE_GREATER)))) {
4171 if (_noisy_range_comparison_debug_message)
4173 (result ?
_(
"YES") :
_(
"NO ")), aDepend, bDepend);
4174 aDepend =
_free(aDepend);
4175 bDepend =
_free(bDepend);
4192 const fnpyKey * suggestedKeys,
int adding)
4194 const char * Name =
rpmdsN(ds);
4200 if (ps == NULL)
return;
4202 if (Name == NULL) Name =
"?N?";
4203 if (EVR == NULL) EVR =
"?EVR?";
4204 if (DNEVR == NULL) DNEVR =
"? ?N? ?OP? ?EVR?";
4207 pkgNEVR, ds->Type, DNEVR+2);
4209 switch ((
unsigned)DNEVR[0]) {
4215 key = (suggestedKeys ? suggestedKeys[0] : NULL);
4216 rpmpsAppend(ps, type, pkgNEVR, key, NULL, NULL, DNEVR, adding);
4222 rpmds provides = NULL;
4228 if (req->EVR == NULL || req->Flags == NULL)
4231 switch(req->ns.Type) {
4234 if (!reqFlags || !req->EVR[req->i] || *req->EVR[req->i] ==
'\0')
4243 if (provides == NULL) {
4255 if (provides->EVR == NULL)
4260 if (provides != NULL)
4275 const char * pkgN, * V, * R;
4276 #ifdef RPM_VENDOR_MANDRIVA
4282 const char * pkgEVR;
4292 if (req->EVR == NULL || req->Flags == NULL)
4295 if (!(reqFlags && req->EVR[req->i] && *req->EVR[req->i]))
4303 if (pkgN == NULL) pkgN =
xstrdup(
"N");
4304 if (V == NULL) V =
xstrdup(
"V");
4305 if (R == NULL) R =
xstrdup(
"R");
4311 #if defined(RPM_VENDOR_MANDRIVA)
4314 D = (he->
p.
str ? he->
p.
str : NULL);
4318 if (V) nb += strlen(V);
4319 if (R) nb += strlen(R);
4320 #if defined(RPM_VENDOR_MANDRIVA)
4321 if (gotD) nb += strlen(D) + 1;
4323 pkgEVR = t = (
char *)
alloca(nb);
4326 sprintf(t,
"%d:", E);
4330 #if defined(RPM_VENDOR_MANDRIVA)
4354 if (ds->ns.str[0] ==
'!')
rpmds rpmdsSingle(rpmTag tagN, const char *N, const char *EVR, evrFlags Flags)
Create, load and initialize a dependency set of size 1.
static const char * suffix[]
evrFlags rpmdsFlags(const rpmds ds)
Return current dependency flags.
rpmds rpmdsInit(rpmds ds)
Initialize dependency set iterator.
rpmPRCO rpmdsFreePRCO(rpmPRCO PRCO)
Free dependency set(s) container.
nsType rpmdsNSType(const rpmds ds)
Return dependency class type.
const char * rpmdsType(const rpmds ds)
Return current dependency type name.
const char const char size_t len
enum nsType_e nsType
Dependency types.
static const char * rpmdsTagName(rpmTag tagN)
Return dependency set type string.
void rpmdsProblem(rpmps ps, const char *pkgNEVR, const rpmds ds, const fnpyKey *suggestedKeys, int adding)
Report a Requires: or Conflicts: dependency problem.
int rpmdsNoPromote(const rpmds ds)
Return current "Don't promote Epoch:" flag.
#define RPMELF_FLAG_SKIPREQUIRES
#define RPMSENSE_SENSEMASK
void * mireFreeAll(miRE mire, int nmire)
Destroy compiled patterns.
static void rpmdsFini(void *_ds)
const char const char * cmd
void rpmpsAppend(rpmps ps, rpmProblemType type, const char *pkgNEVR, fnpyKey key, const char *dn, const char *bn, const char *altNEVR, rpmuint64_t ulong1)
Append a problem to current set of problems.
static int rpmdsSysinfoFile(rpmPRCO PRCO, const char *fn, rpmTag tagN)
Merge contents of a sysinfo tag file into sysinfo dependencies.
static int xisalnum(int c)
char * xstrdup(const char *str)
FD_t Fopen(const char *path, const char *_fmode)
fopen(3) clone.
int rpmdsNExclude(const rpmds ds)
Return no.
char * rpmGetPath(const char *path,...)
Return (malloc'ed) expanded, canonicalized, file path.
int rpmdsGetconf(rpmds *dsp, const char *path)
Load getconf provides into a dependency set.
int(* rpmvercmp)(const char *a, const char *b)
Segmented string compare vector.
void * rpmdsInclude(const rpmds ds)
Return dependency include patterns.
enum rpmProblemType_e rpmProblemType
Enumerate transaction set problem types.
const char * rpmdsNewN(rpmds ds)
Return N string, expanded if necessary.
const char * evr_tuple_order
int Stat(const char *path, struct stat *st)
stat(2) clone.
void * rpmdsExclude(const rpmds ds)
Return dependency exclude patterns.
int rpmsetCmp(const char *str1, const char *str2)
void Globfree(void *_pglob)
globfree(3) clone.
rpmuint32_t rpmdsSetColor(const rpmds ds, rpmuint32_t color)
Set current dependency color.
rpmTag rpmdsTagN(const rpmds ds)
Return current dependency type.
rpmiob rpmiobFree(rpmiob iob)
Destroy a I/O buffer instance.
int rpmEVRparse(const char *evrstr, EVR_t evr)
Split EVR string into epoch, version, and release components.
const char * rpmdsA(const rpmds ds)
Return current dependency arch.
static void rpmlog(int code, const char *fmt,...)
struct rpmps_s * rpmps
Transaction problems found while processing a transaction set/.
const char * rpmdsDNEVR(const rpmds ds)
Return current formatted dependency string.
int rpmdsNVRMatchesDep(const Header h, const rpmds req, int nopromote)
Compare package name-version-release from header with a single dependency.
struct rpmds_s * rpmds
Dependency tag sets from a header, so that a header can be discarded early.
struct rpmPRCO_s * rpmPRCO
Container for commonly extracted dependency set(s).
time_t rpmdsSetBT(const rpmds ds, time_t BT)
Set dependency build time.
rpmds rpmdsFree(rpmds ds)
Destroy a dependency set.
rpmsenseFlags rpmEVRflags(const char *op, const char **end)
Return comparison operator sense flags.
rpmTag tagValue(const char *tagstr)
Return tag value from name.
int rpmiobSlurp(const char *fn, rpmiob *iobp)
void * rpmdsSetEVRcmp(rpmds ds, int(*EVRcmp)(const char *a, const char *b))
Set EVR comparison function.
static const char * _sysinfo_tags[]
static void rpmdsNSAdd(rpmds *dsp, const char *NS, const char *N, const char *EVR, evrFlags Flags)
Merge a single provides, wrapping N as "NS(N)".
int rpmdsPipe(rpmds *dsp, rpmTag tagN, const char *cmd)
Load provides from a pipe into a dependency set.
enum evrFlags_e evrFlags
Dependency Attributes.
rpmPRCO rpmdsNewPRCO(Header h)
Create dependency set(s) container.
#define RPMSENSE_NOTEQUAL
void * xcalloc(size_t nmemb, size_t size)
static const char * _getconf_path
rpmint32_t rpmdsResult(const rpmds ds)
Return current dependency comparison result.
int rpmdsSysinfo(rpmPRCO PRCO, const char *fn)
Load sysinfo dependencies into a dependency set.
time_t rpmdsBT(const rpmds ds)
Return dependency build time.
static const union _dbswap endian
int Glob(const char *pattern, int flags, int errfunc(const char *epath, int eerrno), void *_pglob)
glob(3) clone.
rpmioItem rpmioGetPool(rpmioPool pool, size_t size)
Get unused item from pool, or alloc a new item.
int rpmdsRpmlib(rpmds *dsp, void *tblp)
Load rpmlib provides into a dependency set.
int rpmdsCompare(const rpmds A, const rpmds B)
Compare two versioned dependency ranges, looking for overlap.
int argvCount(const ARGV_t argv)
Return no.
int rpmdsFind(rpmds ds, const rpmds ods)
Find a dependency set element using binary search.
const char const bson * data
void * rpmdsSetEVRparse(rpmds ds, int(*EVRparse)(const char *evrstr, EVR_t evr))
ARGV_t argvFree(ARGV_t argv)
Destroy an argv array.
void rpmdsNotify(rpmds ds, const char *where, int rc)
Notify of results of dependency match.
const char * rpmdsEVR(const rpmds ds)
Return current dependency epoch-version-release.
const char * tagName(rpmTag tag)
Return tag name from value.
static int rpmdsCpuinfoCtagFlags(const char *name)
Return dependency format to use for a cpuinfo line.
static const char * _ldconfig_cache
int rpmdsNext(rpmds ds)
Return next dependency set iterator index.
Structure(s) used for dependency tag sets.
static const char * _perldeps_cmd
The FD_t File Handle data structure.
static int rpmdsNAcmp(rpmds A, rpmds B)
const char * rpmGenPath(const char *urlroot, const char *urlmdir, const char *urlfile)
Merge 3 args into path, any or all of which may be a url.
static struct rpmlibProvides_s rpmlibProvides[]
int argvAdd(ARGV_t *argvp, ARGstr_t val)
Add a string to an argv array.
rpmuint32_t rpmdsSetRefs(const rpmds ds, rpmuint32_t refs)
Set current dependency file refs.
Header headerFree(Header h)
Dereference a header instance.
char * rpmExpand(const char *arg,...)
Return (malloc'ed) concatenated macro expansion(s).
int rpmdsCount(const rpmds ds)
Return dependency set count.
static struct cpuinfo_s ctags[]
int rpmdsAnyMatchesDep(const Header h, const rpmds req, int nopromote)
Compare package provides dependencies from header with a single dependency.
char * rpmdsNewDNEVR(const char *dspfx, rpmds ds)
Return new formatted dependency string.
static rpmds rpmdsDup(const rpmds ods)
const char * rpmdsN(const rpmds ds)
Return current dependency name.
int Fclose(FD_t fd)
fclose(3) clone.
const char const bson int mongo_write_concern int flags
Header headerLink(Header h)
Reference a header instance.
static const struct _conf_s vars[]
const char * _sysinfo_path
int Ferror(FD_t fd)
ferror(3) clone.
const char * _cpuinfo_path
urltype urlPath(const char *url, const char **pathp)
Return path component of URL.
static int snprintf(char *buf, int nb, const char *fmt,...)
const char const bson * key
rpmds rpmdsLink(rpmds ds, const char *msg)
Reference a dependency set instance.
const char * featureDescription
int _rpmds_unspecified_epoch_noise
rpmioPool rpmioNewPool(const char *name, size_t size, int limit, int flags, char *(*dbg)(void *item), void(*init)(void *item), void(*fini)(void *item))
Create a memory pool.
int rpmdsMerge(rpmds *dsp, rpmds ods)
Merge a dependency set maintaining (N,EVR,Flags) sorted order.
char * stpcpy(char *dest, const char *src)
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
int headerNEVRA(Header h, const char **np, const char **ep, const char **vp, const char **rp, const char **ap)
Return name, epoch, version, release, arch strings from header.
int rpmdsCpuinfo(rpmds *dsp, const char *fn)
Load /proc/cpuinfo provides into a dependency set.
int rpmdsLdconfig(rpmPRCO PRCO, const char *fn)
Load /etc/ld.so.cache provides into a dependency set.
int rpmdsUname(rpmds *dsp, const struct utsname *un)
static const char * _ldconfig_cmd
int rpmdsSearch(rpmds ds, rpmds ods)
Search a sorted dependency set for an element that overlaps.
int rpmdsIx(const rpmds ds)
Return dependency set index.
int rpmdsMergePRCO(void *context, rpmds ds)
Merge provides/requires/conflicts/obsoletes dependencies.
int rpmdsMatch(const rpmds A, rpmds B)
Compare A against every member of B, looking for 1st match.
rpmuint32_t rpmdsColor(const rpmds ds)
Return current dependency color.
static int _noisy_range_comparison_debug_message
Enable noisy range comparison debugging message?
int rpmnsParse(const char *s, rpmns ns)
Expand and split NS(N).A string into namespace, name and arch components.
int rpmdsELF(const char *fn, int flags, int(*add)(void *context, rpmds ds), void *context)
Return a soname dependency constructed from an elf string.
static const char * rpmdsEVRorder(void)
Return precedence permutation string.
#define RPMELF_FLAG_SKIPPROVIDES
int rpmdsNInclude(const rpmds ds)
Return no.
rpmuint32_t rpmdsRefs(const rpmds ds)
Return current dependency file refs.
rpmds rpmdsNew(Header h, rpmTag tagN, int flags)
Create and load a dependency set.
int rpmdsSetNoPromote(rpmds ds, int nopromote)
Set "Don't promote Epoch:" flag.
int rpmdsSetIx(rpmds ds, int ix)
Set dependency set index.
static rpmds rpmdsGetPool(rpmioPool pool)
int rpmExpandNumeric(const char *arg)
Return macro expansion as a numeric value.
rpmds rpmdsThis(Header h, rpmTag tagN, evrFlags Flags)
Create, load and initialize a dependency for this header.
const char * _rpmns_N_at_A
static const char ** rpmdsDupArgv(const char **argv, int argc)
int rpmdsNegateRC(const rpmds ds, int rc)
Negate return code for negated comparisons.
rpmint32_t rpmdsSetResult(const rpmds ds, rpmint32_t result)
Set current dependency comparison result.
rpmds rpmdsFromPRCO(rpmPRCO PRCO, rpmTag tagN)
Retrieve a dependency set from container.