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++) {
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;
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++) {
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)
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);
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)
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;
571 #if defined(RPM_VENDOR_MANDRIVA)
598 pre[0] = ds->Type[0];
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;
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));
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?"));
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
979 nb = (ds->Count+1) *
sizeof(*ds->EVR);
980 ds->EVR = (
const char **) (ds->h !=
NULL
984 nb = (ds->Count *
sizeof(*ds->Flags));
988 ds->nopromote = ods->nopromote;
990 ds->EVRcmp = ods->EVRcmp;;
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)
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);
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);
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)
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 };
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++) {
1310 #define _PROC_CPUINFO "/proc/cpuinfo"
1321 const char * NS =
"cpuinfo";
1323 char *
f, *
fe, * fend;
1330 if (_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 ==
')')
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_GPSEE)
1498 {
"rpmlib(BuiltinJavaScript)",
"5.2-1",
1500 N_(
"internal embedded JavaScript.") },
1502 #if defined(WITH_PERLEMBED)
1503 {
"rpmlib(BuiltinPerlScripts)",
"5.2-1",
1505 N_(
"internal embedded perl scripts.") },
1507 #if defined(WITH_PYTHONEMBED)
1508 {
"rpmlib(BuiltinPythonScripts)",
"5.2-1",
1510 N_(
"internal embedded python scripts.") },
1512 #if defined(WITH_RUBYEMBED)
1513 {
"rpmlib(BuiltinRubyScripts)",
"5.2-1",
1515 N_(
"internal embedded ruby scripts.") },
1517 #if defined(WITH_SEMANAGE)
1518 {
"rpmlib(BuiltinSpookScripts)",
"5.3-1",
1520 N_(
"internal embedded Spook scripts.") },
1522 #if defined(WITH_SQLITE)
1523 {
"rpmlib(BuiltinSqlScripts)",
"5.3-1",
1525 N_(
"internal embedded sqlite3 scripts.") },
1527 #if defined(WITH_SQUIRREL)
1528 {
"rpmlib(BuiltinSquirrelScripts)",
"5.2-1",
1530 N_(
"internal embedded squirrel scripts.") },
1532 #if defined(WITH_TCL)
1533 {
"rpmlib(BuiltinTclScripts)",
"5.2-1",
1535 N_(
"internal embedded tcl scripts.") },
1537 {
"rpmlib(HeaderTagTypeInt64)",
"4.4.3-1",
1539 N_(
"header tag data can be of type uint64_t.") },
1540 {
"rpmlib(PayloadIsUstar)",
"4.4.4-1",
1542 N_(
"package payload can be in ustar tar archive format.") },
1543 #if defined(WITH_XZ)
1544 {
"rpmlib(PayloadIsLzma)",
"4.4.2-1",
1546 N_(
"package payload can be compressed using lzma.") },
1548 {
"rpmlib(FileDigestParameterized)",
"4.4.6-1",
1550 N_(
"file digests can be other than MD5.") },
1551 {
"rpmlib(FileDigests)",
"4.6.0-1",
1553 N_(
"file digests can be other than MD5.") },
1554 #if defined(SUPPORT_AR_PAYLOADS)
1555 {
"rpmlib(PayloadIsAr)",
"5.1-1",
1557 N_(
"package payload can be in ar archive format.") },
1559 #if defined(WITH_XZ)
1560 {
"rpmlib(PayloadIsXz)",
"5.2-1",
1562 N_(
"package payload can be compressed using xz.") },
1565 {
"rpmlib(SetVersions)",
"4.0.4-alt98",
1567 N_(
"dependencies support set/subset versions.") },
1608 const char *
N, *
EVR;
1624 fd =
Fopen(fn,
"r.fpio");
1625 if (fd == NULL ||
Ferror(fd))
1631 while((f = fgets(buf, (
int)
sizeof(buf), fp)) != NULL) {
1635 buf[
sizeof(
buf)-1] =
'\0';
1642 if (f[0] ==
'-' &&
_isspace(f[1])) {
1643 f +=
sizeof(
"- ")-1;
1649 if (*f ==
'\0' || *f ==
'#')
1657 if (!(
xisalnum(f[0]) || strchr(
"/_%!", f[0]) != NULL)) {
1658 fprintf(stderr,
_(
"%s:%d \"%s\" has invalid name. Skipping ...\n"),
1665 if (*f ==
'!') fe++;
1666 while (*fe && !
_isspace(*fe) && strchr(
"!<=>", *fe) == NULL)
1676 if (*f !=
'/' && *fe !=
'\0') {
1681 fprintf(stderr,
_(
"%s:%d \"%s\" has no comparison operator. Skipping ...\n"),
1692 fprintf(stderr,
_(
"%s:%d \"%s\" has no EVR string. Skipping ...\n"),
1709 Flags = (
evrFlags) (Flags | RPMSENSE_PROBE);
1724 #if defined(RPM_VENDOR_WINDRIVER)
1725 #define _ETC_RPM_SYSINFO "%{_etcrpm}/sysinfo"
1727 #define _ETC_RPM_SYSINFO SYSCONFIGDIR "/sysinfo"
1750 struct stat *
st = (
struct stat *)
memset(
alloca(
sizeof(*st)), 0,
sizeof(*st));
1755 if (_sysinfo_path == NULL) {
1756 _sysinfo_path =
rpmExpand(
"%{?_rpmds_sysinfo_path}", NULL);
1758 if (!(_sysinfo_path != NULL && *_sysinfo_path ==
'/')) {
1760 _sysinfo_path =
_free(_sysinfo_path);
1777 if (S_ISDIR(st->st_mode)) {
1778 const char *dn =
fn;
1782 for (av = _sysinfo_tags; av && *
av; av++) {
1787 st = (
struct stat *)
memset(st, 0,
sizeof(*st));
1789 if (xx == 0 && S_ISREG(st->st_mode))
1797 if (S_ISREG(st->st_mode))
1815 {
"LINK_MAX", _PC_LINK_MAX,
PATHCONF },
1818 {
"_POSIX_LINK_MAX", _PC_LINK_MAX,
PATHCONF },
1820 #ifdef _PC_MAX_CANON
1821 {
"MAX_CANON", _PC_MAX_CANON,
PATHCONF },
1823 #ifdef _PC_MAX_CANON
1824 {
"_POSIX_MAX_CANON", _PC_MAX_CANON,
PATHCONF },
1826 #ifdef _PC_MAX_INPUT
1827 {
"MAX_INPUT", _PC_MAX_INPUT,
PATHCONF },
1829 #ifdef _PC_MAX_INPUT
1830 {
"_POSIX_MAX_INPUT", _PC_MAX_INPUT,
PATHCONF },
1833 {
"NAME_MAX", _PC_NAME_MAX,
PATHCONF },
1836 {
"_POSIX_NAME_MAX", _PC_NAME_MAX,
PATHCONF },
1839 {
"PATH_MAX", _PC_PATH_MAX,
PATHCONF },
1842 {
"_POSIX_PATH_MAX", _PC_PATH_MAX,
PATHCONF },
1845 {
"PIPE_BUF", _PC_PIPE_BUF,
PATHCONF },
1848 {
"_POSIX_PIPE_BUF", _PC_PIPE_BUF,
PATHCONF },
1850 #ifdef _PC_SOCK_MAXBUF
1851 {
"SOCK_MAXBUF", _PC_SOCK_MAXBUF,
PATHCONF },
1854 {
"_POSIX_ASYNC_IO", _PC_ASYNC_IO,
PATHCONF },
1856 #ifdef _PC_CHOWN_RESTRICTED
1857 {
"_POSIX_CHOWN_RESTRICTED", _PC_CHOWN_RESTRICTED,
PATHCONF },
1860 {
"_POSIX_NO_TRUNC", _PC_NO_TRUNC,
PATHCONF },
1863 {
"_POSIX_PRIO_IO", _PC_PRIO_IO,
PATHCONF },
1866 {
"_POSIX_SYNC_IO", _PC_SYNC_IO,
PATHCONF },
1869 {
"_POSIX_VDISABLE", _PC_VDISABLE,
PATHCONF },
1873 {
"ARG_MAX", _SC_ARG_MAX,
SYSCONF },
1875 #ifdef _SC_ATEXIT_MAX
1876 {
"ATEXIT_MAX", _SC_ATEXIT_MAX,
SYSCONF },
1879 {
"CHAR_BIT", _SC_CHAR_BIT,
SYSCONF },
1882 {
"CHAR_MAX", _SC_CHAR_MAX,
SYSCONF },
1885 {
"CHAR_MIN", _SC_CHAR_MIN,
SYSCONF },
1887 #ifdef _SC_CHILD_MAX
1888 {
"CHILD_MAX", _SC_CHILD_MAX,
SYSCONF },
1891 {
"CLK_TCK", _SC_CLK_TCK,
SYSCONF },
1894 {
"INT_MAX", _SC_INT_MAX,
SYSCONF },
1897 {
"INT_MIN", _SC_INT_MIN,
SYSCONF },
1899 #ifdef _SC_UIO_MAXIOV
1900 {
"IOV_MAX", _SC_UIO_MAXIOV,
SYSCONF },
1902 #ifdef _SC_LOGIN_NAME_MAX
1903 {
"LOGNAME_MAX", _SC_LOGIN_NAME_MAX,
SYSCONF },
1906 {
"LONG_BIT", _SC_LONG_BIT,
SYSCONF },
1908 #ifdef _SC_MB_LEN_MAX
1909 {
"MB_LEN_MAX", _SC_MB_LEN_MAX,
SYSCONF },
1911 #ifdef _SC_NGROUPS_MAX
1912 {
"NGROUPS_MAX", _SC_NGROUPS_MAX,
SYSCONF },
1914 #ifdef _SC_NL_ARGMAX
1915 {
"NL_ARGMAX", _SC_NL_ARGMAX,
SYSCONF },
1917 #ifdef _SC_NL_LANGMAX
1918 {
"NL_LANGMAX", _SC_NL_LANGMAX,
SYSCONF },
1920 #ifdef _SC_NL_MSGMAX
1921 {
"NL_MSGMAX", _SC_NL_MSGMAX,
SYSCONF },
1924 {
"NL_NMAX", _SC_NL_NMAX,
SYSCONF },
1926 #ifdef _SC_NL_SETMAX
1927 {
"NL_SETMAX", _SC_NL_SETMAX,
SYSCONF },
1929 #ifdef _SC_NL_TEXTMAX
1930 {
"NL_TEXTMAX", _SC_NL_TEXTMAX,
SYSCONF },
1932 #ifdef _SC_GETGR_R_SIZE_MAX
1933 {
"NSS_BUFLEN_GROUP", _SC_GETGR_R_SIZE_MAX,
SYSCONF },
1935 #ifdef _SC_GETPW_R_SIZE_MAX
1936 {
"NSS_BUFLEN_PASSWD", _SC_GETPW_R_SIZE_MAX,
SYSCONF },
1939 {
"NZERO", _SC_NZERO,
SYSCONF },
1942 {
"OPEN_MAX", _SC_OPEN_MAX,
SYSCONF },
1945 {
"PAGESIZE", _SC_PAGESIZE,
SYSCONF },
1948 {
"PAGE_SIZE", _SC_PAGESIZE,
SYSCONF },
1951 {
"PASS_MAX", _SC_PASS_MAX,
SYSCONF },
1953 #ifdef _SC_THREAD_DESTRUCTOR_ITERATIONS
1954 {
"PTHREAD_DESTRUCTOR_ITERATIONS", _SC_THREAD_DESTRUCTOR_ITERATIONS,
SYSCONF },
1956 #ifdef _SC_THREAD_KEYS_MAX
1957 {
"PTHREAD_KEYS_MAX", _SC_THREAD_KEYS_MAX,
SYSCONF },
1959 #ifdef _SC_THREAD_STACK_MIN
1960 {
"PTHREAD_STACK_MIN", _SC_THREAD_STACK_MIN,
SYSCONF },
1962 #ifdef _SC_THREAD_THREADS_MAX
1963 {
"PTHREAD_THREADS_MAX", _SC_THREAD_THREADS_MAX,
SYSCONF },
1965 #ifdef _SC_SCHAR_MAX
1966 {
"SCHAR_MAX", _SC_SCHAR_MAX,
SYSCONF },
1968 #ifdef _SC_SCHAR_MIN
1969 {
"SCHAR_MIN", _SC_SCHAR_MIN,
SYSCONF },
1972 {
"SHRT_MAX", _SC_SHRT_MAX,
SYSCONF },
1975 {
"SHRT_MIN", _SC_SHRT_MIN,
SYSCONF },
1977 #ifdef _SC_SSIZE_MAX
1978 {
"SSIZE_MAX", _SC_SSIZE_MAX,
SYSCONF },
1980 #ifdef _SC_TTY_NAME_MAX
1981 {
"TTY_NAME_MAX", _SC_TTY_NAME_MAX,
SYSCONF },
1983 #ifdef _SC_TZNAME_MAX
1984 {
"TZNAME_MAX", _SC_TZNAME_MAX,
SYSCONF },
1986 #ifdef _SC_UCHAR_MAX
1987 {
"UCHAR_MAX", _SC_UCHAR_MAX,
SYSCONF },
1990 {
"UINT_MAX", _SC_UINT_MAX,
SYSCONF },
1992 #ifdef _SC_UIO_MAXIOV
1993 {
"UIO_MAXIOV", _SC_UIO_MAXIOV,
SYSCONF },
1995 #ifdef _SC_ULONG_MAX
1996 {
"ULONG_MAX", _SC_ULONG_MAX,
SYSCONF },
1998 #ifdef _SC_USHRT_MAX
1999 {
"USHRT_MAX", _SC_USHRT_MAX,
SYSCONF },
2002 {
"WORD_BIT", _SC_WORD_BIT,
SYSCONF },
2004 #ifdef _SC_AVPHYS_PAGES
2005 {
"_AVPHYS_PAGES", _SC_AVPHYS_PAGES,
SYSCONF },
2007 #ifdef _SC_NPROCESSORS_CONF
2008 {
"_NPROCESSORS_CONF", _SC_NPROCESSORS_CONF,
SYSCONF },
2010 #ifdef _SC_NPROCESSORS_ONLN
2011 {
"_NPROCESSORS_ONLN", _SC_NPROCESSORS_ONLN,
SYSCONF },
2013 #ifdef _SC_PHYS_PAGES
2014 {
"_PHYS_PAGES", _SC_PHYS_PAGES,
SYSCONF },
2017 {
"_POSIX_ARG_MAX", _SC_ARG_MAX,
SYSCONF },
2019 #ifdef _SC_ASYNCHRONOUS_IO
2020 {
"_POSIX_ASYNCHRONOUS_IO", _SC_ASYNCHRONOUS_IO,
SYSCONF },
2022 #ifdef _SC_CHILD_MAX
2023 {
"_POSIX_CHILD_MAX", _SC_CHILD_MAX,
SYSCONF },
2026 {
"_POSIX_FSYNC", _SC_FSYNC,
SYSCONF },
2028 #ifdef _SC_JOB_CONTROL
2029 {
"_POSIX_JOB_CONTROL", _SC_JOB_CONTROL,
SYSCONF },
2031 #ifdef _SC_MAPPED_FILES
2032 {
"_POSIX_MAPPED_FILES", _SC_MAPPED_FILES,
SYSCONF },
2035 {
"_POSIX_MEMLOCK", _SC_MEMLOCK,
SYSCONF },
2037 #ifdef _SC_MEMLOCK_RANGE
2038 {
"_POSIX_MEMLOCK_RANGE", _SC_MEMLOCK_RANGE,
SYSCONF },
2040 #ifdef _SC_MEMORY_PROTECTION
2041 {
"_POSIX_MEMORY_PROTECTION", _SC_MEMORY_PROTECTION,
SYSCONF },
2043 #ifdef _SC_MESSAGE_PASSING
2044 {
"_POSIX_MESSAGE_PASSING", _SC_MESSAGE_PASSING,
SYSCONF },
2046 #ifdef _SC_NGROUPS_MAX
2047 {
"_POSIX_NGROUPS_MAX", _SC_NGROUPS_MAX,
SYSCONF },
2050 {
"_POSIX_OPEN_MAX", _SC_OPEN_MAX,
SYSCONF },
2053 {
"_POSIX_PII", _SC_PII,
SYSCONF },
2055 #ifdef _SC_PII_INTERNET
2056 {
"_POSIX_PII_INTERNET", _SC_PII_INTERNET,
SYSCONF },
2058 #ifdef _SC_PII_INTERNET_DGRAM
2059 {
"_POSIX_PII_INTERNET_DGRAM", _SC_PII_INTERNET_DGRAM,
SYSCONF },
2061 #ifdef _SC_PII_INTERNET_STREAM
2062 {
"_POSIX_PII_INTERNET_STREAM", _SC_PII_INTERNET_STREAM,
SYSCONF },
2065 {
"_POSIX_PII_OSI", _SC_PII_OSI,
SYSCONF },
2067 #ifdef _SC_PII_OSI_CLTS
2068 {
"_POSIX_PII_OSI_CLTS", _SC_PII_OSI_CLTS,
SYSCONF },
2070 #ifdef _SC_PII_OSI_COTS
2071 {
"_POSIX_PII_OSI_COTS", _SC_PII_OSI_COTS,
SYSCONF },
2073 #ifdef _SC_PII_OSI_M
2074 {
"_POSIX_PII_OSI_M", _SC_PII_OSI_M,
SYSCONF },
2076 #ifdef _SC_PII_SOCKET
2077 {
"_POSIX_PII_SOCKET", _SC_PII_SOCKET,
SYSCONF },
2080 {
"_POSIX_PII_XTI", _SC_PII_XTI,
SYSCONF },
2083 {
"_POSIX_POLL", _SC_POLL,
SYSCONF },
2085 #ifdef _SC_PRIORITIZED_IO
2086 {
"_POSIX_PRIORITIZED_IO", _SC_PRIORITIZED_IO,
SYSCONF },
2088 #ifdef _SC_PRIORITY_SCHEDULING
2089 {
"_POSIX_PRIORITY_SCHEDULING", _SC_PRIORITY_SCHEDULING,
SYSCONF },
2091 #ifdef _SC_REALTIME_SIGNALS
2092 {
"_POSIX_REALTIME_SIGNALS", _SC_REALTIME_SIGNALS,
SYSCONF },
2094 #ifdef _SC_SAVED_IDS
2095 {
"_POSIX_SAVED_IDS", _SC_SAVED_IDS,
SYSCONF },
2098 {
"_POSIX_SELECT", _SC_SELECT,
SYSCONF },
2100 #ifdef _SC_SEMAPHORES
2101 {
"_POSIX_SEMAPHORES", _SC_SEMAPHORES,
SYSCONF },
2103 #ifdef _SC_SHARED_MEMORY_OBJECTS
2104 {
"_POSIX_SHARED_MEMORY_OBJECTS", _SC_SHARED_MEMORY_OBJECTS,
SYSCONF },
2106 #ifdef _SC_SSIZE_MAX
2107 {
"_POSIX_SSIZE_MAX", _SC_SSIZE_MAX,
SYSCONF },
2109 #ifdef _SC_STREAM_MAX
2110 {
"_POSIX_STREAM_MAX", _SC_STREAM_MAX,
SYSCONF },
2112 #ifdef _SC_SYNCHRONIZED_IO
2113 {
"_POSIX_SYNCHRONIZED_IO", _SC_SYNCHRONIZED_IO,
SYSCONF },
2116 {
"_POSIX_THREADS", _SC_THREADS,
SYSCONF },
2118 #ifdef _SC_THREAD_ATTR_STACKADDR
2119 {
"_POSIX_THREAD_ATTR_STACKADDR", _SC_THREAD_ATTR_STACKADDR,
SYSCONF },
2121 #ifdef _SC_THREAD_ATTR_STACKSIZE
2122 {
"_POSIX_THREAD_ATTR_STACKSIZE", _SC_THREAD_ATTR_STACKSIZE,
SYSCONF },
2124 #ifdef _SC_THREAD_PRIORITY_SCHEDULING
2125 {
"_POSIX_THREAD_PRIORITY_SCHEDULING", _SC_THREAD_PRIORITY_SCHEDULING,
SYSCONF },
2127 #ifdef _SC_THREAD_PRIO_INHERIT
2128 {
"_POSIX_THREAD_PRIO_INHERIT", _SC_THREAD_PRIO_INHERIT,
SYSCONF },
2130 #ifdef _SC_THREAD_PRIO_PROTECT
2131 {
"_POSIX_THREAD_PRIO_PROTECT", _SC_THREAD_PRIO_PROTECT,
SYSCONF },
2133 #ifdef _SC_THREAD_PROCESS_SHARED
2134 {
"_POSIX_THREAD_PROCESS_SHARED", _SC_THREAD_PROCESS_SHARED,
SYSCONF },
2136 #ifdef _SC_THREAD_SAFE_FUNCTIONS
2137 {
"_POSIX_THREAD_SAFE_FUNCTIONS", _SC_THREAD_SAFE_FUNCTIONS,
SYSCONF },
2140 {
"_POSIX_TIMERS", _SC_TIMERS,
SYSCONF },
2142 #ifdef _SC_TIMER_MAX
2143 {
"TIMER_MAX", _SC_TIMER_MAX,
SYSCONF },
2145 #ifdef _SC_TZNAME_MAX
2146 {
"_POSIX_TZNAME_MAX", _SC_TZNAME_MAX,
SYSCONF },
2149 {
"_POSIX_VERSION", _SC_VERSION,
SYSCONF },
2151 #ifdef _SC_T_IOV_MAX
2152 {
"_T_IOV_MAX", _SC_T_IOV_MAX,
SYSCONF },
2154 #ifdef _SC_XOPEN_CRYPT
2155 {
"_XOPEN_CRYPT", _SC_XOPEN_CRYPT,
SYSCONF },
2157 #ifdef _SC_XOPEN_ENH_I18N
2158 {
"_XOPEN_ENH_I18N", _SC_XOPEN_ENH_I18N,
SYSCONF },
2160 #ifdef _SC_XOPEN_LEGACY
2161 {
"_XOPEN_LEGACY", _SC_XOPEN_LEGACY,
SYSCONF },
2163 #ifdef _SC_XOPEN_REALTIME
2164 {
"_XOPEN_REALTIME", _SC_XOPEN_REALTIME,
SYSCONF },
2166 #ifdef _SC_XOPEN_REALTIME_THREADS
2167 {
"_XOPEN_REALTIME_THREADS", _SC_XOPEN_REALTIME_THREADS,
SYSCONF },
2169 #ifdef _SC_XOPEN_SHM
2170 {
"_XOPEN_SHM", _SC_XOPEN_SHM,
SYSCONF },
2172 #ifdef _SC_XOPEN_UNIX
2173 {
"_XOPEN_UNIX", _SC_XOPEN_UNIX,
SYSCONF },
2175 #ifdef _SC_XOPEN_VERSION
2176 {
"_XOPEN_VERSION", _SC_XOPEN_VERSION,
SYSCONF },
2178 #ifdef _SC_XOPEN_XCU_VERSION
2179 {
"_XOPEN_XCU_VERSION", _SC_XOPEN_XCU_VERSION,
SYSCONF },
2181 #ifdef _SC_XOPEN_XPG2
2182 {
"_XOPEN_XPG2", _SC_XOPEN_XPG2,
SYSCONF },
2184 #ifdef _SC_XOPEN_XPG3
2185 {
"_XOPEN_XPG3", _SC_XOPEN_XPG3,
SYSCONF },
2187 #ifdef _SC_XOPEN_XPG4
2188 {
"_XOPEN_XPG4", _SC_XOPEN_XPG4,
SYSCONF },
2191 #ifdef _SC_BC_BASE_MAX
2192 {
"BC_BASE_MAX", _SC_BC_BASE_MAX,
SYSCONF },
2194 #ifdef _SC_BC_DIM_MAX
2195 {
"BC_DIM_MAX", _SC_BC_DIM_MAX,
SYSCONF },
2197 #ifdef _SC_BC_SCALE_MAX
2198 {
"BC_SCALE_MAX", _SC_BC_SCALE_MAX,
SYSCONF },
2200 #ifdef _SC_BC_STRING_MAX
2201 {
"BC_STRING_MAX", _SC_BC_STRING_MAX,
SYSCONF },
2203 #ifdef _SC_CHARCLASS_NAME_MAX
2204 {
"CHARCLASS_NAME_MAX", _SC_CHARCLASS_NAME_MAX,
SYSCONF },
2206 #ifdef _SC_COLL_WEIGHTS_MAX
2207 {
"COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX,
SYSCONF },
2209 #ifdef _SC_EQUIV_CLASS_MAX
2210 {
"EQUIV_CLASS_MAX", _SC_EQUIV_CLASS_MAX,
SYSCONF },
2212 #ifdef _SC_EXPR_NEST_MAX
2213 {
"EXPR_NEST_MAX", _SC_EXPR_NEST_MAX,
SYSCONF },
2216 {
"LINE_MAX", _SC_LINE_MAX,
SYSCONF },
2218 #ifdef _SC_BC_BASE_MAX
2219 {
"POSIX2_BC_BASE_MAX", _SC_BC_BASE_MAX,
SYSCONF },
2221 #ifdef _SC_BC_DIM_MAX
2222 {
"POSIX2_BC_DIM_MAX", _SC_BC_DIM_MAX,
SYSCONF },
2224 #ifdef _SC_BC_SCALE_MAX
2225 {
"POSIX2_BC_SCALE_MAX", _SC_BC_SCALE_MAX,
SYSCONF },
2227 #ifdef _SC_BC_STRING_MAX
2228 {
"POSIX2_BC_STRING_MAX", _SC_BC_STRING_MAX,
SYSCONF },
2230 #ifdef _SC_2_CHAR_TERM
2231 {
"POSIX2_CHAR_TERM", _SC_2_CHAR_TERM,
SYSCONF },
2233 #ifdef _SC_COLL_WEIGHTS_MAX
2234 {
"POSIX2_COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX,
SYSCONF },
2237 {
"POSIX2_C_BIND", _SC_2_C_BIND,
SYSCONF },
2240 {
"POSIX2_C_DEV", _SC_2_C_DEV,
SYSCONF },
2242 #ifdef _SC_2_C_VERSION
2243 {
"POSIX2_C_VERSION", _SC_2_C_VERSION,
SYSCONF },
2245 #ifdef _SC_EXPR_NEST_MAX
2246 {
"POSIX2_EXPR_NEST_MAX", _SC_EXPR_NEST_MAX,
SYSCONF },
2248 #ifdef _SC_2_FORT_DEV
2249 {
"POSIX2_FORT_DEV", _SC_2_FORT_DEV,
SYSCONF },
2251 #ifdef _SC_2_FORT_RUN
2252 {
"POSIX2_FORT_RUN", _SC_2_FORT_RUN,
SYSCONF },
2255 {
"_POSIX2_LINE_MAX", _SC_LINE_MAX,
SYSCONF },
2257 #ifdef _SC_2_LOCALEDEF
2258 {
"POSIX2_LOCALEDEF", _SC_2_LOCALEDEF,
SYSCONF },
2260 #ifdef _SC_RE_DUP_MAX
2261 {
"POSIX2_RE_DUP_MAX", _SC_RE_DUP_MAX,
SYSCONF },
2264 {
"POSIX2_SW_DEV", _SC_2_SW_DEV,
SYSCONF },
2267 {
"POSIX2_UPE", _SC_2_UPE,
SYSCONF },
2269 #ifdef _SC_2_VERSION
2270 {
"POSIX2_VERSION", _SC_2_VERSION,
SYSCONF },
2272 #ifdef _SC_RE_DUP_MAX
2273 {
"RE_DUP_MAX", _SC_RE_DUP_MAX,
SYSCONF },
2277 {
"PATH", _CS_PATH,
CONFSTR },
2278 {
"CS_PATH", _CS_PATH,
CONFSTR },
2282 #ifdef _CS_LFS_CFLAGS
2283 {
"LFS_CFLAGS", _CS_LFS_CFLAGS,
CONFSTR },
2285 #ifdef _CS_LFS_LDFLAGS
2286 {
"LFS_LDFLAGS", _CS_LFS_LDFLAGS,
CONFSTR },
2289 {
"LFS_LIBS", _CS_LFS_LIBS,
CONFSTR },
2291 #ifdef _CS_LFS_LINTFLAGS
2292 {
"LFS_LINTFLAGS", _CS_LFS_LINTFLAGS,
CONFSTR },
2294 #ifdef _CS_LFS64_CFLAGS
2295 {
"LFS64_CFLAGS", _CS_LFS64_CFLAGS,
CONFSTR },
2297 #ifdef _CS_LFS64_LDFLAGS
2298 {
"LFS64_LDFLAGS", _CS_LFS64_LDFLAGS,
CONFSTR },
2300 #ifdef _CS_LFS64_LIBS
2301 {
"LFS64_LIBS", _CS_LFS64_LIBS,
CONFSTR },
2303 #ifdef _CS_LFS64_LINTFLAGS
2304 {
"LFS64_LINTFLAGS", _CS_LFS64_LINTFLAGS,
CONFSTR },
2308 #ifdef _SC_XBS5_ILP32_OFF32
2309 {
"_XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32,
SYSCONF },
2311 #ifdef _CS_XBS5_ILP32_OFF32_CFLAGS
2312 {
"XBS5_ILP32_OFF32_CFLAGS", _CS_XBS5_ILP32_OFF32_CFLAGS,
CONFSTR },
2314 #ifdef _CS_XBS5_ILP32_OFF32_LDFLAGS
2315 {
"XBS5_ILP32_OFF32_LDFLAGS", _CS_XBS5_ILP32_OFF32_LDFLAGS,
CONFSTR },
2317 #ifdef _CS_XBS5_ILP32_OFF32_LIBS
2318 {
"XBS5_ILP32_OFF32_LIBS", _CS_XBS5_ILP32_OFF32_LIBS,
CONFSTR },
2320 #ifdef _CS_XBS5_ILP32_OFF32_LINTFLAGS
2321 {
"XBS5_ILP32_OFF32_LINTFLAGS", _CS_XBS5_ILP32_OFF32_LINTFLAGS,
CONFSTR },
2324 #ifdef _SC_XBS5_ILP32_OFFBIG
2325 {
"_XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG,
SYSCONF },
2327 #ifdef _CS_XBS5_ILP32_OFFBIG_CFLAGS
2328 {
"XBS5_ILP32_OFFBIG_CFLAGS", _CS_XBS5_ILP32_OFFBIG_CFLAGS,
CONFSTR },
2330 #ifdef _CS_XBS5_ILP32_OFFBIG_LDFLAGS
2331 {
"XBS5_ILP32_OFFBIG_LDFLAGS", _CS_XBS5_ILP32_OFFBIG_LDFLAGS,
CONFSTR },
2333 #ifdef _CS_XBS5_ILP32_OFFBIG_LIBS
2334 {
"XBS5_ILP32_OFFBIG_LIBS", _CS_XBS5_ILP32_OFFBIG_LIBS,
CONFSTR },
2336 #ifdef _CS_XBS5_ILP32_OFFBIG_LINTFLAGS
2337 {
"XBS5_ILP32_OFFBIG_LINTFLAGS", _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,
CONFSTR },
2340 #ifdef _SC_XBS5_LP64_OFF64
2341 {
"_XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64,
SYSCONF },
2343 #ifdef _CS_XBS5_LP64_OFF64_CFLAGS
2344 {
"XBS5_LP64_OFF64_CFLAGS", _CS_XBS5_LP64_OFF64_CFLAGS,
CONFSTR },
2346 #ifdef _CS_XBS5_LP64_OFF64_LDFLAGS
2347 {
"XBS5_LP64_OFF64_LDFLAGS", _CS_XBS5_LP64_OFF64_LDFLAGS,
CONFSTR },
2349 #ifdef _CS_XBS5_LP64_OFF64_LIBS
2350 {
"XBS5_LP64_OFF64_LIBS", _CS_XBS5_LP64_OFF64_LIBS,
CONFSTR },
2352 #ifdef _CS_XBS5_LP64_OFF64_LINTFLAGS
2353 {
"XBS5_LP64_OFF64_LINTFLAGS", _CS_XBS5_LP64_OFF64_LINTFLAGS,
CONFSTR },
2356 #ifdef _SC_XBS5_LPBIG_OFFBIG
2357 {
"_XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG,
SYSCONF },
2359 #ifdef _CS_XBS5_LPBIG_OFFBIG_CFLAGS
2360 {
"XBS5_LPBIG_OFFBIG_CFLAGS", _CS_XBS5_LPBIG_OFFBIG_CFLAGS,
CONFSTR },
2362 #ifdef _CS_XBS5_LPBIG_OFFBIG_LDFLAGS
2363 {
"XBS5_LPBIG_OFFBIG_LDFLAGS", _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,
CONFSTR },
2365 #ifdef _CS_XBS5_LPBIG_OFFBIG_LIBS
2366 {
"XBS5_LPBIG_OFFBIG_LIBS", _CS_XBS5_LPBIG_OFFBIG_LIBS,
CONFSTR },
2368 #ifdef _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
2369 {
"XBS5_LPBIG_OFFBIG_LINTFLAGS", _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,
CONFSTR },
2372 #ifdef _SC_V6_ILP32_OFF32
2373 {
"_POSIX_V6_ILP32_OFF32", _SC_V6_ILP32_OFF32,
SYSCONF },
2375 #ifdef _CS_POSIX_V6_ILP32_OFF32_CFLAGS
2376 {
"POSIX_V6_ILP32_OFF32_CFLAGS", _CS_POSIX_V6_ILP32_OFF32_CFLAGS,
CONFSTR },
2378 #ifdef _CS_POSIX_V6_ILP32_OFF32_LDFLAGS
2379 {
"POSIX_V6_ILP32_OFF32_LDFLAGS", _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,
CONFSTR },
2381 #ifdef _CS_POSIX_V6_ILP32_OFF32_LIBS
2382 {
"POSIX_V6_ILP32_OFF32_LIBS", _CS_POSIX_V6_ILP32_OFF32_LIBS,
CONFSTR },
2384 #ifdef _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS
2385 {
"POSIX_V6_ILP32_OFF32_LINTFLAGS", _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,
CONFSTR },
2388 #ifdef _CS_V6_WIDTH_RESTRICTED_ENVS
2389 {
"_POSIX_V6_WIDTH_RESTRICTED_ENVS", _CS_V6_WIDTH_RESTRICTED_ENVS,
CONFSTR },
2392 #ifdef _SC_V6_ILP32_OFFBIG
2393 {
"_POSIX_V6_ILP32_OFFBIG", _SC_V6_ILP32_OFFBIG,
SYSCONF },
2395 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
2396 {
"POSIX_V6_ILP32_OFFBIG_CFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,
CONFSTR },
2398 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
2399 {
"POSIX_V6_ILP32_OFFBIG_LDFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,
CONFSTR },
2401 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_LIBS
2402 {
"POSIX_V6_ILP32_OFFBIG_LIBS", _CS_POSIX_V6_ILP32_OFFBIG_LIBS,
CONFSTR },
2404 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS
2405 {
"POSIX_V6_ILP32_OFFBIG_LINTFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,
CONFSTR },
2408 #ifdef _SC_V6_LP64_OFF64
2409 {
"_POSIX_V6_LP64_OFF64", _SC_V6_LP64_OFF64,
SYSCONF },
2411 #ifdef _CS_POSIX_V6_LP64_OFF64_CFLAGS
2412 {
"POSIX_V6_LP64_OFF64_CFLAGS", _CS_POSIX_V6_LP64_OFF64_CFLAGS,
CONFSTR },
2414 #ifdef _CS_POSIX_V6_LP64_OFF64_LDFLAGS
2415 {
"POSIX_V6_LP64_OFF64_LDFLAGS", _CS_POSIX_V6_LP64_OFF64_LDFLAGS,
CONFSTR },
2417 #ifdef _CS_POSIX_V6_LP64_OFF64_LIBS
2418 {
"POSIX_V6_LP64_OFF64_LIBS", _CS_POSIX_V6_LP64_OFF64_LIBS,
CONFSTR },
2420 #ifdef _CS_POSIX_V6_LP64_OFF64_LINTFLAGS
2421 {
"POSIX_V6_LP64_OFF64_LINTFLAGS", _CS_POSIX_V6_LP64_OFF64_LINTFLAGS,
CONFSTR },
2424 #ifdef _SC_V6_LPBIG_OFFBIG
2425 {
"_POSIX_V6_LPBIG_OFFBIG", _SC_V6_LPBIG_OFFBIG,
SYSCONF },
2427 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
2428 {
"POSIX_V6_LPBIG_OFFBIG_CFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,
CONFSTR },
2430 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
2431 {
"POSIX_V6_LPBIG_OFFBIG_LDFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,
CONFSTR },
2433 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LIBS
2434 {
"POSIX_V6_LPBIG_OFFBIG_LIBS", _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,
CONFSTR },
2436 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS
2437 {
"POSIX_V6_LPBIG_OFFBIG_LINTFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,
CONFSTR },
2440 #ifdef _SC_ADVISORY_INFO
2441 {
"_POSIX_ADVISORY_INFO", _SC_ADVISORY_INFO,
SYSCONF },
2444 {
"_POSIX_BARRIERS", _SC_BARRIERS,
SYSCONF },
2447 {
"_POSIX_BASE", _SC_BASE,
SYSCONF },
2449 #ifdef _SC_C_LANG_SUPPORT
2450 {
"_POSIX_C_LANG_SUPPORT", _SC_C_LANG_SUPPORT,
SYSCONF },
2452 #ifdef _SC_C_LANG_SUPPORT_R
2453 {
"_POSIX_C_LANG_SUPPORT_R", _SC_C_LANG_SUPPORT_R,
SYSCONF },
2455 #ifdef _SC_CLOCK_SELECTION
2456 {
"_POSIX_CLOCK_SELECTION", _SC_CLOCK_SELECTION,
SYSCONF },
2459 {
"_POSIX_CPUTIME", _SC_CPUTIME,
SYSCONF },
2461 #ifdef _SC_THREAD_CPUTIME
2462 {
"_POSIX_THREAD_CPUTIME", _SC_THREAD_CPUTIME,
SYSCONF },
2464 #ifdef _SC_DEVICE_SPECIFIC
2465 {
"_POSIX_DEVICE_SPECIFIC", _SC_DEVICE_SPECIFIC,
SYSCONF },
2467 #ifdef _SC_DEVICE_SPECIFIC_R
2468 {
"_POSIX_DEVICE_SPECIFIC_R", _SC_DEVICE_SPECIFIC_R,
SYSCONF },
2471 {
"_POSIX_FD_MGMT", _SC_FD_MGMT,
SYSCONF },
2474 {
"_POSIX_FIFO", _SC_FIFO,
SYSCONF },
2477 {
"_POSIX_PIPE", _SC_PIPE,
SYSCONF },
2479 #ifdef _SC_FILE_ATTRIBUTES
2480 {
"_POSIX_FILE_ATTRIBUTES", _SC_FILE_ATTRIBUTES,
SYSCONF },
2482 #ifdef _SC_FILE_LOCKING
2483 {
"_POSIX_FILE_LOCKING", _SC_FILE_LOCKING,
SYSCONF },
2485 #ifdef _SC_FILE_SYSTEM
2486 {
"_POSIX_FILE_SYSTEM", _SC_FILE_SYSTEM,
SYSCONF },
2488 #ifdef _SC_MONOTONIC_CLOCK
2489 {
"_POSIX_MONOTONIC_CLOCK", _SC_MONOTONIC_CLOCK,
SYSCONF },
2491 #ifdef _SC_MULTI_PROCESS
2492 {
"_POSIX_MULTI_PROCESS", _SC_MULTI_PROCESS,
SYSCONF },
2494 #ifdef _SC_SINGLE_PROCESS
2495 {
"_POSIX_SINGLE_PROCESS", _SC_SINGLE_PROCESS,
SYSCONF },
2497 #ifdef _SC_NETWORKING
2498 {
"_POSIX_NETWORKING", _SC_NETWORKING,
SYSCONF },
2500 #ifdef _SC_READER_WRITER_LOCKS
2501 {
"_POSIX_READER_WRITER_LOCKS", _SC_READER_WRITER_LOCKS,
SYSCONF },
2503 #ifdef _SC_SPIN_LOCKS
2504 {
"_POSIX_SPIN_LOCKS", _SC_SPIN_LOCKS,
SYSCONF },
2507 {
"_POSIX_REGEXP", _SC_REGEXP,
SYSCONF },
2509 #ifdef _SC_REGEX_VERSION
2510 {
"_REGEX_VERSION", _SC_REGEX_VERSION,
SYSCONF },
2513 {
"_POSIX_SHELL", _SC_SHELL,
SYSCONF },
2516 {
"_POSIX_SIGNALS", _SC_SIGNALS,
SYSCONF },
2519 {
"_POSIX_SPAWN", _SC_SPAWN,
SYSCONF },
2521 #ifdef _SC_SPORADIC_SERVER
2522 {
"_POSIX_SPORADIC_SERVER", _SC_SPORADIC_SERVER,
SYSCONF },
2524 #ifdef _SC_THREAD_SPORADIC_SERVER
2525 {
"_POSIX_THREAD_SPORADIC_SERVER", _SC_THREAD_SPORADIC_SERVER,
SYSCONF },
2527 #ifdef _SC_SYSTEM_DATABASE
2528 {
"_POSIX_SYSTEM_DATABASE", _SC_SYSTEM_DATABASE,
SYSCONF },
2530 #ifdef _SC_SYSTEM_DATABASE_R
2531 {
"_POSIX_SYSTEM_DATABASE_R", _SC_SYSTEM_DATABASE_R,
SYSCONF },
2534 {
"_POSIX_TIMEOUTS", _SC_TIMEOUTS,
SYSCONF },
2536 #ifdef _SC_TYPED_MEMORY_OBJECTS
2537 {
"_POSIX_TYPED_MEMORY_OBJECTS", _SC_TYPED_MEMORY_OBJECTS,
SYSCONF },
2539 #ifdef _SC_USER_GROUPS
2540 {
"_POSIX_USER_GROUPS", _SC_USER_GROUPS,
SYSCONF },
2542 #ifdef _SC_USER_GROUPS_R
2543 {
"_POSIX_USER_GROUPS_R", _SC_USER_GROUPS_R,
SYSCONF },
2546 {
"POSIX2_PBS", _SC_2_PBS,
SYSCONF },
2548 #ifdef _SC_2_PBS_ACCOUNTING
2549 {
"POSIX2_PBS_ACCOUNTING", _SC_2_PBS_ACCOUNTING,
SYSCONF },
2551 #ifdef _SC_2_PBS_LOCATE
2552 {
"POSIX2_PBS_LOCATE", _SC_2_PBS_LOCATE,
SYSCONF },
2554 #ifdef _SC_2_PBS_TRACK
2555 {
"POSIX2_PBS_TRACK", _SC_2_PBS_TRACK,
SYSCONF },
2557 #ifdef _SC_2_PBS_MESSAGE
2558 {
"POSIX2_PBS_MESSAGE", _SC_2_PBS_MESSAGE,
SYSCONF },
2560 #ifdef _SC_SYMLOOP_MAX
2561 {
"SYMLOOP_MAX", _SC_SYMLOOP_MAX,
SYSCONF },
2563 #ifdef _SC_STREAM_MAX
2564 {
"STREAM_MAX", _SC_STREAM_MAX,
SYSCONF },
2566 #ifdef _SC_AIO_LISTIO_MAX
2567 {
"AIO_LISTIO_MAX", _SC_AIO_LISTIO_MAX,
SYSCONF },
2570 {
"AIO_MAX", _SC_AIO_MAX,
SYSCONF },
2572 #ifdef _SC_AIO_PRIO_DELTA_MAX
2573 {
"AIO_PRIO_DELTA_MAX", _SC_AIO_PRIO_DELTA_MAX,
SYSCONF },
2575 #ifdef _SC_DELAYTIMER_MAX
2576 {
"DELAYTIMER_MAX", _SC_DELAYTIMER_MAX,
SYSCONF },
2578 #ifdef _SC_HOST_NAME_MAX
2579 {
"HOST_NAME_MAX", _SC_HOST_NAME_MAX,
SYSCONF },
2581 #ifdef _SC_LOGIN_NAME_MAX
2582 {
"LOGIN_NAME_MAX", _SC_LOGIN_NAME_MAX,
SYSCONF },
2584 #ifdef _SC_MQ_OPEN_MAX
2585 {
"MQ_OPEN_MAX", _SC_MQ_OPEN_MAX,
SYSCONF },
2587 #ifdef _SC_MQ_PRIO_MAX
2588 {
"MQ_PRIO_MAX", _SC_MQ_PRIO_MAX,
SYSCONF },
2590 #ifdef _SC_DEVICE_IO
2591 {
"_POSIX_DEVICE_IO", _SC_DEVICE_IO,
SYSCONF },
2594 {
"_POSIX_TRACE", _SC_TRACE,
SYSCONF },
2596 #ifdef _SC_TRACE_EVENT_FILTER
2597 {
"_POSIX_TRACE_EVENT_FILTER", _SC_TRACE_EVENT_FILTER,
SYSCONF },
2599 #ifdef _SC_TRACE_INHERIT
2600 {
"_POSIX_TRACE_INHERIT", _SC_TRACE_INHERIT,
SYSCONF },
2602 #ifdef _SC_TRACE_LOG
2603 {
"_POSIX_TRACE_LOG", _SC_TRACE_LOG,
SYSCONF },
2605 #ifdef _SC_RTSIG_MAX
2606 {
"RTSIG_MAX", _SC_RTSIG_MAX,
SYSCONF },
2608 #ifdef _SC_SEM_NSEMS_MAX
2609 {
"SEM_NSEMS_MAX", _SC_SEM_NSEMS_MAX,
SYSCONF },
2611 #ifdef _SC_SEM_VALUE_MAX
2612 {
"SEM_VALUE_MAX", _SC_SEM_VALUE_MAX,
SYSCONF },
2614 #ifdef _SC_SIGQUEUE_MAX
2615 {
"SIGQUEUE_MAX", _SC_SIGQUEUE_MAX,
SYSCONF },
2617 #ifdef _PC_FILESIZEBITS
2618 {
"FILESIZEBITS", _PC_FILESIZEBITS,
PATHCONF },
2620 #ifdef _PC_ALLOC_SIZE_MIN
2621 {
"POSIX_ALLOC_SIZE_MIN", _PC_ALLOC_SIZE_MIN,
PATHCONF },
2623 #ifdef _PC_REC_INCR_XFER_SIZE
2624 {
"POSIX_REC_INCR_XFER_SIZE", _PC_REC_INCR_XFER_SIZE,
PATHCONF },
2626 #ifdef _PC_REC_MAX_XFER_SIZE
2627 {
"POSIX_REC_MAX_XFER_SIZE", _PC_REC_MAX_XFER_SIZE,
PATHCONF },
2629 #ifdef _PC_REC_MIN_XFER_SIZE
2630 {
"POSIX_REC_MIN_XFER_SIZE", _PC_REC_MIN_XFER_SIZE,
PATHCONF },
2632 #ifdef _PC_REC_XFER_ALIGN
2633 {
"POSIX_REC_XFER_ALIGN", _PC_REC_XFER_ALIGN,
PATHCONF },
2635 #ifdef _PC_SYMLINK_MAX
2636 {
"SYMLINK_MAX", _PC_SYMLINK_MAX,
PATHCONF },
2638 #ifdef _CS_GNU_LIBC_VERSION
2639 {
"GNU_LIBC_VERSION", _CS_GNU_LIBC_VERSION,
CONFSTR },
2641 #ifdef _CS_GNU_LIBPTHREAD_VERSION
2642 {
"GNU_LIBPTHREAD_VERSION", _CS_GNU_LIBPTHREAD_VERSION,
CONFSTR },
2644 #ifdef _PC_2_SYMLINKS
2645 {
"POSIX2_SYMLINKS", _PC_2_SYMLINKS,
PATHCONF },
2648 #ifdef _SC_LEVEL1_ICACHE_SIZE
2649 {
"LEVEL1_ICACHE_SIZE", _SC_LEVEL1_ICACHE_SIZE,
SYSCONF },
2651 #ifdef _SC_LEVEL1_ICACHE_ASSOC
2652 {
"LEVEL1_ICACHE_ASSOC", _SC_LEVEL1_ICACHE_ASSOC,
SYSCONF },
2654 #ifdef _SC_LEVEL1_ICACHE_LINESIZE
2655 {
"LEVEL1_ICACHE_LINESIZE", _SC_LEVEL1_ICACHE_LINESIZE,
SYSCONF },
2657 #ifdef _SC_LEVEL1_DCACHE_SIZE
2658 {
"LEVEL1_DCACHE_SIZE", _SC_LEVEL1_DCACHE_SIZE,
SYSCONF },
2660 #ifdef _SC_LEVEL1_DCACHE_ASSOC
2661 {
"LEVEL1_DCACHE_ASSOC", _SC_LEVEL1_DCACHE_ASSOC,
SYSCONF },
2663 #ifdef _SC_LEVEL1_DCACHE_LINESIZE
2664 {
"LEVEL1_DCACHE_LINESIZE", _SC_LEVEL1_DCACHE_LINESIZE,
SYSCONF },
2666 #ifdef _SC_LEVEL2_CACHE_SIZE
2667 {
"LEVEL2_CACHE_SIZE", _SC_LEVEL2_CACHE_SIZE,
SYSCONF },
2669 #ifdef _SC_LEVEL2_CACHE_ASSOC
2670 {
"LEVEL2_CACHE_ASSOC", _SC_LEVEL2_CACHE_ASSOC,
SYSCONF },
2672 #ifdef _SC_LEVEL2_CACHE_LINESIZE
2673 {
"LEVEL2_CACHE_LINESIZE", _SC_LEVEL2_CACHE_LINESIZE,
SYSCONF },
2675 #ifdef _SC_LEVEL3_CACHE_SIZE
2676 {
"LEVEL3_CACHE_SIZE", _SC_LEVEL3_CACHE_SIZE,
SYSCONF },
2678 #ifdef _SC_LEVEL3_CACHE_ASSOC
2679 {
"LEVEL3_CACHE_ASSOC", _SC_LEVEL3_CACHE_ASSOC,
SYSCONF },
2681 #ifdef _SC_LEVEL3_CACHE_LINESIZE
2682 {
"LEVEL3_CACHE_LINESIZE", _SC_LEVEL3_CACHE_LINESIZE,
SYSCONF },
2684 #ifdef _SC_LEVEL4_CACHE_SIZE
2685 {
"LEVEL4_CACHE_SIZE", _SC_LEVEL4_CACHE_SIZE,
SYSCONF },
2687 #ifdef _SC_LEVEL4_CACHE_ASSOC
2688 {
"LEVEL4_CACHE_ASSOC", _SC_LEVEL4_CACHE_ASSOC,
SYSCONF },
2692 {
"IPV6", _SC_IPV6,
SYSCONF },
2694 #ifdef _SC_RAW_SOCKETS
2695 {
"RAW_SOCKETS", _SC_RAW_SOCKETS,
SYSCONF },
2701 #define _GETCONF_PATH "/"
2713 const char * NS =
"getconf";
2720 if (_getconf_path == NULL) {
2721 _getconf_path =
rpmExpand(
"%{?_rpmds__getconf_path}", NULL);
2723 if (!(_getconf_path != NULL && *_getconf_path ==
'/')) {
2725 _getconf_path =
_free(_getconf_path);
2749 #if defined(_SC_UINT_MAX) && defined(_SC_ULONG_MAX)
2765 clen = confstr(c->
call_name, (
char *) NULL, 0);
2766 EVR = (
char *)
xmalloc(clen+1);
2779 for (t = EVR; *
t; t++) {
2780 if (*t ==
'\n') *t =
' ';
2782 if (!
strcmp(N,
"GNU_LIBC_VERSION")
2783 || !
strcmp(N,
"GNU_LIBPTHREAD_VERSION"))
2785 for (t = EVR; *
t; t++) {
2786 if (*t ==
' ') *t =
'-';
2790 if (*EVR ==
'\0' || strchr(EVR,
' ') != NULL
2791 || (EVR[0] ==
'-' && strchr(
"0123456789", EVR[1]) == NULL))
2810 if (_rpmds_debug < 0)
2860 memset(PRCO, 0,
sizeof(*PRCO));
2871 static int scareMem = 0;
2881 PRCO->Pdsp = &PRCO->P;
2882 PRCO->Rdsp = &PRCO->R;
2883 PRCO->Cdsp = &PRCO->C;
2884 PRCO->Odsp = &PRCO->O;
2885 PRCO->Tdsp = &PRCO->T;
2886 PRCO->Ddsp = &PRCO->D;
2887 PRCO->Ldsp = &PRCO->L;
2916 #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__)
2917 static char * sonameDep(
char * t,
const char *
s,
int isElf64)
2921 #if !defined(__alpha__) && !defined(__sun)
2923 if (s[strlen(s)-1] !=
')')
2936 int (*add) (
void * context,
rpmds ds),
void * context)
2938 #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__)
2942 GElf_Ehdr ehdr_mem, * ehdr;
2943 GElf_Shdr shdr_mem, * shdr;
2944 GElf_Verdef def_mem, * def;
2945 GElf_Verneed need_mem, * need;
2946 GElf_Dyn dyn_mem, * dyn;
2947 unsigned int auxoffset;
2955 const char * soname =
NULL;
2967 static int filter_GLIBC_PRIVATE = 0;
2968 static int oneshot = 0;
2971 if (_rpmds_debug < 0)
2972 fprintf(stderr,
"*** rpmdsELF(%s, %d, %p, %p)\n", fn, flags, (
void *)add, context);
2980 {
struct stat sb, *
st = &sb;
2981 if (stat(fn, st) != 0)
2983 is_executable = (
int)(st->st_mode & (S_IXUSR|S_IXGRP|S_IXOTH));
2986 fdno = open(fn, O_RDONLY);
2990 (
void) elf_version(EV_CURRENT);
2994 if ((elf = elf_begin (fdno, ELF_C_READ, NULL)) == NULL
2995 || elf_kind(elf) != ELF_K_ELF
2996 || (ehdr = gelf_getehdr(elf, &ehdr_mem)) == NULL
2997 || !(ehdr->e_type == ET_DYN || ehdr->e_type == ET_EXEC))
3001 isElf64 = ehdr->e_ident[EI_CLASS] == ELFCLASS64;
3002 isDSO = ehdr->e_type == ET_DYN;
3006 while ((scn = elf_nextscn(elf, scn)) != NULL) {
3007 shdr = gelf_getshdr(scn, &shdr_mem);
3011 soname =
_free(soname);
3012 switch (shdr->sh_type) {
3017 #if defined(HAVE_GELF_GETNOTE)
3018 if (!(shdr->sh_flags & SHF_ALLOC))
3021 while ((data = elf_getdata(scn, data)) != NULL) {
3026 while (offset < data->d_size
3027 && (offset = gelf_getnote(data, offset,
3028 &nhdr, &name_offset, &desc_offset)) > 0)
3030 const char *
name = ((
char *)data->d_buf) + name_offset;
3031 const char *desc = ((
char *)data->d_buf) + desc_offset;
3032 if (
memchr(name,
'\0', nhdr.n_namesz) ==
NULL)
3034 switch (nhdr.n_type) {
3036 #if !defined(NT_GNU_BUILD_ID)
3037 #define NT_GNU_BUILD_ID 3
3039 case NT_GNU_BUILD_ID:
3040 if (
strcmp(name,
"GNU") == 0 && nhdr.n_descsz > 0) {
3041 static const char hex[] =
"0123456789abcdef";
3047 for (i = 0; i < nhdr.n_descsz; ++
i) {
3048 *t++ = hex[ (((
unsigned)desc[i] >> 4) & 0x0f) ];
3049 *t++ = hex[ (((
unsigned)desc[i] ) & 0x0f) ];
3055 xx = add(context, ds);
3065 case SHT_GNU_verdef:
3068 while ((data = elf_getdata (scn, data)) !=
NULL) {
3070 for (cnt = (
int)shdr->sh_info; --cnt >= 0; ) {
3072 def = gelf_getverdef (data, offset, &def_mem);
3075 auxoffset = (
unsigned)(offset + def->vd_aux);
3076 for (cnt2 = (
int)def->vd_cnt; --cnt2 >= 0; ) {
3077 GElf_Verdaux aux_mem, * aux;
3079 aux = gelf_getverdaux (data, auxoffset, &aux_mem);
3083 s = elf_strptr(elf, shdr->sh_link, aux->vda_name);
3087 if (def->vd_flags & VER_FLG_BASE) {
3088 soname =
_free(soname);
3092 && !(filter_GLIBC_PRIVATE != 0
3093 && !
strcmp(s,
"GLIBC_PRIVATE")))
3103 sonameDep(t, buf, isElf64),
3104 "", RPMSENSE_FIND_PROVIDES);
3105 xx = add(context, ds);
3109 auxoffset += aux->vda_next;
3111 offset += def->vd_next;
3115 case SHT_GNU_verneed:
3118 if (!skipR && is_executable)
3119 while ((data = elf_getdata (scn, data)) !=
NULL) {
3121 for (cnt = (
int)shdr->sh_info; --cnt >= 0; ) {
3122 need = gelf_getverneed (data, offset, &need_mem);
3126 s = elf_strptr(elf, shdr->sh_link, need->vn_file);
3129 soname =
_free(soname);
3131 auxoffset = (
unsigned)(offset + need->vn_aux);
3132 for (cnt2 = (
int)need->vn_cnt; --cnt2 >= 0; ) {
3133 GElf_Vernaux aux_mem, * aux;
3135 aux = gelf_getvernaux (data, auxoffset, &aux_mem);
3139 s = elf_strptr(elf, shdr->sh_link, aux->vna_name);
3145 && !(filter_GLIBC_PRIVATE != 0
3146 && !
strcmp(s,
"GLIBC_PRIVATE")))
3156 sonameDep(t, buf, isElf64),
3157 "", RPMSENSE_FIND_REQUIRES);
3158 xx = add(context, ds);
3162 auxoffset += aux->vna_next;
3164 offset += need->vn_next;
3170 while ((data = elf_getdata (scn, data)) !=
NULL) {
3171 for (cnt = 0; cnt < (
int)(shdr->sh_size / shdr->sh_entsize); ++cnt) {
3172 dyn = gelf_getdyn (data, cnt, &dyn_mem);
3176 switch (dyn->d_tag) {
3191 if (skipR || !is_executable)
3194 s = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val);
3198 sonameDep(buf, s, isElf64),
3199 "", RPMSENSE_FIND_REQUIRES);
3200 xx = add(context, ds);
3208 s = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val);
3213 sonameDep(buf, s, isElf64),
3214 "", RPMSENSE_FIND_PROVIDES);
3215 xx = add(context, ds);
3229 if (gotGNUHASH && !gotHASH) {
3231 RPMSENSE_FIND_REQUIRES);
3232 xx = add(context, ds);
3238 if (!skipP && isDSO && !gotDEBUG && !gotSONAME) {
3239 s = strrchr(fn,
'/');
3249 sonameDep(buf, s, isElf64),
"", RPMSENSE_FIND_PROVIDES);
3250 xx = add(context, ds);
3256 soname =
_free(soname);
3257 if (elf) (
void) elf_end(elf);
3268 #if defined(RPM_VENDOR_MANDRIVA)
3275 #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__)
3276 static char * mdvSonameDep(
char * t,
const char * s,
int isElf64,
int devel)
3282 tmp =
stpcpy(t,
"devel(");
3284 #if !defined(__alpha__) && !defined(__sun)
3287 if (!devel && s[strlen(s)-1] !=
')')
3292 tmp = strstr(t,
".so");
3293 tmp =
stpcpy(tmp,
"(64bit)");
3299 char *
suffix = strstr(t,
".so");
3318 int rpmdsSymlink(
const char * fn,
int flags,
3319 int (*add) (
void * context,
rpmds ds),
void * context)
3322 int rpmdsSymlink(
const char * fn,
int flags,
3323 int (*add) (
void * context,
rpmds ds),
void * context)
3325 #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__)
3329 GElf_Ehdr ehdr_mem, * ehdr;
3330 GElf_Shdr shdr_mem, * shdr;
3331 GElf_Dyn dyn_mem, * dyn;
3338 const char * soname =
NULL;
3351 const char *filterRequires[] = {
"ld-linux",
"ld64-linux" "libBrokenLocale.so",
3352 "libanl.so",
"libc.so",
"libcidn.so",
"libcrypt.so",
"libdl.so",
"libm.so",
3353 "libnsl.so",
"libnss_compat.so",
"libnss_dns.so",
"libnss_files.so",
3354 "libnss_hesiod.so",
"libnss_nis.so",
"libnss_nisplus.so",
"libpthread.so",
3355 "libresolv.so",
"librt.so",
"libutil.so",
"libthread_db.so"};
3359 if ((s = strrchr(fn,
'.')) &&
strcmp(s,
".so"))
3362 if ((lnklen = readlink(fn, path,
MAXPATHLEN - 1)) == -1) {
3366 path[lnklen] =
'\0';
3369 if (_rpmds_debug < 0)
3370 fprintf(stderr,
"*** rpmdsELF(%s, %d, %p, %p)\n", fn, flags, (
void *)add, context);
3374 {
struct stat sb, *
st = &sb;
3375 if (lstat(fn, st) != 0)
3377 is_executable = (
int)(st->st_mode & (S_IXUSR|S_IXGRP|S_IXOTH));
3380 fdno = open(fn, O_RDONLY);
3384 (
void) elf_version(EV_CURRENT);
3388 if ((elf = elf_begin (fdno, ELF_C_READ, NULL)) == NULL
3389 || elf_kind(elf) != ELF_K_ELF
3390 || (ehdr = gelf_getehdr(elf, &ehdr_mem)) == NULL
3391 || !(ehdr->e_type == ET_DYN || ehdr->e_type == ET_EXEC))
3395 isElf64 = ehdr->e_ident[EI_CLASS] == ELFCLASS64;
3399 while ((scn = elf_nextscn(elf, scn)) != NULL) {
3400 shdr = gelf_getshdr(scn, &shdr_mem);
3404 soname =
_free(soname);
3405 switch (shdr->sh_type) {
3411 while ((data = elf_getdata (scn, data)) != NULL) {
3412 for (cnt = 0; cnt < (
int)(shdr->sh_size / shdr->sh_entsize); ++cnt) {
3413 dyn = gelf_getdyn (data, cnt, &dyn_mem);
3417 switch (dyn->d_tag) {
3423 if (skipR || !is_executable)
3426 s = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val);
3430 for (i = 0; i < (
int)(
sizeof(filterRequires)/
sizeof(filterRequires[0])); i++)
3431 if (!strncmp(s, filterRequires[i], strlen(filterRequires[i])))
3434 if (
sizeof(filterRequires)/
sizeof(filterRequires[0]) == i)
3439 s = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val);
3446 mdvSonameDep(buf, s, isElf64, 1),
3447 "", RPMSENSE_FIND_PROVIDES);
3448 xx = add(context, ds);
3462 if (gotSONAME && !skipR)
3463 for (i = 0, cnt =
argvCount(deps); i < cnt; i++) {
3465 mdvSonameDep(buf, deps[i], isElf64, 1),
3466 "", RPMSENSE_FIND_REQUIRES);
3467 xx = add(context, ds);
3473 if (elf) (
void) elf_end(elf);
3483 #define _SBIN_LDCONFIG_P "/sbin/ldconfig -p"
3487 #define _LD_SO_CACHE "/etc/ld.so.cache"
3497 const char *
N, *
EVR;
3511 if (_ldconfig_cmd == NULL) {
3512 _ldconfig_cmd =
rpmExpand(
"%{?_rpmds_ldconfig_cmd}", NULL);
3513 if (!(_ldconfig_cmd != NULL && *_ldconfig_cmd ==
'/')) {
3515 _ldconfig_cmd =
_free(_ldconfig_cmd);
3521 if (_ldconfig_cache == NULL) {
3522 _ldconfig_cache =
rpmExpand(
"%{?_rpmds_ldconfig_cache}", NULL);
3524 if (!(_ldconfig_cache != NULL && *_ldconfig_cache ==
'/')) {
3526 _ldconfig_cache =
_free(_ldconfig_cache);
3536 if (_rpmds_debug < 0)
3537 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);
3539 fp = popen(_ldconfig_cmd,
"r");
3543 while((f = fgets(buf, (
int)
sizeof(buf), fp)) != NULL) {
3556 while (*fe && !(fe[0] ==
'=' && fe[1] ==
'>'))
3571 if (fe > f && fe[-1] ==
' ') fe[-1] =
'\0';
3583 for (t = f; *t !=
'\0'; t++) {
3601 Flags = (
evrFlags) (Flags | RPMSENSE_PROBE);
3618 #define _RLD_SEARCH_PATH "/lib:/usr/lib"
3620 static const char * _rld_search_path =
NULL;
3628 const char *
N, *
EVR;
3642 if (_rld_search_path == NULL) {
3643 _rld_search_path =
rpmExpand(
"%{?_rpmds_rld_search_path}", NULL);
3645 if (!(_rld_search_path != NULL && *_rld_search_path ==
'/')) {
3647 _rld_search_path =
_free(_rld_search_path);
3649 _rld_search_path =
xstrdup(_RLD_SEARCH_PATH);
3655 rldp = _rld_search_path;
3657 if (_rpmds_debug > 0)
3658 fprintf(stderr,
"*** rpmdsRldpath(%p, %s) P %p R %p C %p O %p\n", PRCO, rldp, PRCO->Pdsp, PRCO->Rdsp, PRCO->Cdsp, PRCO->Odsp);
3678 if ( !(strlen(buf) > 0 && buf[0] ==
'/') )
3683 strcat(buf,
"/*.so.*");
3685 if (_rpmds_debug > 0)
3686 fprintf(stderr,
"*** rpmdsRldpath(%p, %s) globbing %s\n", PRCO, rldp, buf);
3688 xx =
Glob(buf, 0, NULL, &gl);
3692 if (_rpmds_debug > 0)
3693 fprintf(stderr,
"*** rpmdsRldpath(%p, %s) glob matched %d files\n", PRCO, rldp, gl.
gl_pathc);
3706 N = DSOfn + strlen(DSOfn);
3707 while (N > DSOfn && *N !=
'/')
3710 Flags |= RPMSENSE_PROBE;
3727 #define _SOLARIS_CRLE "/usr/sbin/crle"
3729 static const char * _crle_cmd =
NULL;
3731 int rpmdsCrle(
rpmPRCO PRCO,
const char * fn)
3747 if (_crle_cmd == NULL) {
3748 _crle_cmd =
rpmExpand(
"%{?_rpmds_crle_cmd}", NULL);
3749 if (!(_crle_cmd != NULL && *_crle_cmd ==
'/')) {
3751 _crle_cmd =
_free(_crle_cmd);
3753 _crle_cmd =
xstrdup(_SOLARIS_CRLE);
3758 fp = popen(_crle_cmd,
"r");
3767 while((f = fgets(buf,
sizeof(buf), fp)) != NULL) {
3771 g = strstr(f,
"(ELF):");
3776 f = g + (
sizeof(
"(ELF):")-1);
3789 rc = rpmdsRldpath(PRCO, f);
3798 static const char * NS =
"uname";
3799 struct utsname myun;
3812 if (un->sysname != NULL)
3814 if (un->nodename != NULL)
3816 if (un->release != NULL)
3819 if (un->version != NULL)
3822 if (un->machine != NULL)
3824 #if defined(__linux__)
3825 if (un->domainname != NULL &&
strcmp(un->domainname,
"(none)"))
3835 #define _PERL_PROVIDES "/usr/bin/find /usr/lib/perl5 | /usr/lib/rpm/perl.prov"
3844 const char *
N, *
EVR;
3850 const char * fn =
"pipe";
3857 if (_perldeps_cmd == NULL) {
3858 _perldeps_cmd =
rpmExpand(
"%{?_rpmds_perldeps_cmd}", NULL);
3860 if (!(_perldeps_cmd != NULL && *_perldeps_cmd ==
'/')) {
3862 _perldeps_cmd =
_free(_perldeps_cmd);
3874 fp = popen(cmd,
"r");
3880 while((f = fgets(buf, (
int)
sizeof(buf), fp)) != NULL) {
3884 buf[
sizeof(
buf)-1] =
'\0';
3891 if (*f ==
'\0' || *f ==
'#')
3901 if (*f ==
'!') fe++;
3902 while (*fe && !
_isspace(*fe) && strchr(
"!<=>", *fe) == NULL)
3907 if (!(
xisalnum(f[0]) || strchr(
"/_%!", f[0]) != NULL)) {
3909 fprintf(stderr,
_(
"running \"%s\" pipe command\n"), cmd);
3910 fprintf(stderr,
_(
"%s:%d \"%s\" has invalid name. Skipping ...\n"),
3920 if (*f !=
'/' && *fe !=
'\0') {
3926 fprintf(stderr,
_(
"running \"%s\" pipe command\n"), cmd),
3927 fprintf(stderr,
_(
"%s:%d \"%s\" has no comparison operator. Skipping ...\n"),
3938 fprintf(stderr,
_(
"running \"%s\" pipe command\n"), cmd),
3940 fprintf(stderr,
_(
"\tline %d: No EVR comparison value found.\n Skipping ..."),
3942 fprintf(stderr,
_(
"%s:%d \"%s\" has no EVR string. Skipping ...\n"),
3959 Flags = (
evrFlags) (Flags | RPMSENSE_PROBE);
3975 const char * AN = A->ns.N;
3976 const char * AA = A->ns.A;
3977 const char * BN = B->ns.N;
3978 const char * BA = B->ns.A;
3983 }
else if (AA && !BA) {
3984 rc = strncmp(AN, BN, (AA - AN)) || BN[AA - AN];
3987 }
else if (!AA && BA) {
3988 rc = strncmp(AN, BN, (BA - BN)) || AN[BA - BN];
4009 if (evr_tuple_order == NULL) {
4011 evr_tuple_order =
rpmExpand(
"%{?evr_tuple_order}", NULL);
4013 if (evr_tuple_order == NULL || evr_tuple_order[0] ==
'\0') {
4015 evr_tuple_order =
_free(evr_tuple_order);
4016 evr_tuple_order =
xstrdup(
"EVR");
4019 assert(evr_tuple_order != NULL && evr_tuple_order[0] !=
'\0');
4027 const char *aDepend = (A->DNEVR != NULL ?
xstrdup(A->DNEVR+2) :
"");
4028 const char *bDepend = (B->DNEVR != NULL ?
xstrdup(B->DNEVR+2) :
"");
4033 int (*EVRcmp) (
const char *a,
const char *
b);
4036 int set_version = 0;
4043 if (A->ns.Type != B->ns.Type) {
4056 if (!(A->EVR && A->Flags && B->EVR && B->Flags))
4060 if (!(aFlags && bFlags))
4064 if (!(A->EVR[A->i] && *A->EVR[A->i] && B->EVR[B->i] && *B->EVR[B->i]))
4068 xx = (A->EVRparse ? A->EVRparse :
rpmEVRparse) (A->EVR[A->i], a);
4069 xx = (B->EVRparse ? B->EVRparse :
rpmEVRparse) (B->EVR[B->i], b);
4072 EVRcmp = (A->EVRcmp && B->EVRcmp && A->EVRcmp == B->EVRcmp)
4080 default:
continue;
break;
4083 if (a->F[ix] && *a->F[ix] && b->F[ix] && *b->F[ix]) {
4085 if (!
strcmp(a->F[ix],
"set") && !
strcmp(b->F[ix],
"set"))
4091 if (a->F[ix] && *a->F[ix] && atol(a->F[ix]) > 0) {
4092 if (!B->nopromote) {
4093 int lvl = (_rpmds_unspecified_epoch_noise
4095 rpmlog(lvl,
_(
"The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n\tA = \"%s\"\tB = \"%s\"\n"),
4101 if (b->F[ix] && *b->F[ix] && atol(b->F[ix]) > 0)
4104 case 'V': ix = RPMEVR_V;
break;
4105 case 'T': ix = RPMEVR_T;
break;
4106 case 'R': ix = RPMEVR_R;
break;
4107 case 'D': ix = RPMEVR_D;
break;
4109 #if defined(RPM_VENDOR_MANDRIVA)
4112 && *(b->F[ix]) ==
'\0')
4114 if (a->F[ix] && b->F[ix])
4116 if (a->F[ix] && *a->F[ix] && b->F[ix] && *b->F[ix])
4120 if (ix == RPMEVR_V && set_version) {
4122 sense = rpmsetCmp(a->F[ix], b->F[ix]);
4133 sense = -EVRcmp(a->F[ix], b->F[ix]);
4135 sense = EVRcmp(a->F[ix], b->F[ix]);
4141 a->str =
_free(a->str);
4142 b->str =
_free(b->str);
4146 result = (sense != 0);
4149 }
else if (sense > 0 && ((aFlags & RPMSENSE_LESS) || (bFlags & RPMSENSE_GREATER))) {
4151 }
else if (sense == 0 &&
4153 ((aFlags & RPMSENSE_LESS) && (bFlags & RPMSENSE_LESS)) ||
4154 ((aFlags & RPMSENSE_GREATER) && (bFlags & RPMSENSE_GREATER)))) {
4161 if (_noisy_range_comparison_debug_message)
4163 (result ?
_(
"YES") :
_(
"NO ")), aDepend, bDepend);
4164 aDepend =
_free(aDepend);
4165 bDepend =
_free(bDepend);
4182 const fnpyKey * suggestedKeys,
int adding)
4184 const char * Name =
rpmdsN(ds);
4190 if (ps == NULL)
return;
4192 if (Name == NULL) Name =
"?N?";
4193 if (EVR == NULL) EVR =
"?EVR?";
4194 if (DNEVR == NULL) DNEVR =
"? ?N? ?OP? ?EVR?";
4197 pkgNEVR, ds->Type, DNEVR+2);
4199 switch ((
unsigned)DNEVR[0]) {
4205 key = (suggestedKeys ? suggestedKeys[0] :
NULL);
4206 rpmpsAppend(ps, type, pkgNEVR, key, NULL, NULL, DNEVR, adding);
4218 if (req->EVR == NULL || req->Flags == NULL)
4221 switch(req->ns.Type) {
4224 if (!reqFlags || !req->EVR[req->i] || *req->EVR[req->i] ==
'\0')
4233 if (provides == NULL) {
4245 if (provides->EVR == NULL)
4250 if (provides != NULL)
4265 const char * pkgN, * V, * R;
4266 #ifdef RPM_VENDOR_MANDRIVA
4272 const char * pkgEVR;
4282 if (req->EVR == NULL || req->Flags == NULL)
4285 if (!(reqFlags && req->EVR[req->i] && *req->EVR[req->i]))
4293 if (pkgN == NULL) pkgN =
xstrdup(
"N");
4294 if (V == NULL) V =
xstrdup(
"V");
4295 if (R == NULL) R =
xstrdup(
"R");
4301 #if defined(RPM_VENDOR_MANDRIVA)
4308 if (V) nb += strlen(V);
4309 if (R) nb += strlen(R);
4310 #if defined(RPM_VENDOR_MANDRIVA)
4311 if (gotD) nb += strlen(D) + 1;
4313 pkgEVR = t = (
char *)
alloca(nb);
4320 #if defined(RPM_VENDOR_MANDRIVA)
4344 if (ds->ns.str[0] ==
'!')
rpmuint32_t rpmdsSetRefs(const rpmds ds, rpmuint32_t refs)
Set current dependency file refs.
int rpmdsNext(rpmds ds)
Return next dependency set iterator index.
int rpmdsNInclude(const rpmds ds)
Return no.
static const char * suffix[]
static struct _conf_s vars[]
rpmlog(RPMLOG_ERR,"%s\n", buf)
int rpmdsNegateRC(const rpmds ds, int rc)
Negate return code for negated comparisons.
enum nsType_e nsType
Dependency types.
static const char * rpmdsTagName(rpmTag tagN)
Return dependency set type string.
#define RPMELF_FLAG_SKIPREQUIRES
#define RPMSENSE_SENSEMASK
void * mireFreeAll(miRE mire, int nmire)
Destroy compiled patterns.
static void rpmdsFini(void *_ds)
static PyObject *int type
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.
for(i=0;i< st->st_ntags;i++)
static int rpmdsSysinfoFile(rpmPRCO PRCO, const char *fn, rpmTag tagN)
Merge contents of a sysinfo tag file into sysinfo dependencies.
struct rpmPRCO_s * rpmPRCO
Container for commonly extracted dependency set(s).
static int xisalnum(int c)
char * xstrdup(const char *str)
FD_t Fopen(const char *path, const char *_fmode)
fopen(3) clone.
char * rpmGetPath(const char *path,...)
Return (malloc'ed) expanded, canonicalized, file path.
int rpmdsFind(rpmds ds, const rpmds ods)
Find a dependency set element using binary search.
static char *size_t nb
fgets(3) analogue that reads \ continuations.
evrFlags rpmdsFlags(const rpmds ds)
Return current dependency flags.
void * rpmdsSetEVRcmp(rpmds ds, int(*EVRcmp)(const char *a, const char *b))
Set EVR comparison function.
static union _dbswap endian
enum rpmProblemType_e rpmProblemType
Enumerate transaction set problem types.
int rpmdsPipe(rpmds *dsp, rpmTag tagN, const char *cmd)
Load provides from a pipe into a dependency set.
int Stat(const char *path, struct stat *st)
stat(2) clone.
int rpmdsMerge(rpmds *dsp, rpmds ods)
Merge a dependency set maintaining (N,EVR,Flags) sorted order.
void Globfree(void *_pglob)
globfree(3) clone.
int rpmdsSysinfo(rpmPRCO PRCO, const char *fn)
Load sysinfo dependencies into a dependency set.
int rpmdsIx(const rpmds ds)
Return dependency set index.
int rpmdsLdconfig(rpmPRCO PRCO, const char *fn)
Load /etc/ld.so.cache provides into a dependency set.
void * rpmdsExclude(const rpmds ds)
Return dependency exclude patterns.
rpmiob rpmiobFree(rpmiob iob)
Destroy a I/O buffer instance.
rpmPRCO rpmdsNewPRCO(Header h)
Create dependency set(s) container.
struct rpmps_s * rpmps
Transaction problems found while processing a transaction set/.
int rpmdsNVRMatchesDep(const Header h, const rpmds req, int nopromote)
Compare package name-version-release from header with a single dependency.
int rpmdsGetconf(rpmds *dsp, const char *path)
Load getconf provides into a dependency set.
rpmds rpmdsNew(Header h, rpmTag tagN, int flags)
Create and load a dependency set.
const char * evr_tuple_order
char * rpmdsNewDNEVR(const char *dspfx, rpmds ds)
Return new formatted dependency string.
rpmsenseFlags rpmEVRflags(const char *op, const char **end)
Return comparison operator sense flags.
rpmTag tagValue(const char *tagstr)
Return tag value from name.
int rpmEVRparse(const char *evrstr, EVR_t evr)
Split EVR string into epoch, version, and release components.
int rpmiobSlurp(const char *fn, rpmiob *iobp)
rpmuint32_t rpmdsRefs(const rpmds ds)
Return current dependency file refs.
sprintf(t," (%u)",(unsigned) dig->nbytes)
rpmPRCO rpmdsFreePRCO(rpmPRCO PRCO)
Free dependency set(s) container.
static const char * _sysinfo_tags[]
rpmint32_t rpmdsSetResult(const rpmds ds, rpmint32_t result)
Set current dependency comparison result.
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)".
enum evrFlags_e evrFlags
Dependency Attributes.
#define RPMSENSE_NOTEQUAL
memset(_r, 0, sizeof(*_r))
rpmds rpmdsSingle(rpmTag tagN, const char *N, const char *EVR, evrFlags Flags)
Create, load and initialize a dependency set of size 1.
void * xcalloc(size_t nmemb, size_t size)
assert(key->size==sizeof(hdrNum))
static const char * _getconf_path
void rpmdsNotify(rpmds ds, const char *where, int rc)
Notify of results of dependency match.
int(* rpmvercmp)(const char *a, const char *b)
Segmented string compare vector.
int rpmdsSetIx(rpmds ds, int ix)
Set dependency set index.
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 rpmdsSearch(rpmds ds, rpmds ods)
Search a sorted dependency set for an element that overlaps.
fprintf(stderr,"--> %s(%p,%p,%p) sig %p sigp %p\n", __FUNCTION__, dig, t, rsactx, sig, sigp)
int rpmdsCpuinfo(rpmds *dsp, const char *fn)
Load /proc/cpuinfo provides into a dependency set.
rpmds rpmdsFromPRCO(rpmPRCO PRCO, rpmTag tagN)
Retrieve a dependency set from container.
int argvCount(const ARGV_t argv)
Return no.
int rpmdsAnyMatchesDep(const Header h, const rpmds req, int nopromote)
Compare package provides dependencies from header with a single dependency.
rpmTag rpmdsTagN(const rpmds ds)
Return current dependency type.
int rpmdsMatch(const rpmds A, rpmds B)
Compare A against every member of B, looking for 1st match.
time_t rpmdsBT(const rpmds ds)
Return dependency build time.
void * rpmdsSetEVRparse(rpmds ds, int(*EVRparse)(const char *evrstr, EVR_t evr))
ARGV_t argvFree(ARGV_t argv)
Destroy an argv array.
const char * rpmdsNewN(rpmds ds)
Return N string, expanded if necessary.
void * rpmdsInclude(const rpmds ds)
Return dependency include patterns.
int rpmdsNoPromote(const rpmds ds)
Return current "Don't promote Epoch:" flag.
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
Structure(s) used for dependency tag sets.
const char * rpmdsType(const rpmds ds)
Return current dependency type name.
static const char * _perldeps_cmd
The FD_t File Handle data structure.
int rpmdsCount(const rpmds ds)
Return dependency set count.
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.
const char * _sysinfo_path
const char * rpmdsA(const rpmds ds)
Return current dependency arch.
int rpmdsMergePRCO(void *context, rpmds ds)
Merge provides/requires/conflicts/obsoletes dependencies.
char * rpmExpand(const char *arg,...)
Return (malloc'ed) concatenated macro expansion(s).
static struct cpuinfo_s ctags[]
rpmint32_t rpmdsResult(const rpmds ds)
Return current dependency comparison result.
static rpmds rpmdsDup(const rpmds ods)
rpmuint32_t rpmdsSetColor(const rpmds ds, rpmuint32_t color)
Set current dependency color.
int Fclose(FD_t fd)
fclose(3) clone.
struct rpmds_s * rpmds
Dependency tag sets from a header, so that a header can be discarded early.
rpmds rpmdsFree(rpmds ds)
Destroy a dependency set.
static const char *char c
Return text between pl and matching pr characters.
int Ferror(FD_t fd)
ferror(3) clone.
return strcmp(ame->name, bme->name)
const char * _cpuinfo_path
nsType rpmdsNSType(const rpmds ds)
Return dependency class type.
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 * featureDescription
int _rpmds_unspecified_epoch_noise
int rpmdsNExclude(const rpmds ds)
Return no.
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.
char * stpcpy(char *dest, const char *src)
int rpmdsCompare(const rpmds A, const rpmds B)
Compare two versioned dependency ranges, looking for overlap.
rpmds rpmdsInit(rpmds ds)
Initialize dependency set iterator.
int rpmdsRpmlib(rpmds *dsp, void *tblp)
Load rpmlib provides into a dependency set.
rpmuint32_t rpmdsColor(const rpmds ds)
Return current dependency color.
rpmds rpmdsLink(rpmds ds, const char *msg)
Reference a dependency set instance.
const char * rpmdsEVR(const rpmds ds)
Return current dependency epoch-version-release.
const char * rpmdsDNEVR(const rpmds ds)
Return current formatted dependency string.
int rpmdsUname(rpmds *dsp, const struct utsname *un)
static const char * _ldconfig_cmd
static int _noisy_range_comparison_debug_message
Enable noisy range comparison debugging message?
static void
Print copy of spec file, filling in Group/Description/Summary from specspo.
static const char * rpmdsEVRorder(void)
Return precedence permutation string.
char * buf
Parse (and execute) macro undefinition.
int rpmdsELF(const char *fn, int flags, int(*add)(void *context, rpmds ds), void *context)
Return a soname dependency constructed from an elf string.
int
Save source and expand field into target.
const char * rpmdsN(const rpmds ds)
Return current dependency name.
#define RPMELF_FLAG_SKIPPROVIDES
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
int rpmnsParse(const char *s, rpmns ns)
Expand and split NS(N).A string into namespace, name and arch components.
static rpmds rpmdsGetPool(rpmioPool pool)
rpmds rpmdsThis(Header h, rpmTag tagN, evrFlags Flags)
Create, load and initialize a dependency for this header.
int rpmExpandNumeric(const char *arg)
Return macro expansion as a numeric value.
const char * _rpmns_N_at_A
static const char ** rpmdsDupArgv(const char **argv, int argc)
time_t rpmdsSetBT(const rpmds ds, time_t BT)
Set dependency build time.
void rpmdsProblem(rpmps ps, const char *pkgNEVR, const rpmds ds, const fnpyKey *suggestedKeys, int adding)
Report a Requires: or Conflicts: dependency problem.
int rpmdsSetNoPromote(rpmds ds, int nopromote)
Set "Don't promote Epoch:" flag.
static PyObject *rpmds ds