7 #if LIBELF_H_LFS_CONFLICT
11 # undef _LARGEFILE64_SOURCE
12 # undef _LARGEFILE_SOURCE
13 # undef _FILE_OFFSET_BITS
14 # define _FILE_OFFSET_BITS 32
25 #if ENABLE_NLS && !defined(__LCLINT__)
26 # define _(Text) gettext (Text)
33 #if HAVE_LIBELF && !HAVE_GELF_GETVERNAUX
39 static GElf_Verdef *gelf_getverdef(Elf_Data *data,
int offset,
42 return (GElf_Verdef *) ((
char *) data->d_buf + offset);
45 static GElf_Verdaux *gelf_getverdaux(Elf_Data *data,
int offset,
48 return (GElf_Verdaux *) ((
char *) data->d_buf + offset);
51 static GElf_Verneed *gelf_getverneed(Elf_Data *data,
int offset,
54 return (GElf_Verneed *) ((
char *) data->d_buf + offset);
57 static GElf_Vernaux *gelf_getvernaux(Elf_Data *data,
int offset,
60 return (GElf_Vernaux *) ((
char *) data->d_buf + offset);
67 #if !defined(SHT_GNU_verdef) && defined(__sun) && defined(SHT_SUNW_verdef)
68 # define SHT_GNU_verdef SHT_SUNW_verdef
69 # define SHT_GNU_verneed SHT_SUNW_verneed
74 #if !defined(DT_GNU_HASH)
75 #define DT_GNU_HASH 0x6ffffef5
82 #define _RPMDS_INTERNAL
83 #define _RPMEVR_INTERNAL
84 #define _RPMPRCO_INTERNAL
94 #define _isspace(_c) \
95 ((_c) == ' ' || (_c) == '\t' || (_c) == '\r' || (_c) == '\n')
116 if (ds == NULL)
return NULL;
118 if (_rpmds_debug && msg != NULL)
119 fprintf(stderr,
"--> ds %p -- %d %s at %s:%u\n", ds, ds->nrefs, msg, fn, ln);
127 if (ds == NULL)
return NULL;
131 if (_rpmds_debug && msg != NULL)
132 fprintf(stderr,
"--> ds %p ++ %d %s at %s:%u\n", ds, ds->nrefs, msg, fn, ln);
150 if (_rpmds_debug < 0)
151 fprintf(stderr,
"*** ds %p\t%s[%d]\n", ds, ds->Type, ds->Count);
186 ds->N = hfd(ds->N, ds->Nt);
187 ds->EVR = hfd(ds->EVR, ds->EVRt);
189 ds->Flags = (ds->h != NULL ? hfd(ds->Flags, ds->Ft) :
_free(ds->Flags));
195 ds->DNEVR =
_free(ds->DNEVR);
196 ds->ns.str =
_free(ds->ns.str);
197 memset(&ds->ns, 0,
sizeof(ds->ns));
198 ds->A =
_free(ds->A);
199 ds->Color =
_free(ds->Color);
200 ds->Refs =
_free(ds->Refs);
201 ds->Result =
_free(ds->Result);
206 memset(ds, 0,
sizeof(*ds));
225 for (ac = 0; ac < argc; ac++) {
226 assert(argv[ac] != NULL);
227 nb += strlen(argv[ac]) + 1;
229 nb += (ac + 1) *
sizeof(*av);
232 t = (
char *) (av + ac + 1);
233 for (ac = 0; ac < argc; ac++) {
235 t =
stpcpy(t, argv[ac]) + 1;
247 int scareMem = (flags & 0x1);
258 assert(scareMem == 0);
290 Type =
"Filelinktos";
297 if (hge(h, tagN, &Nt, &N, &Count)
298 && N != NULL && Count > 0)
315 xx = hge(h, tagEVR, &ds->EVRt, &ds->EVR, &CountEVR);
317 xx = hge(h, tagF, &ds->Ft, &ds->Flags, &CountF);
319 if (!scareMem && ds->Flags != NULL)
320 ds->Flags = memcpy(
xmalloc(ds->Count *
sizeof(*ds->Flags)),
321 ds->Flags, ds->Count *
sizeof(*ds->Flags));
324 const char * A = NULL;
326 xx = hge(h, tagA, &At, &A, NULL);
327 ds->A = (xx && A != NULL ?
xstrdup(A) : NULL);
333 xx = hge(h, tagBT, &BTt, &BTp, NULL);
343 for (i = 0; i < Count; i++) {
344 (void)
urlPath(N[i], (
const char **)&t);
350 if (len > 1 && t[len-1] ==
'/')
355 if (Count > CountF) Count = CountF;
358 const char ** av =
xcalloc(Count+1,
sizeof(*av));
361 for (i = 0; i < Count; i++) {
362 if (N[i] == NULL || *N[i] ==
'\0')
364 else if (*N[i] ==
'/')
366 else if (ds->EVR && ds->Flags && ds->Flags[i] >= 0 && ds->Flags[i] < CountEVR)
368 av[i] =
rpmGenPath(NULL, ds->EVR[ds->Flags[i]], N[i]);
375 N = ds->N = hfd(ds->N, ds->Nt);
378 ds->EVR = hfd(ds->EVR, ds->EVRt);
380 ds->Flags = (ds->h != NULL ? hfd(ds->Flags, ds->Ft) :
_free(ds->Flags));
385 if (_rpmds_debug < 0)
386 fprintf(stderr,
"*** ds %p\t%s[%d]\n", ds, ds->Type, ds->Count);
395 ds =
rpmdsLink(ds, (ds ? ds->Type : NULL));
406 const char * Name = ds->N[ds->i];
409 memset(ns, 0,
sizeof(*ns));
421 const char * NS = ds->ns.NS;
422 const char * A = ds->ns.A;
427 if (dspfx) nb += strlen(dspfx) + 1;
429 if (ds->ns.str[0] ==
'!') nb++;
430 if (NS) nb += strlen(NS) +
sizeof(
"()") - 1;
431 if (N) nb += strlen(N);
438 if (ds->Flags != NULL
451 ds->ns.Flags = dsFlags;
454 if (ds->EVR != NULL && ds->EVR[ds->i] && *ds->EVR[ds->i]) {
456 nb += strlen(ds->EVR[ds->i]);
466 if (ds->ns.str[0] ==
'!')
482 if (t != tbuf) *t++ =
' ';
492 if (ds->EVR != NULL && ds->EVR[ds->i] && *ds->EVR[ds->i]) {
493 if (t != tbuf) *t++ =
' ';
494 t =
stpcpy(t, ds->EVR[ds->i]);
506 const char * n, * v, * r;
508 const char ** N, ** EVR;
531 Type =
"Filelinktos";
539 t =
xmalloc(
sizeof(*N) + strlen(n) + 1);
541 N = (
const char **) t;
548 (ep ? 20 : 0) + strlen(v) + strlen(r) +
sizeof(
"-"));
549 EVR = (
const char **) t;
554 sprintf(t,
"%d:", *ep);
569 ds->Flags =
xmalloc(
sizeof(*ds->Flags)); ds->Flags[0] = Flags;
573 const char * A = NULL;
575 xx = hge(h, tagA, &At, &A, NULL);
576 ds->A = (xx && A != NULL ?
xstrdup(A) : NULL);
582 xx = hge(h, tagBT, &BTt, &BTp, NULL);
587 pre[0] = ds->Type[0];
596 return rpmdsLink(ds, (ds ? ds->Type : NULL));
623 Type =
"Filelinktos";
631 { time_t now = time(NULL);
637 ds->N =
xmalloc(
sizeof(*ds->N)); ds->N[0] = N;
639 ds->EVR =
xmalloc(
sizeof(*ds->EVR)); ds->EVR[0] = EVR;
642 ds->Flags =
xmalloc(
sizeof(*ds->Flags)); ds->Flags[0] = Flags;
653 return rpmdsLink(ds, (ds ? ds->Type : NULL));
658 return (ds != NULL ? ds->Count : 0);
663 return (ds != NULL ? ds->i : -1);
679 const char * DNEVR = NULL;
681 if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) {
683 if (ds->DNEVR != NULL)
692 const char * N = NULL;
694 if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) {
696 N = (ds->ns.N ? ds->ns.N :
rpmdsNewN(ds));
704 const char * EVR = NULL;
706 if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) {
709 EVR = ds->EVR[ds->i];
719 if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) {
721 if (ds->Flags != NULL)
722 Flags = ds->Flags[ds->i];
739 const char * A = NULL;
749 if (ds != NULL && ds->BT > 0)
768 NSType = ds->ns.Type;
777 nopromote = ds->nopromote;
786 onopromote = ds->nopromote;
787 ds->nopromote = nopromote;
793 int (*EVRparse)(
const char *evrstr,
EVR_t evr))
795 void * oEVRparse = NULL;
798 oEVRparse = ds->EVRparse;
799 ds->EVRparse = EVRparse;
806 void * oEVRcmp = NULL;
809 oEVRcmp = ds->EVRcmp;
819 if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) {
821 if (ds->Color != NULL)
822 Color = ds->Color[ds->i];
835 if (ds->Color == NULL && ds->Count > 0)
836 ds->Color =
xcalloc(ds->Count,
sizeof(*ds->Color));
838 if (ds->i >= 0 && ds->i < ds->Count) {
840 if (ds->Color != NULL) {
841 ocolor = ds->Color[ds->i];
842 ds->Color[ds->i] = color;
853 if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) {
855 if (ds->Refs != NULL)
856 Refs = ds->Refs[ds->i];
869 if (ds->Refs == NULL && ds->Count > 0)
870 ds->Refs =
xcalloc(ds->Count,
sizeof(*ds->Refs));
872 if (ds->i >= 0 && ds->i < ds->Count) {
874 if (ds->Refs != NULL) {
875 orefs = ds->Refs[ds->i];
876 ds->Refs[ds->i] = refs;
887 if (ds != NULL && ds->i >= 0 && ds->i < ds->Count) {
889 if (ds->Result != NULL)
890 result = ds->Result[ds->i];
903 if (ds->Result == NULL && ds->Count > 0)
904 ds->Result =
xcalloc(ds->Count,
sizeof(*ds->Result));
906 if (ds->i >= 0 && ds->i < ds->Count) {
908 if (ds->Result != NULL) {
909 oresult = ds->Result[ds->i];
910 ds->Result[ds->i] = result;
919 if (!(ds != NULL && ds->i >= 0 && ds->i < ds->Count))
921 if (!(ds->Type != NULL && ds->DNEVR != NULL))
925 (!strcmp(ds->DNEVR,
"cached") ? ds->DNEVR : ds->DNEVR+2),
926 (rc ?
_(
"NO ") :
_(
"YES")),
927 (where != NULL ? where :
""));
935 if (ds != NULL && ++ds->i >= 0) {
936 if (ds->i < ds->Count) {
939 ds->DNEVR =
_free(ds->DNEVR);
940 ds->ns.str =
_free(ds->ns.str);
941 memset(&ds->ns, 0,
sizeof(ds->ns));
942 t[0] = ((ds->Type != NULL) ? ds->Type[0] :
'\0');
952 if (_rpmds_debug < 0 && i != -1)
953 fprintf(stderr,
"*** ds %p\t%s[%d]: %s\n", ds, (ds->Type ? ds->Type :
"?Type?"), i, (ds->DNEVR ? ds->DNEVR :
"?DNEVR?"));
978 ds->h = (ods->h != NULL ?
headerLink(ods->h) : NULL);
980 ds->Type = ods->Type;
982 ds->tagN = ods->tagN;
983 ds->Count = ods->Count;
988 nb = (ds->Count+1) *
sizeof(*ds->N);
989 ds->N = (ds->h != NULL
990 ? memcpy(
xmalloc(nb), ods->N, nb)
995 assert(ods->EVR != NULL);
996 assert(ods->Flags != NULL);
998 nb = (ds->Count+1) *
sizeof(*ds->EVR);
999 ds->EVR = (ds->h != NULL
1000 ? memcpy(
xmalloc(nb), ods->EVR, nb)
1002 ds->EVRt = ods->EVRt;
1004 nb = (ds->Count *
sizeof(*ds->Flags));
1005 ds->Flags = (ds->h != NULL
1007 : memcpy(
xmalloc(nb), ods->Flags, nb) );
1009 ds->nopromote = ods->nopromote;
1011 ds->EVRcmp = ods->EVRcmp;;
1015 return rpmdsLink(ds, (ds ? ds->Type : NULL));
1024 if (ds == NULL || ods == NULL)
1029 while (ds->l < ds->u) {
1030 ds->i = (ds->l + ds->u) / 2;
1032 comparison = strcmp(ods->N[ods->i], ds->N[ds->i]);
1036 if (comparison == 0 && ods->EVR && ds->EVR)
1037 comparison = strcmp(ods->EVR[ods->i], ds->EVR[ds->i]);
1038 if (comparison == 0 && ods->Flags && ds->Flags)
1039 comparison = (ods->Flags[ods->i] - ds->Flags[ds->i]);
1044 else if (comparison > 0)
1061 if (dsp == NULL || ods == NULL)
1093 for (j = ds->Count; j > ds->u; j--)
1094 ds->N[j] = ds->N[j-1];
1095 ds->N[ds->u] = ods->N[ods->i];
1097 ds->N =
_free(ds->N);
1102 assert(ods->EVR != NULL);
1103 assert(ods->Flags != NULL);
1105 for (j = ds->Count; j > ds->u; j--)
1106 ds->EVR[j] = ds->EVR[j-1];
1107 ds->EVR[ds->u] = ods->EVR[ods->i];
1109 ds->EVR =
_free(ds->EVR);
1112 Flags =
xmalloc((ds->Count+1) *
sizeof(*Flags));
1114 memcpy(Flags, ds->Flags, ds->u *
sizeof(*Flags));
1115 if (ds->u < ds->Count)
1116 memcpy(Flags + ds->u + 1, ds->Flags + ds->u, (ds->Count - ds->u) *
sizeof(*Flags));
1117 Flags[ds->u] = ods->Flags[ods->i];
1118 ds->Flags =
_free(ds->Flags);
1137 if (ds == NULL || ods == NULL)
1147 comparison = strcmp(ods->N[ods->i], ds->N[i]);
1151 else if (comparison > 0)
1155 if (strcmp(ods->N[ods->i], ds->N[l]))
1157 while (l > 0 && !strcmp(ods->N[ods->i], ds->N[l-1]))
1160 if (u >= ds->Count || strcmp(ods->N[ods->i], ds->N[u]))
1162 while (++u < ds->Count) {
1163 if (strcmp(ods->N[ods->i], ds->N[u]))
1174 while ((l =
rpmdsNext(ds)) >= 0 && (l < u)) {
1186 if (ods->Result != NULL)
1201 {
"processor", 0, 0 },
1202 {
"vendor_id", 0, 0 },
1203 {
"cpu_family", 0, 1 },
1205 {
"model_name", 0, 0 },
1206 {
"stepping", 0, 1 },
1207 {
"cpu_MHz", 0, 1 },
1208 {
"cache_size", 0, 1 },
1209 {
"physical_id", 0, 0 },
1210 {
"siblings", 0, 0 },
1211 {
"core_id", 0, 0 },
1212 {
"cpu_cores", 0, 0 },
1213 {
"fdiv_bug", 0, 3 },
1214 {
"hlt_bug", 0, 3 },
1215 {
"f00f_bug", 0, 3 },
1216 {
"coma_bug", 0, 3 },
1218 {
"fpu_exception", 0, 3 },
1219 {
"cpuid_level", 0, 0 },
1222 {
"bogomips", 0, 1 },
1238 for (ct = ctags; ct->
name != NULL; ct++) {
1239 if (strcmp(ct->
name, name))
1259 const char *N,
const char *EVR,
int_32 Flags)
1266 t =
alloca(strlen(NS)+
sizeof(
"()")+strlen(N));
1275 #define _PROC_CPUINFO "/proc/cpuinfo"
1286 const char * NS =
"cpuinfo";
1296 if (_cpuinfo_path == NULL) {
1297 _cpuinfo_path =
rpmExpand(
"%{?_rpmds_cpuinfo_path}", NULL);
1299 if (!(_cpuinfo_path != NULL && *_cpuinfo_path ==
'/')) {
1301 _cpuinfo_path =
_free(_cpuinfo_path);
1314 for (ct = ctags; ct->
name != NULL; ct++)
1317 fd =
Fopen(fn,
"r.fpio");
1318 if (fd == NULL ||
Ferror(fd))
1323 while((f = fgets(buf,
sizeof(buf), fp)) != NULL) {
1335 while (*fe && *fe !=
':')
1354 for (t = f; *t !=
'\0'; t++) {
1366 for (t = g; *t !=
'\0'; t++) {
1367 if (
_isspace(*t) || *t ==
'(' || *t ==
')')
1373 for (t = g; *t !=
'\0'; t++) {
1374 if (
_isspace(*t) || *t ==
'(' || *t ==
')')
1380 if (!strcmp(g,
"yes"))
1384 {
char ** av = NULL;
1386 rc = poptParseArgvString(g, NULL, (
const char ***)&av);
1387 if (!rc && av != NULL)
1388 while ((t = av[i++]) != NULL)
1399 if (fd != NULL) (void)
Fclose(fd);
1416 {
"rpmlib(VersionedDependencies)",
"3.0.3-1",
1418 N_(
"PreReq:, Provides:, and Obsoletes: dependencies support versions.") },
1419 {
"rpmlib(CompressedFileNames)",
"3.0.4-1",
1421 N_(
"file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.")},
1422 {
"rpmlib(PayloadIsBzip2)",
"3.0.5-1",
1424 N_(
"package payload can be compressed using bzip2.") },
1425 {
"rpmlib(PayloadFilesHavePrefix)",
"4.0-1",
1427 N_(
"package payload file(s) have \"./\" prefix.") },
1428 {
"rpmlib(ExplicitPackageProvide)",
"4.0-1",
1430 N_(
"package name-version-release is not implicitly provided.") },
1431 {
"rpmlib(HeaderLoadSortsTags)",
"4.0.1-1",
1433 N_(
"header tags are always sorted after being loaded.") },
1434 {
"rpmlib(ScriptletInterpreterArgs)",
"4.0.3-1",
1436 N_(
"the scriptlet interpreter can use arguments from header.") },
1437 {
"rpmlib(PartialHardlinkSets)",
"4.0.4-1",
1439 N_(
"a hardlink file set may be installed without being complete.") },
1440 {
"rpmlib(ConcurrentAccess)",
"4.1-1",
1442 N_(
"package scriptlets may access the rpm database while installing.") },
1443 #if defined(WITH_LUA)
1444 {
"rpmlib(BuiltinLuaScripts)",
"4.2.2-1",
1446 N_(
"internal support for lua scripts.") },
1448 {
"rpmlib(HeaderTagTypeInt64)",
"4.4.3-1",
1450 N_(
"header tags can be type int_64.") },
1451 {
"rpmlib(PayloadIsUstar)",
"4.4.4-1",
1453 N_(
"package payload can be in ustar tar archive format.") },
1454 {
"rpmlib(PayloadIsLzma)",
"4.4.6-1",
1456 N_(
"package payload can be compressed using lzma.") },
1457 {
"rpmlib(FileDigestParameterized)",
"4.4.6-1",
1459 N_(
"file digests can be other than MD5.") },
1460 { NULL, NULL, 0, NULL }
1478 for (rlp = rltblp; rlp->
featureName != NULL; rlp++) {
1499 const char *N, *EVR;
1515 fd =
Fopen(fn,
"r.fpio");
1516 if (fd == NULL ||
Ferror(fd))
1522 while((f = fgets(buf,
sizeof(buf), fp)) != NULL) {
1526 buf[
sizeof(buf)-1] =
'\0';
1533 if (f[0] ==
'-' &&
_isspace(f[1])) {
1534 f +=
sizeof(
"- ")-1;
1540 if (*f ==
'\0' || *f ==
'#')
1548 if (!(
xisalnum(f[0]) || strchr(
"/_%!", f[0]) != NULL)) {
1549 fprintf(stderr,
_(
"%s:%d \"%s\" has invalid name. Skipping ...\n"),
1556 if (*f ==
'!') fe++;
1557 while (*fe && !
_isspace(*fe) && strchr(
"!<=>", *fe) == NULL)
1568 if (*f !=
'/' && *fe !=
'\0') {
1573 fprintf(stderr,
_(
"%s:%d \"%s\" has no comparison operator. Skipping ...\n"),
1584 fprintf(stderr,
_(
"%s:%d \"%s\" has no EVR string. Skipping ...\n"),
1601 Flags |= RPMSENSE_PROBE;
1613 if (fd != NULL) (void)
Fclose(fd);
1618 #define _ETC_RPM_SYSINFO "/etc/rpm/sysinfo"
1637 struct stat * st = memset(
alloca(
sizeof(*st)), 0,
sizeof(*st));
1642 if (_sysinfo_path == NULL) {
1643 _sysinfo_path =
rpmExpand(
"%{?_rpmds_sysinfo_path}", NULL);
1645 if (!(_sysinfo_path != NULL && *_sysinfo_path ==
'/')) {
1647 _sysinfo_path =
_free(_sysinfo_path);
1666 if (S_ISDIR(st->st_mode)) {
1667 const char *dn = fn;
1672 for (av = _sysinfo_tags; av && *av; av++) {
1677 st = memset(st, 0,
sizeof(*st));
1679 if (xx == 0 && S_ISREG(st->st_mode))
1688 if (S_ISREG(st->st_mode))
1705 {
"LINK_MAX", _PC_LINK_MAX,
PATHCONF },
1708 {
"_POSIX_LINK_MAX", _PC_LINK_MAX,
PATHCONF },
1710 #ifdef _PC_MAX_CANON
1711 {
"MAX_CANON", _PC_MAX_CANON,
PATHCONF },
1713 #ifdef _PC_MAX_CANON
1714 {
"_POSIX_MAX_CANON", _PC_MAX_CANON,
PATHCONF },
1716 #ifdef _PC_MAX_INPUT
1717 {
"MAX_INPUT", _PC_MAX_INPUT,
PATHCONF },
1719 #ifdef _PC_MAX_INPUT
1720 {
"_POSIX_MAX_INPUT", _PC_MAX_INPUT,
PATHCONF },
1723 {
"NAME_MAX", _PC_NAME_MAX,
PATHCONF },
1726 {
"_POSIX_NAME_MAX", _PC_NAME_MAX,
PATHCONF },
1729 {
"PATH_MAX", _PC_PATH_MAX,
PATHCONF },
1732 {
"_POSIX_PATH_MAX", _PC_PATH_MAX,
PATHCONF },
1735 {
"PIPE_BUF", _PC_PIPE_BUF,
PATHCONF },
1738 {
"_POSIX_PIPE_BUF", _PC_PIPE_BUF,
PATHCONF },
1740 #ifdef _PC_SOCK_MAXBUF
1741 {
"SOCK_MAXBUF", _PC_SOCK_MAXBUF,
PATHCONF },
1744 {
"_POSIX_ASYNC_IO", _PC_ASYNC_IO,
PATHCONF },
1746 #ifdef _PC_CHOWN_RESTRICTED
1747 {
"_POSIX_CHOWN_RESTRICTED", _PC_CHOWN_RESTRICTED,
PATHCONF },
1750 {
"_POSIX_NO_TRUNC", _PC_NO_TRUNC,
PATHCONF },
1753 {
"_POSIX_PRIO_IO", _PC_PRIO_IO,
PATHCONF },
1756 {
"_POSIX_SYNC_IO", _PC_SYNC_IO,
PATHCONF },
1759 {
"_POSIX_VDISABLE", _PC_VDISABLE,
PATHCONF },
1763 {
"ARG_MAX", _SC_ARG_MAX,
SYSCONF },
1765 #ifdef _SC_ATEXIT_MAX
1766 {
"ATEXIT_MAX", _SC_ATEXIT_MAX,
SYSCONF },
1769 {
"CHAR_BIT", _SC_CHAR_BIT,
SYSCONF },
1772 {
"CHAR_MAX", _SC_CHAR_MAX,
SYSCONF },
1775 {
"CHAR_MIN", _SC_CHAR_MIN,
SYSCONF },
1777 #ifdef _SC_CHILD_MAX
1778 {
"CHILD_MAX", _SC_CHILD_MAX,
SYSCONF },
1781 {
"CLK_TCK", _SC_CLK_TCK,
SYSCONF },
1784 {
"INT_MAX", _SC_INT_MAX,
SYSCONF },
1787 {
"INT_MIN", _SC_INT_MIN,
SYSCONF },
1789 #ifdef _SC_UIO_MAXIOV
1790 {
"IOV_MAX", _SC_UIO_MAXIOV,
SYSCONF },
1792 #ifdef _SC_LOGIN_NAME_MAX
1793 {
"LOGNAME_MAX", _SC_LOGIN_NAME_MAX,
SYSCONF },
1796 {
"LONG_BIT", _SC_LONG_BIT,
SYSCONF },
1798 #ifdef _SC_MB_LEN_MAX
1799 {
"MB_LEN_MAX", _SC_MB_LEN_MAX,
SYSCONF },
1801 #ifdef _SC_NGROUPS_MAX
1802 {
"NGROUPS_MAX", _SC_NGROUPS_MAX,
SYSCONF },
1804 #ifdef _SC_NL_ARGMAX
1805 {
"NL_ARGMAX", _SC_NL_ARGMAX,
SYSCONF },
1807 #ifdef _SC_NL_LANGMAX
1808 {
"NL_LANGMAX", _SC_NL_LANGMAX,
SYSCONF },
1810 #ifdef _SC_NL_MSGMAX
1811 {
"NL_MSGMAX", _SC_NL_MSGMAX,
SYSCONF },
1814 {
"NL_NMAX", _SC_NL_NMAX,
SYSCONF },
1816 #ifdef _SC_NL_SETMAX
1817 {
"NL_SETMAX", _SC_NL_SETMAX,
SYSCONF },
1819 #ifdef _SC_NL_TEXTMAX
1820 {
"NL_TEXTMAX", _SC_NL_TEXTMAX,
SYSCONF },
1822 #ifdef _SC_GETGR_R_SIZE_MAX
1823 {
"NSS_BUFLEN_GROUP", _SC_GETGR_R_SIZE_MAX,
SYSCONF },
1825 #ifdef _SC_GETPW_R_SIZE_MAX
1826 {
"NSS_BUFLEN_PASSWD", _SC_GETPW_R_SIZE_MAX,
SYSCONF },
1829 {
"NZERO", _SC_NZERO,
SYSCONF },
1832 {
"OPEN_MAX", _SC_OPEN_MAX,
SYSCONF },
1835 {
"PAGESIZE", _SC_PAGESIZE,
SYSCONF },
1838 {
"PAGE_SIZE", _SC_PAGESIZE,
SYSCONF },
1841 {
"PASS_MAX", _SC_PASS_MAX,
SYSCONF },
1843 #ifdef _SC_THREAD_DESTRUCTOR_ITERATIONS
1844 {
"PTHREAD_DESTRUCTOR_ITERATIONS", _SC_THREAD_DESTRUCTOR_ITERATIONS,
SYSCONF },
1846 #ifdef _SC_THREAD_KEYS_MAX
1847 {
"PTHREAD_KEYS_MAX", _SC_THREAD_KEYS_MAX,
SYSCONF },
1849 #ifdef _SC_THREAD_STACK_MIN
1850 {
"PTHREAD_STACK_MIN", _SC_THREAD_STACK_MIN,
SYSCONF },
1852 #ifdef _SC_THREAD_THREADS_MAX
1853 {
"PTHREAD_THREADS_MAX", _SC_THREAD_THREADS_MAX,
SYSCONF },
1855 #ifdef _SC_SCHAR_MAX
1856 {
"SCHAR_MAX", _SC_SCHAR_MAX,
SYSCONF },
1858 #ifdef _SC_SCHAR_MIN
1859 {
"SCHAR_MIN", _SC_SCHAR_MIN,
SYSCONF },
1862 {
"SHRT_MAX", _SC_SHRT_MAX,
SYSCONF },
1865 {
"SHRT_MIN", _SC_SHRT_MIN,
SYSCONF },
1867 #ifdef _SC_SSIZE_MAX
1868 {
"SSIZE_MAX", _SC_SSIZE_MAX,
SYSCONF },
1870 #ifdef _SC_TTY_NAME_MAX
1871 {
"TTY_NAME_MAX", _SC_TTY_NAME_MAX,
SYSCONF },
1873 #ifdef _SC_TZNAME_MAX
1874 {
"TZNAME_MAX", _SC_TZNAME_MAX,
SYSCONF },
1876 #ifdef _SC_UCHAR_MAX
1877 {
"UCHAR_MAX", _SC_UCHAR_MAX,
SYSCONF },
1880 {
"UINT_MAX", _SC_UINT_MAX,
SYSCONF },
1882 #ifdef _SC_UIO_MAXIOV
1883 {
"UIO_MAXIOV", _SC_UIO_MAXIOV,
SYSCONF },
1885 #ifdef _SC_ULONG_MAX
1886 {
"ULONG_MAX", _SC_ULONG_MAX,
SYSCONF },
1888 #ifdef _SC_USHRT_MAX
1889 {
"USHRT_MAX", _SC_USHRT_MAX,
SYSCONF },
1892 {
"WORD_BIT", _SC_WORD_BIT,
SYSCONF },
1894 #ifdef _SC_AVPHYS_PAGES
1895 {
"_AVPHYS_PAGES", _SC_AVPHYS_PAGES,
SYSCONF },
1897 #ifdef _SC_NPROCESSORS_CONF
1898 {
"_NPROCESSORS_CONF", _SC_NPROCESSORS_CONF,
SYSCONF },
1900 #ifdef _SC_NPROCESSORS_ONLN
1901 {
"_NPROCESSORS_ONLN", _SC_NPROCESSORS_ONLN,
SYSCONF },
1903 #ifdef _SC_PHYS_PAGES
1904 {
"_PHYS_PAGES", _SC_PHYS_PAGES,
SYSCONF },
1907 {
"_POSIX_ARG_MAX", _SC_ARG_MAX,
SYSCONF },
1909 #ifdef _SC_ASYNCHRONOUS_IO
1910 {
"_POSIX_ASYNCHRONOUS_IO", _SC_ASYNCHRONOUS_IO,
SYSCONF },
1912 #ifdef _SC_CHILD_MAX
1913 {
"_POSIX_CHILD_MAX", _SC_CHILD_MAX,
SYSCONF },
1916 {
"_POSIX_FSYNC", _SC_FSYNC,
SYSCONF },
1918 #ifdef _SC_JOB_CONTROL
1919 {
"_POSIX_JOB_CONTROL", _SC_JOB_CONTROL,
SYSCONF },
1921 #ifdef _SC_MAPPED_FILES
1922 {
"_POSIX_MAPPED_FILES", _SC_MAPPED_FILES,
SYSCONF },
1925 {
"_POSIX_MEMLOCK", _SC_MEMLOCK,
SYSCONF },
1927 #ifdef _SC_MEMLOCK_RANGE
1928 {
"_POSIX_MEMLOCK_RANGE", _SC_MEMLOCK_RANGE,
SYSCONF },
1930 #ifdef _SC_MEMORY_PROTECTION
1931 {
"_POSIX_MEMORY_PROTECTION", _SC_MEMORY_PROTECTION,
SYSCONF },
1933 #ifdef _SC_MESSAGE_PASSING
1934 {
"_POSIX_MESSAGE_PASSING", _SC_MESSAGE_PASSING,
SYSCONF },
1936 #ifdef _SC_NGROUPS_MAX
1937 {
"_POSIX_NGROUPS_MAX", _SC_NGROUPS_MAX,
SYSCONF },
1940 {
"_POSIX_OPEN_MAX", _SC_OPEN_MAX,
SYSCONF },
1943 {
"_POSIX_PII", _SC_PII,
SYSCONF },
1945 #ifdef _SC_PII_INTERNET
1946 {
"_POSIX_PII_INTERNET", _SC_PII_INTERNET,
SYSCONF },
1948 #ifdef _SC_PII_INTERNET_DGRAM
1949 {
"_POSIX_PII_INTERNET_DGRAM", _SC_PII_INTERNET_DGRAM,
SYSCONF },
1951 #ifdef _SC_PII_INTERNET_STREAM
1952 {
"_POSIX_PII_INTERNET_STREAM", _SC_PII_INTERNET_STREAM,
SYSCONF },
1955 {
"_POSIX_PII_OSI", _SC_PII_OSI,
SYSCONF },
1957 #ifdef _SC_PII_OSI_CLTS
1958 {
"_POSIX_PII_OSI_CLTS", _SC_PII_OSI_CLTS,
SYSCONF },
1960 #ifdef _SC_PII_OSI_COTS
1961 {
"_POSIX_PII_OSI_COTS", _SC_PII_OSI_COTS,
SYSCONF },
1963 #ifdef _SC_PII_OSI_M
1964 {
"_POSIX_PII_OSI_M", _SC_PII_OSI_M,
SYSCONF },
1966 #ifdef _SC_PII_SOCKET
1967 {
"_POSIX_PII_SOCKET", _SC_PII_SOCKET,
SYSCONF },
1970 {
"_POSIX_PII_XTI", _SC_PII_XTI,
SYSCONF },
1973 {
"_POSIX_POLL", _SC_POLL,
SYSCONF },
1975 #ifdef _SC_PRIORITIZED_IO
1976 {
"_POSIX_PRIORITIZED_IO", _SC_PRIORITIZED_IO,
SYSCONF },
1978 #ifdef _SC_PRIORITY_SCHEDULING
1979 {
"_POSIX_PRIORITY_SCHEDULING", _SC_PRIORITY_SCHEDULING,
SYSCONF },
1981 #ifdef _SC_REALTIME_SIGNALS
1982 {
"_POSIX_REALTIME_SIGNALS", _SC_REALTIME_SIGNALS,
SYSCONF },
1984 #ifdef _SC_SAVED_IDS
1985 {
"_POSIX_SAVED_IDS", _SC_SAVED_IDS,
SYSCONF },
1988 {
"_POSIX_SELECT", _SC_SELECT,
SYSCONF },
1990 #ifdef _SC_SEMAPHORES
1991 {
"_POSIX_SEMAPHORES", _SC_SEMAPHORES,
SYSCONF },
1993 #ifdef _SC_SHARED_MEMORY_OBJECTS
1994 {
"_POSIX_SHARED_MEMORY_OBJECTS", _SC_SHARED_MEMORY_OBJECTS,
SYSCONF },
1996 #ifdef _SC_SSIZE_MAX
1997 {
"_POSIX_SSIZE_MAX", _SC_SSIZE_MAX,
SYSCONF },
1999 #ifdef _SC_STREAM_MAX
2000 {
"_POSIX_STREAM_MAX", _SC_STREAM_MAX,
SYSCONF },
2002 #ifdef _SC_SYNCHRONIZED_IO
2003 {
"_POSIX_SYNCHRONIZED_IO", _SC_SYNCHRONIZED_IO,
SYSCONF },
2006 {
"_POSIX_THREADS", _SC_THREADS,
SYSCONF },
2008 #ifdef _SC_THREAD_ATTR_STACKADDR
2009 {
"_POSIX_THREAD_ATTR_STACKADDR", _SC_THREAD_ATTR_STACKADDR,
SYSCONF },
2011 #ifdef _SC_THREAD_ATTR_STACKSIZE
2012 {
"_POSIX_THREAD_ATTR_STACKSIZE", _SC_THREAD_ATTR_STACKSIZE,
SYSCONF },
2014 #ifdef _SC_THREAD_PRIORITY_SCHEDULING
2015 {
"_POSIX_THREAD_PRIORITY_SCHEDULING", _SC_THREAD_PRIORITY_SCHEDULING,
SYSCONF },
2017 #ifdef _SC_THREAD_PRIO_INHERIT
2018 {
"_POSIX_THREAD_PRIO_INHERIT", _SC_THREAD_PRIO_INHERIT,
SYSCONF },
2020 #ifdef _SC_THREAD_PRIO_PROTECT
2021 {
"_POSIX_THREAD_PRIO_PROTECT", _SC_THREAD_PRIO_PROTECT,
SYSCONF },
2023 #ifdef _SC_THREAD_PROCESS_SHARED
2024 {
"_POSIX_THREAD_PROCESS_SHARED", _SC_THREAD_PROCESS_SHARED,
SYSCONF },
2026 #ifdef _SC_THREAD_SAFE_FUNCTIONS
2027 {
"_POSIX_THREAD_SAFE_FUNCTIONS", _SC_THREAD_SAFE_FUNCTIONS,
SYSCONF },
2030 {
"_POSIX_TIMERS", _SC_TIMERS,
SYSCONF },
2032 #ifdef _SC_TIMER_MAX
2033 {
"TIMER_MAX", _SC_TIMER_MAX,
SYSCONF },
2035 #ifdef _SC_TZNAME_MAX
2036 {
"_POSIX_TZNAME_MAX", _SC_TZNAME_MAX,
SYSCONF },
2039 {
"_POSIX_VERSION", _SC_VERSION,
SYSCONF },
2041 #ifdef _SC_T_IOV_MAX
2042 {
"_T_IOV_MAX", _SC_T_IOV_MAX,
SYSCONF },
2044 #ifdef _SC_XOPEN_CRYPT
2045 {
"_XOPEN_CRYPT", _SC_XOPEN_CRYPT,
SYSCONF },
2047 #ifdef _SC_XOPEN_ENH_I18N
2048 {
"_XOPEN_ENH_I18N", _SC_XOPEN_ENH_I18N,
SYSCONF },
2050 #ifdef _SC_XOPEN_LEGACY
2051 {
"_XOPEN_LEGACY", _SC_XOPEN_LEGACY,
SYSCONF },
2053 #ifdef _SC_XOPEN_REALTIME
2054 {
"_XOPEN_REALTIME", _SC_XOPEN_REALTIME,
SYSCONF },
2056 #ifdef _SC_XOPEN_REALTIME_THREADS
2057 {
"_XOPEN_REALTIME_THREADS", _SC_XOPEN_REALTIME_THREADS,
SYSCONF },
2059 #ifdef _SC_XOPEN_SHM
2060 {
"_XOPEN_SHM", _SC_XOPEN_SHM,
SYSCONF },
2062 #ifdef _SC_XOPEN_UNIX
2063 {
"_XOPEN_UNIX", _SC_XOPEN_UNIX,
SYSCONF },
2065 #ifdef _SC_XOPEN_VERSION
2066 {
"_XOPEN_VERSION", _SC_XOPEN_VERSION,
SYSCONF },
2068 #ifdef _SC_XOPEN_XCU_VERSION
2069 {
"_XOPEN_XCU_VERSION", _SC_XOPEN_XCU_VERSION,
SYSCONF },
2071 #ifdef _SC_XOPEN_XPG2
2072 {
"_XOPEN_XPG2", _SC_XOPEN_XPG2,
SYSCONF },
2074 #ifdef _SC_XOPEN_XPG3
2075 {
"_XOPEN_XPG3", _SC_XOPEN_XPG3,
SYSCONF },
2077 #ifdef _SC_XOPEN_XPG4
2078 {
"_XOPEN_XPG4", _SC_XOPEN_XPG4,
SYSCONF },
2081 #ifdef _SC_BC_BASE_MAX
2082 {
"BC_BASE_MAX", _SC_BC_BASE_MAX,
SYSCONF },
2084 #ifdef _SC_BC_DIM_MAX
2085 {
"BC_DIM_MAX", _SC_BC_DIM_MAX,
SYSCONF },
2087 #ifdef _SC_BC_SCALE_MAX
2088 {
"BC_SCALE_MAX", _SC_BC_SCALE_MAX,
SYSCONF },
2090 #ifdef _SC_BC_STRING_MAX
2091 {
"BC_STRING_MAX", _SC_BC_STRING_MAX,
SYSCONF },
2093 #ifdef _SC_CHARCLASS_NAME_MAX
2094 {
"CHARCLASS_NAME_MAX", _SC_CHARCLASS_NAME_MAX,
SYSCONF },
2096 #ifdef _SC_COLL_WEIGHTS_MAX
2097 {
"COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX,
SYSCONF },
2099 #ifdef _SC_EQUIV_CLASS_MAX
2100 {
"EQUIV_CLASS_MAX", _SC_EQUIV_CLASS_MAX,
SYSCONF },
2102 #ifdef _SC_EXPR_NEST_MAX
2103 {
"EXPR_NEST_MAX", _SC_EXPR_NEST_MAX,
SYSCONF },
2106 {
"LINE_MAX", _SC_LINE_MAX,
SYSCONF },
2108 #ifdef _SC_BC_BASE_MAX
2109 {
"POSIX2_BC_BASE_MAX", _SC_BC_BASE_MAX,
SYSCONF },
2111 #ifdef _SC_BC_DIM_MAX
2112 {
"POSIX2_BC_DIM_MAX", _SC_BC_DIM_MAX,
SYSCONF },
2114 #ifdef _SC_BC_SCALE_MAX
2115 {
"POSIX2_BC_SCALE_MAX", _SC_BC_SCALE_MAX,
SYSCONF },
2117 #ifdef _SC_BC_STRING_MAX
2118 {
"POSIX2_BC_STRING_MAX", _SC_BC_STRING_MAX,
SYSCONF },
2120 #ifdef _SC_2_CHAR_TERM
2121 {
"POSIX2_CHAR_TERM", _SC_2_CHAR_TERM,
SYSCONF },
2123 #ifdef _SC_COLL_WEIGHTS_MAX
2124 {
"POSIX2_COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX,
SYSCONF },
2127 {
"POSIX2_C_BIND", _SC_2_C_BIND,
SYSCONF },
2130 {
"POSIX2_C_DEV", _SC_2_C_DEV,
SYSCONF },
2132 #ifdef _SC_2_C_VERSION
2133 {
"POSIX2_C_VERSION", _SC_2_C_VERSION,
SYSCONF },
2135 #ifdef _SC_EXPR_NEST_MAX
2136 {
"POSIX2_EXPR_NEST_MAX", _SC_EXPR_NEST_MAX,
SYSCONF },
2138 #ifdef _SC_2_FORT_DEV
2139 {
"POSIX2_FORT_DEV", _SC_2_FORT_DEV,
SYSCONF },
2141 #ifdef _SC_2_FORT_RUN
2142 {
"POSIX2_FORT_RUN", _SC_2_FORT_RUN,
SYSCONF },
2145 {
"_POSIX2_LINE_MAX", _SC_LINE_MAX,
SYSCONF },
2147 #ifdef _SC_2_LOCALEDEF
2148 {
"POSIX2_LOCALEDEF", _SC_2_LOCALEDEF,
SYSCONF },
2150 #ifdef _SC_RE_DUP_MAX
2151 {
"POSIX2_RE_DUP_MAX", _SC_RE_DUP_MAX,
SYSCONF },
2154 {
"POSIX2_SW_DEV", _SC_2_SW_DEV,
SYSCONF },
2157 {
"POSIX2_UPE", _SC_2_UPE,
SYSCONF },
2159 #ifdef _SC_2_VERSION
2160 {
"POSIX2_VERSION", _SC_2_VERSION,
SYSCONF },
2162 #ifdef _SC_RE_DUP_MAX
2163 {
"RE_DUP_MAX", _SC_RE_DUP_MAX,
SYSCONF },
2167 {
"PATH", _CS_PATH,
CONFSTR },
2168 {
"CS_PATH", _CS_PATH,
CONFSTR },
2172 #ifdef _CS_LFS_CFLAGS
2173 {
"LFS_CFLAGS", _CS_LFS_CFLAGS,
CONFSTR },
2175 #ifdef _CS_LFS_LDFLAGS
2176 {
"LFS_LDFLAGS", _CS_LFS_LDFLAGS,
CONFSTR },
2179 {
"LFS_LIBS", _CS_LFS_LIBS,
CONFSTR },
2181 #ifdef _CS_LFS_LINTFLAGS
2182 {
"LFS_LINTFLAGS", _CS_LFS_LINTFLAGS,
CONFSTR },
2184 #ifdef _CS_LFS64_CFLAGS
2185 {
"LFS64_CFLAGS", _CS_LFS64_CFLAGS,
CONFSTR },
2187 #ifdef _CS_LFS64_LDFLAGS
2188 {
"LFS64_LDFLAGS", _CS_LFS64_LDFLAGS,
CONFSTR },
2190 #ifdef _CS_LFS64_LIBS
2191 {
"LFS64_LIBS", _CS_LFS64_LIBS,
CONFSTR },
2193 #ifdef _CS_LFS64_LINTFLAGS
2194 {
"LFS64_LINTFLAGS", _CS_LFS64_LINTFLAGS,
CONFSTR },
2198 #ifdef _SC_XBS5_ILP32_OFF32
2199 {
"_XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32,
SYSCONF },
2201 #ifdef _CS_XBS5_ILP32_OFF32_CFLAGS
2202 {
"XBS5_ILP32_OFF32_CFLAGS", _CS_XBS5_ILP32_OFF32_CFLAGS,
CONFSTR },
2204 #ifdef _CS_XBS5_ILP32_OFF32_LDFLAGS
2205 {
"XBS5_ILP32_OFF32_LDFLAGS", _CS_XBS5_ILP32_OFF32_LDFLAGS,
CONFSTR },
2207 #ifdef _CS_XBS5_ILP32_OFF32_LIBS
2208 {
"XBS5_ILP32_OFF32_LIBS", _CS_XBS5_ILP32_OFF32_LIBS,
CONFSTR },
2210 #ifdef _CS_XBS5_ILP32_OFF32_LINTFLAGS
2211 {
"XBS5_ILP32_OFF32_LINTFLAGS", _CS_XBS5_ILP32_OFF32_LINTFLAGS,
CONFSTR },
2214 #ifdef _SC_XBS5_ILP32_OFFBIG
2215 {
"_XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG,
SYSCONF },
2217 #ifdef _CS_XBS5_ILP32_OFFBIG_CFLAGS
2218 {
"XBS5_ILP32_OFFBIG_CFLAGS", _CS_XBS5_ILP32_OFFBIG_CFLAGS,
CONFSTR },
2220 #ifdef _CS_XBS5_ILP32_OFFBIG_LDFLAGS
2221 {
"XBS5_ILP32_OFFBIG_LDFLAGS", _CS_XBS5_ILP32_OFFBIG_LDFLAGS,
CONFSTR },
2223 #ifdef _CS_XBS5_ILP32_OFFBIG_LIBS
2224 {
"XBS5_ILP32_OFFBIG_LIBS", _CS_XBS5_ILP32_OFFBIG_LIBS,
CONFSTR },
2226 #ifdef _CS_XBS5_ILP32_OFFBIG_LINTFLAGS
2227 {
"XBS5_ILP32_OFFBIG_LINTFLAGS", _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,
CONFSTR },
2230 #ifdef _SC_XBS5_LP64_OFF64
2231 {
"_XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64,
SYSCONF },
2233 #ifdef _CS_XBS5_LP64_OFF64_CFLAGS
2234 {
"XBS5_LP64_OFF64_CFLAGS", _CS_XBS5_LP64_OFF64_CFLAGS,
CONFSTR },
2236 #ifdef _CS_XBS5_LP64_OFF64_LDFLAGS
2237 {
"XBS5_LP64_OFF64_LDFLAGS", _CS_XBS5_LP64_OFF64_LDFLAGS,
CONFSTR },
2239 #ifdef _CS_XBS5_LP64_OFF64_LIBS
2240 {
"XBS5_LP64_OFF64_LIBS", _CS_XBS5_LP64_OFF64_LIBS,
CONFSTR },
2242 #ifdef _CS_XBS5_LP64_OFF64_LINTFLAGS
2243 {
"XBS5_LP64_OFF64_LINTFLAGS", _CS_XBS5_LP64_OFF64_LINTFLAGS,
CONFSTR },
2246 #ifdef _SC_XBS5_LPBIG_OFFBIG
2247 {
"_XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG,
SYSCONF },
2249 #ifdef _CS_XBS5_LPBIG_OFFBIG_CFLAGS
2250 {
"XBS5_LPBIG_OFFBIG_CFLAGS", _CS_XBS5_LPBIG_OFFBIG_CFLAGS,
CONFSTR },
2252 #ifdef _CS_XBS5_LPBIG_OFFBIG_LDFLAGS
2253 {
"XBS5_LPBIG_OFFBIG_LDFLAGS", _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,
CONFSTR },
2255 #ifdef _CS_XBS5_LPBIG_OFFBIG_LIBS
2256 {
"XBS5_LPBIG_OFFBIG_LIBS", _CS_XBS5_LPBIG_OFFBIG_LIBS,
CONFSTR },
2258 #ifdef _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
2259 {
"XBS5_LPBIG_OFFBIG_LINTFLAGS", _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,
CONFSTR },
2262 #ifdef _SC_V6_ILP32_OFF32
2263 {
"_POSIX_V6_ILP32_OFF32", _SC_V6_ILP32_OFF32,
SYSCONF },
2265 #ifdef _CS_POSIX_V6_ILP32_OFF32_CFLAGS
2266 {
"POSIX_V6_ILP32_OFF32_CFLAGS", _CS_POSIX_V6_ILP32_OFF32_CFLAGS,
CONFSTR },
2268 #ifdef _CS_POSIX_V6_ILP32_OFF32_LDFLAGS
2269 {
"POSIX_V6_ILP32_OFF32_LDFLAGS", _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,
CONFSTR },
2271 #ifdef _CS_POSIX_V6_ILP32_OFF32_LIBS
2272 {
"POSIX_V6_ILP32_OFF32_LIBS", _CS_POSIX_V6_ILP32_OFF32_LIBS,
CONFSTR },
2274 #ifdef _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS
2275 {
"POSIX_V6_ILP32_OFF32_LINTFLAGS", _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,
CONFSTR },
2278 #ifdef _CS_V6_WIDTH_RESTRICTED_ENVS
2279 {
"_POSIX_V6_WIDTH_RESTRICTED_ENVS", _CS_V6_WIDTH_RESTRICTED_ENVS,
CONFSTR },
2282 #ifdef _SC_V6_ILP32_OFFBIG
2283 {
"_POSIX_V6_ILP32_OFFBIG", _SC_V6_ILP32_OFFBIG,
SYSCONF },
2285 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
2286 {
"POSIX_V6_ILP32_OFFBIG_CFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,
CONFSTR },
2288 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
2289 {
"POSIX_V6_ILP32_OFFBIG_LDFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,
CONFSTR },
2291 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_LIBS
2292 {
"POSIX_V6_ILP32_OFFBIG_LIBS", _CS_POSIX_V6_ILP32_OFFBIG_LIBS,
CONFSTR },
2294 #ifdef _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS
2295 {
"POSIX_V6_ILP32_OFFBIG_LINTFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,
CONFSTR },
2298 #ifdef _SC_V6_LP64_OFF64
2299 {
"_POSIX_V6_LP64_OFF64", _SC_V6_LP64_OFF64,
SYSCONF },
2301 #ifdef _CS_POSIX_V6_LP64_OFF64_CFLAGS
2302 {
"POSIX_V6_LP64_OFF64_CFLAGS", _CS_POSIX_V6_LP64_OFF64_CFLAGS,
CONFSTR },
2304 #ifdef _CS_POSIX_V6_LP64_OFF64_LDFLAGS
2305 {
"POSIX_V6_LP64_OFF64_LDFLAGS", _CS_POSIX_V6_LP64_OFF64_LDFLAGS,
CONFSTR },
2307 #ifdef _CS_POSIX_V6_LP64_OFF64_LIBS
2308 {
"POSIX_V6_LP64_OFF64_LIBS", _CS_POSIX_V6_LP64_OFF64_LIBS,
CONFSTR },
2310 #ifdef _CS_POSIX_V6_LP64_OFF64_LINTFLAGS
2311 {
"POSIX_V6_LP64_OFF64_LINTFLAGS", _CS_POSIX_V6_LP64_OFF64_LINTFLAGS,
CONFSTR },
2314 #ifdef _SC_V6_LPBIG_OFFBIG
2315 {
"_POSIX_V6_LPBIG_OFFBIG", _SC_V6_LPBIG_OFFBIG,
SYSCONF },
2317 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
2318 {
"POSIX_V6_LPBIG_OFFBIG_CFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,
CONFSTR },
2320 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
2321 {
"POSIX_V6_LPBIG_OFFBIG_LDFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,
CONFSTR },
2323 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LIBS
2324 {
"POSIX_V6_LPBIG_OFFBIG_LIBS", _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,
CONFSTR },
2326 #ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS
2327 {
"POSIX_V6_LPBIG_OFFBIG_LINTFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,
CONFSTR },
2330 #ifdef _SC_ADVISORY_INFO
2331 {
"_POSIX_ADVISORY_INFO", _SC_ADVISORY_INFO,
SYSCONF },
2334 {
"_POSIX_BARRIERS", _SC_BARRIERS,
SYSCONF },
2337 {
"_POSIX_BASE", _SC_BASE,
SYSCONF },
2339 #ifdef _SC_C_LANG_SUPPORT
2340 {
"_POSIX_C_LANG_SUPPORT", _SC_C_LANG_SUPPORT,
SYSCONF },
2342 #ifdef _SC_C_LANG_SUPPORT_R
2343 {
"_POSIX_C_LANG_SUPPORT_R", _SC_C_LANG_SUPPORT_R,
SYSCONF },
2345 #ifdef _SC_CLOCK_SELECTION
2346 {
"_POSIX_CLOCK_SELECTION", _SC_CLOCK_SELECTION,
SYSCONF },
2349 {
"_POSIX_CPUTIME", _SC_CPUTIME,
SYSCONF },
2351 #ifdef _SC_THREAD_CPUTIME
2352 {
"_POSIX_THREAD_CPUTIME", _SC_THREAD_CPUTIME,
SYSCONF },
2354 #ifdef _SC_DEVICE_SPECIFIC
2355 {
"_POSIX_DEVICE_SPECIFIC", _SC_DEVICE_SPECIFIC,
SYSCONF },
2357 #ifdef _SC_DEVICE_SPECIFIC_R
2358 {
"_POSIX_DEVICE_SPECIFIC_R", _SC_DEVICE_SPECIFIC_R,
SYSCONF },
2361 {
"_POSIX_FD_MGMT", _SC_FD_MGMT,
SYSCONF },
2364 {
"_POSIX_FIFO", _SC_FIFO,
SYSCONF },
2367 {
"_POSIX_PIPE", _SC_PIPE,
SYSCONF },
2369 #ifdef _SC_FILE_ATTRIBUTES
2370 {
"_POSIX_FILE_ATTRIBUTES", _SC_FILE_ATTRIBUTES,
SYSCONF },
2372 #ifdef _SC_FILE_LOCKING
2373 {
"_POSIX_FILE_LOCKING", _SC_FILE_LOCKING,
SYSCONF },
2375 #ifdef _SC_FILE_SYSTEM
2376 {
"_POSIX_FILE_SYSTEM", _SC_FILE_SYSTEM,
SYSCONF },
2378 #ifdef _SC_MONOTONIC_CLOCK
2379 {
"_POSIX_MONOTONIC_CLOCK", _SC_MONOTONIC_CLOCK,
SYSCONF },
2381 #ifdef _SC_MULTI_PROCESS
2382 {
"_POSIX_MULTI_PROCESS", _SC_MULTI_PROCESS,
SYSCONF },
2384 #ifdef _SC_SINGLE_PROCESS
2385 {
"_POSIX_SINGLE_PROCESS", _SC_SINGLE_PROCESS,
SYSCONF },
2387 #ifdef _SC_NETWORKING
2388 {
"_POSIX_NETWORKING", _SC_NETWORKING,
SYSCONF },
2390 #ifdef _SC_READER_WRITER_LOCKS
2391 {
"_POSIX_READER_WRITER_LOCKS", _SC_READER_WRITER_LOCKS,
SYSCONF },
2393 #ifdef _SC_SPIN_LOCKS
2394 {
"_POSIX_SPIN_LOCKS", _SC_SPIN_LOCKS,
SYSCONF },
2397 {
"_POSIX_REGEXP", _SC_REGEXP,
SYSCONF },
2399 #ifdef _SC_REGEX_VERSION
2400 {
"_REGEX_VERSION", _SC_REGEX_VERSION,
SYSCONF },
2403 {
"_POSIX_SHELL", _SC_SHELL,
SYSCONF },
2406 {
"_POSIX_SIGNALS", _SC_SIGNALS,
SYSCONF },
2409 {
"_POSIX_SPAWN", _SC_SPAWN,
SYSCONF },
2411 #ifdef _SC_SPORADIC_SERVER
2412 {
"_POSIX_SPORADIC_SERVER", _SC_SPORADIC_SERVER,
SYSCONF },
2414 #ifdef _SC_THREAD_SPORADIC_SERVER
2415 {
"_POSIX_THREAD_SPORADIC_SERVER", _SC_THREAD_SPORADIC_SERVER,
SYSCONF },
2417 #ifdef _SC_SYSTEM_DATABASE
2418 {
"_POSIX_SYSTEM_DATABASE", _SC_SYSTEM_DATABASE,
SYSCONF },
2420 #ifdef _SC_SYSTEM_DATABASE_R
2421 {
"_POSIX_SYSTEM_DATABASE_R", _SC_SYSTEM_DATABASE_R,
SYSCONF },
2424 {
"_POSIX_TIMEOUTS", _SC_TIMEOUTS,
SYSCONF },
2426 #ifdef _SC_TYPED_MEMORY_OBJECTS
2427 {
"_POSIX_TYPED_MEMORY_OBJECTS", _SC_TYPED_MEMORY_OBJECTS,
SYSCONF },
2429 #ifdef _SC_USER_GROUPS
2430 {
"_POSIX_USER_GROUPS", _SC_USER_GROUPS,
SYSCONF },
2432 #ifdef _SC_USER_GROUPS_R
2433 {
"_POSIX_USER_GROUPS_R", _SC_USER_GROUPS_R,
SYSCONF },
2436 {
"POSIX2_PBS", _SC_2_PBS,
SYSCONF },
2438 #ifdef _SC_2_PBS_ACCOUNTING
2439 {
"POSIX2_PBS_ACCOUNTING", _SC_2_PBS_ACCOUNTING,
SYSCONF },
2441 #ifdef _SC_2_PBS_LOCATE
2442 {
"POSIX2_PBS_LOCATE", _SC_2_PBS_LOCATE,
SYSCONF },
2444 #ifdef _SC_2_PBS_TRACK
2445 {
"POSIX2_PBS_TRACK", _SC_2_PBS_TRACK,
SYSCONF },
2447 #ifdef _SC_2_PBS_MESSAGE
2448 {
"POSIX2_PBS_MESSAGE", _SC_2_PBS_MESSAGE,
SYSCONF },
2450 #ifdef _SC_SYMLOOP_MAX
2451 {
"SYMLOOP_MAX", _SC_SYMLOOP_MAX,
SYSCONF },
2453 #ifdef _SC_STREAM_MAX
2454 {
"STREAM_MAX", _SC_STREAM_MAX,
SYSCONF },
2456 #ifdef _SC_AIO_LISTIO_MAX
2457 {
"AIO_LISTIO_MAX", _SC_AIO_LISTIO_MAX,
SYSCONF },
2460 {
"AIO_MAX", _SC_AIO_MAX,
SYSCONF },
2462 #ifdef _SC_AIO_PRIO_DELTA_MAX
2463 {
"AIO_PRIO_DELTA_MAX", _SC_AIO_PRIO_DELTA_MAX,
SYSCONF },
2465 #ifdef _SC_DELAYTIMER_MAX
2466 {
"DELAYTIMER_MAX", _SC_DELAYTIMER_MAX,
SYSCONF },
2468 #ifdef _SC_HOST_NAME_MAX
2469 {
"HOST_NAME_MAX", _SC_HOST_NAME_MAX,
SYSCONF },
2471 #ifdef _SC_LOGIN_NAME_MAX
2472 {
"LOGIN_NAME_MAX", _SC_LOGIN_NAME_MAX,
SYSCONF },
2474 #ifdef _SC_MQ_OPEN_MAX
2475 {
"MQ_OPEN_MAX", _SC_MQ_OPEN_MAX,
SYSCONF },
2477 #ifdef _SC_MQ_PRIO_MAX
2478 {
"MQ_PRIO_MAX", _SC_MQ_PRIO_MAX,
SYSCONF },
2480 #ifdef _SC_DEVICE_IO
2481 {
"_POSIX_DEVICE_IO", _SC_DEVICE_IO,
SYSCONF },
2484 {
"_POSIX_TRACE", _SC_TRACE,
SYSCONF },
2486 #ifdef _SC_TRACE_EVENT_FILTER
2487 {
"_POSIX_TRACE_EVENT_FILTER", _SC_TRACE_EVENT_FILTER,
SYSCONF },
2489 #ifdef _SC_TRACE_INHERIT
2490 {
"_POSIX_TRACE_INHERIT", _SC_TRACE_INHERIT,
SYSCONF },
2492 #ifdef _SC_TRACE_LOG
2493 {
"_POSIX_TRACE_LOG", _SC_TRACE_LOG,
SYSCONF },
2495 #ifdef _SC_RTSIG_MAX
2496 {
"RTSIG_MAX", _SC_RTSIG_MAX,
SYSCONF },
2498 #ifdef _SC_SEM_NSEMS_MAX
2499 {
"SEM_NSEMS_MAX", _SC_SEM_NSEMS_MAX,
SYSCONF },
2501 #ifdef _SC_SEM_VALUE_MAX
2502 {
"SEM_VALUE_MAX", _SC_SEM_VALUE_MAX,
SYSCONF },
2504 #ifdef _SC_SIGQUEUE_MAX
2505 {
"SIGQUEUE_MAX", _SC_SIGQUEUE_MAX,
SYSCONF },
2507 #ifdef _PC_FILESIZEBITS
2508 {
"FILESIZEBITS", _PC_FILESIZEBITS,
PATHCONF },
2510 #ifdef _PC_ALLOC_SIZE_MIN
2511 {
"POSIX_ALLOC_SIZE_MIN", _PC_ALLOC_SIZE_MIN,
PATHCONF },
2513 #ifdef _PC_REC_INCR_XFER_SIZE
2514 {
"POSIX_REC_INCR_XFER_SIZE", _PC_REC_INCR_XFER_SIZE,
PATHCONF },
2516 #ifdef _PC_REC_MAX_XFER_SIZE
2517 {
"POSIX_REC_MAX_XFER_SIZE", _PC_REC_MAX_XFER_SIZE,
PATHCONF },
2519 #ifdef _PC_REC_MIN_XFER_SIZE
2520 {
"POSIX_REC_MIN_XFER_SIZE", _PC_REC_MIN_XFER_SIZE,
PATHCONF },
2522 #ifdef _PC_REC_XFER_ALIGN
2523 {
"POSIX_REC_XFER_ALIGN", _PC_REC_XFER_ALIGN,
PATHCONF },
2525 #ifdef _PC_SYMLINK_MAX
2526 {
"SYMLINK_MAX", _PC_SYMLINK_MAX,
PATHCONF },
2528 #ifdef _CS_GNU_LIBC_VERSION
2529 {
"GNU_LIBC_VERSION", _CS_GNU_LIBC_VERSION,
CONFSTR },
2531 #ifdef _CS_GNU_LIBPTHREAD_VERSION
2532 {
"GNU_LIBPTHREAD_VERSION", _CS_GNU_LIBPTHREAD_VERSION,
CONFSTR },
2534 #ifdef _PC_2_SYMLINKS
2535 {
"POSIX2_SYMLINKS", _PC_2_SYMLINKS,
PATHCONF },
2538 #ifdef _SC_LEVEL1_ICACHE_SIZE
2539 {
"LEVEL1_ICACHE_SIZE", _SC_LEVEL1_ICACHE_SIZE,
SYSCONF },
2541 #ifdef _SC_LEVEL1_ICACHE_ASSOC
2542 {
"LEVEL1_ICACHE_ASSOC", _SC_LEVEL1_ICACHE_ASSOC,
SYSCONF },
2544 #ifdef _SC_LEVEL1_ICACHE_LINESIZE
2545 {
"LEVEL1_ICACHE_LINESIZE", _SC_LEVEL1_ICACHE_LINESIZE,
SYSCONF },
2547 #ifdef _SC_LEVEL1_DCACHE_SIZE
2548 {
"LEVEL1_DCACHE_SIZE", _SC_LEVEL1_DCACHE_SIZE,
SYSCONF },
2550 #ifdef _SC_LEVEL1_DCACHE_ASSOC
2551 {
"LEVEL1_DCACHE_ASSOC", _SC_LEVEL1_DCACHE_ASSOC,
SYSCONF },
2553 #ifdef _SC_LEVEL1_DCACHE_LINESIZE
2554 {
"LEVEL1_DCACHE_LINESIZE", _SC_LEVEL1_DCACHE_LINESIZE,
SYSCONF },
2556 #ifdef _SC_LEVEL2_CACHE_SIZE
2557 {
"LEVEL2_CACHE_SIZE", _SC_LEVEL2_CACHE_SIZE,
SYSCONF },
2559 #ifdef _SC_LEVEL2_CACHE_ASSOC
2560 {
"LEVEL2_CACHE_ASSOC", _SC_LEVEL2_CACHE_ASSOC,
SYSCONF },
2562 #ifdef _SC_LEVEL2_CACHE_LINESIZE
2563 {
"LEVEL2_CACHE_LINESIZE", _SC_LEVEL2_CACHE_LINESIZE,
SYSCONF },
2565 #ifdef _SC_LEVEL3_CACHE_SIZE
2566 {
"LEVEL3_CACHE_SIZE", _SC_LEVEL3_CACHE_SIZE,
SYSCONF },
2568 #ifdef _SC_LEVEL3_CACHE_ASSOC
2569 {
"LEVEL3_CACHE_ASSOC", _SC_LEVEL3_CACHE_ASSOC,
SYSCONF },
2571 #ifdef _SC_LEVEL3_CACHE_LINESIZE
2572 {
"LEVEL3_CACHE_LINESIZE", _SC_LEVEL3_CACHE_LINESIZE,
SYSCONF },
2574 #ifdef _SC_LEVEL4_CACHE_SIZE
2575 {
"LEVEL4_CACHE_SIZE", _SC_LEVEL4_CACHE_SIZE,
SYSCONF },
2577 #ifdef _SC_LEVEL4_CACHE_ASSOC
2578 {
"LEVEL4_CACHE_ASSOC", _SC_LEVEL4_CACHE_ASSOC,
SYSCONF },
2582 {
"IPV6", _SC_IPV6,
SYSCONF },
2584 #ifdef _SC_RAW_SOCKETS
2585 {
"RAW_SOCKETS", _SC_RAW_SOCKETS,
SYSCONF },
2591 #define _GETCONF_PATH "/"
2600 const struct conf *c;
2603 const char * NS =
"getconf";
2610 if (_getconf_path == NULL) {
2611 _getconf_path =
rpmExpand(
"%{?_rpmds__getconf_path}", NULL);
2613 if (!(_getconf_path != NULL && *_getconf_path ==
'/')) {
2615 _getconf_path =
_free(_getconf_path);
2626 for (c = vars; c->
name != NULL; ++c) {
2634 sprintf(EVR,
"%ld", value);
2640 #if defined(_SC_UINT_MAX) && defined(_SC_ULONG_MAX)
2645 sprintf(EVR,
"%lu", value);
2651 sprintf(EVR,
"%ld", value);
2655 clen = confstr(c->
call_name, (
char *) NULL, 0);
2658 if (confstr (c->
call_name, EVR, clen) != clen) {
2659 fprintf(stderr,
"confstr: %s\n", strerror(
errno));
2668 for (t = EVR; *t; t++) {
2669 if (*t ==
'\n') *t =
' ';
2671 if (!strcmp(N,
"GNU_LIBC_VERSION")
2672 || !strcmp(N,
"GNU_LIBPTHREAD_VERSION"))
2674 for (t = EVR; *t; t++) {
2675 if (*t ==
' ') *t =
'-';
2679 if (*EVR ==
'\0' || strchr(EVR,
' ') != NULL
2680 || (EVR[0] ==
'-' && strchr(
"0123456789", EVR[1]) == NULL))
2700 if (_rpmds_debug < 0)
2701 fprintf(stderr,
"*** %s(%p, %p) %s\n", __FUNCTION__, context, ds,
tagName(
rpmdsTagN(ds)));
2769 PRCO->Pdsp = &PRCO->P;
2770 PRCO->Rdsp = &PRCO->R;
2771 PRCO->Cdsp = &PRCO->C;
2772 PRCO->Odsp = &PRCO->O;
2773 PRCO->Tdsp = &PRCO->T;
2774 PRCO->Ddsp = &PRCO->D;
2775 PRCO->Ldsp = &PRCO->L;
2810 static char *
sonameDep(
char * t,
const char * s,
int isElf64)
2814 #if !defined(__alpha__) && !defined(__sun)
2816 if (s[strlen(s)-1] !=
')')
2827 int (*add) (
void * context,
rpmds ds),
void * context)
2829 #if HAVE_GELF_H && HAVE_LIBELF
2833 GElf_Ehdr ehdr_mem, * ehdr;
2834 GElf_Shdr shdr_mem, * shdr;
2835 GElf_Verdef def_mem, * def;
2836 GElf_Verneed need_mem, * need;
2837 GElf_Dyn dyn_mem, * dyn;
2838 unsigned int auxoffset;
2839 unsigned int offset;
2846 const char * soname = NULL;
2858 static int filter_GLIBC_PRIVATE = 0;
2859 static int oneshot = 0;
2862 if (_rpmds_debug < 0)
2863 fprintf(stderr,
"*** %s(%s, %d, %p, %p)\n", __FUNCTION__, fn, flags, (
void *)add, context);
2871 {
struct stat sb, * st = &sb;
2872 if (stat(fn, st) != 0)
2874 is_executable = (st->st_mode & (S_IXUSR|S_IXGRP|S_IXOTH));
2877 fdno = open(fn, O_RDONLY);
2881 (void) elf_version(EV_CURRENT);
2885 if ((elf = elf_begin (fdno, ELF_C_READ, NULL)) == NULL
2886 || elf_kind(elf) != ELF_K_ELF
2887 || (ehdr = gelf_getehdr(elf, &ehdr_mem)) == NULL
2888 || !(ehdr->e_type == ET_DYN || ehdr->e_type == ET_EXEC))
2892 isElf64 = ehdr->e_ident[EI_CLASS] == ELFCLASS64;
2893 isDSO = ehdr->e_type == ET_DYN;
2897 while ((scn = elf_nextscn(elf, scn)) != NULL) {
2898 shdr = gelf_getshdr(scn, &shdr_mem);
2902 soname =
_free(soname);
2903 switch (shdr->sh_type) {
2907 case SHT_GNU_verdef:
2910 while ((data = elf_getdata (scn, data)) != NULL) {
2912 for (cnt = shdr->sh_info; --cnt >= 0; ) {
2914 def = gelf_getverdef (data, offset, &def_mem);
2917 auxoffset = offset + def->vd_aux;
2918 for (cnt2 = def->vd_cnt; --cnt2 >= 0; ) {
2919 GElf_Verdaux aux_mem, * aux;
2921 aux = gelf_getverdaux (data, auxoffset, &aux_mem);
2925 s = elf_strptr(elf, shdr->sh_link, aux->vda_name);
2929 if (def->vd_flags & VER_FLG_BASE) {
2930 soname =
_free(soname);
2934 && !(filter_GLIBC_PRIVATE != 0
2935 && !strcmp(s,
"GLIBC_PRIVATE")))
2946 "", RPMSENSE_FIND_PROVIDES);
2947 xx = add(context, ds);
2950 auxoffset += aux->vda_next;
2952 offset += def->vd_next;
2956 case SHT_GNU_verneed:
2959 if (!skipR && is_executable)
2960 while ((data = elf_getdata (scn, data)) != NULL) {
2962 for (cnt = shdr->sh_info; --cnt >= 0; ) {
2963 need = gelf_getverneed (data, offset, &need_mem);
2967 s = elf_strptr(elf, shdr->sh_link, need->vn_file);
2970 soname =
_free(soname);
2972 auxoffset = offset + need->vn_aux;
2973 for (cnt2 = need->vn_cnt; --cnt2 >= 0; ) {
2974 GElf_Vernaux aux_mem, * aux;
2976 aux = gelf_getvernaux (data, auxoffset, &aux_mem);
2980 s = elf_strptr(elf, shdr->sh_link, aux->vna_name);
2986 && !(filter_GLIBC_PRIVATE != 0
2987 && !strcmp(s,
"GLIBC_PRIVATE")))
2998 "", RPMSENSE_FIND_REQUIRES);
2999 xx = add(context, ds);
3002 auxoffset += aux->vna_next;
3004 offset += need->vn_next;
3010 while ((data = elf_getdata (scn, data)) != NULL) {
3012 for (cnt = 0; cnt < (shdr->sh_size / shdr->sh_entsize); ++cnt) {
3013 dyn = gelf_getdyn (data, cnt, &dyn_mem);
3017 switch (dyn->d_tag) {
3032 if (skipR || !is_executable)
3035 s = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val);
3040 "", RPMSENSE_FIND_REQUIRES);
3041 xx = add(context, ds);
3048 s = elf_strptr(elf, shdr->sh_link, dyn->d_un.d_val);
3054 "", RPMSENSE_FIND_PROVIDES);
3055 xx = add(context, ds);
3069 if (gotGNUHASH && !gotHASH) {
3071 RPMSENSE_FIND_REQUIRES);
3072 xx = add(context, ds);
3077 if (!skipP && isDSO && !gotDEBUG && !gotSONAME) {
3078 s = strrchr(fn,
'/');
3088 sonameDep(buf, s, isElf64),
"", RPMSENSE_FIND_PROVIDES);
3089 xx = add(context, ds);
3094 soname =
_free(soname);
3095 if (elf) (void) elf_end(elf);
3104 #define _SBIN_LDCONFIG_P "/sbin/ldconfig -p"
3108 #define _LD_SO_CACHE "/etc/ld.so.cache"
3118 const char *N, *EVR;
3132 if (_ldconfig_cmd == NULL) {
3133 _ldconfig_cmd =
rpmExpand(
"%{?_rpmds_ldconfig_cmd}", NULL);
3134 if (!(_ldconfig_cmd != NULL && *_ldconfig_cmd ==
'/')) {
3136 _ldconfig_cmd =
_free(_ldconfig_cmd);
3142 if (_ldconfig_cache == NULL) {
3143 _ldconfig_cache =
rpmExpand(
"%{?_rpmds_ldconfig_cache}", NULL);
3145 if (!(_ldconfig_cache != NULL && *_ldconfig_cache ==
'/')) {
3147 _ldconfig_cache =
_free(_ldconfig_cache);
3159 if (_rpmds_debug < 0)
3160 fprintf(stderr,
"*** %s(%p, %s) P %p R %p C %p O %p T %p D %p L %p\n", __FUNCTION__, PRCO, fn, PRCO->Pdsp, PRCO->Rdsp, PRCO->Cdsp, PRCO->Odsp, PRCO->Tdsp, PRCO->Ddsp, PRCO->Ldsp);
3162 fp = popen(_ldconfig_cmd,
"r");
3166 while((f = fgets(buf,
sizeof(buf), fp)) != NULL) {
3179 while (*fe && !(fe[0] ==
'=' && fe[1] ==
'>'))
3194 if (fe > f && fe[-1] ==
' ') fe[-1] =
'\0';
3206 for (t = f; *t !=
'\0'; t++) {
3226 Flags |= RPMSENSE_PROBE;
3236 if (fp != NULL) (void) pclose(fp);
3242 #define _RLD_SEARCH_PATH "/lib:/usr/lib"
3244 static const char * _rld_search_path = NULL;
3247 int rpmdsRldpath(
rpmPRCO PRCO,
const char * rldp)
3252 const char *N, *EVR;
3266 if (_rld_search_path == NULL) {
3267 _rld_search_path =
rpmExpand(
"%{?_rpmds_rld_search_path}", NULL);
3269 if (!(_rld_search_path != NULL && *_rld_search_path ==
'/')) {
3271 _rld_search_path =
_free(_rld_search_path);
3273 _rld_search_path =
xstrdup(_RLD_SEARCH_PATH);
3280 rldp = _rld_search_path;
3283 if (_rpmds_debug > 0)
3284 fprintf(stderr,
"*** %s(%p, %s) P %p R %p C %p O %p\n", __FUNCTION__, PRCO, rldp, PRCO->Pdsp, PRCO->Rdsp, PRCO->Cdsp, PRCO->Odsp);
3297 strncpy(buf, f, g - f + 1);
3304 if ( !(strlen(buf) > 0 && buf[0] ==
'/') )
3309 strcat(buf,
"/*.so.*");
3311 if (_rpmds_debug > 0)
3312 fprintf(stderr,
"*** %s(%p, %s) globbing %s\n", __FUNCTION__, PRCO, rldp, buf);
3314 xx = glob(buf, 0, NULL, &gl);
3318 if (_rpmds_debug > 0)
3319 fprintf(stderr,
"*** %s(%p, %s) glob matched %d files\n", __FUNCTION__, PRCO, rldp, gl.gl_pathc);
3333 N = DSOfn + strlen(DSOfn);
3334 while (N > DSOfn && *N !=
'/')
3337 Flags |= RPMSENSE_PROBE;
3354 #define _SOLARIS_CRLE "/usr/sbin/crle"
3356 static const char * _crle_cmd = NULL;
3358 int rpmdsCrle(
rpmPRCO PRCO,
const char * fn)
3374 if (_crle_cmd == NULL) {
3375 _crle_cmd =
rpmExpand(
"%{?_rpmds_crle_cmd}", NULL);
3376 if (!(_crle_cmd != NULL && *_crle_cmd ==
'/')) {
3378 _crle_cmd =
_free(_crle_cmd);
3380 _crle_cmd =
xstrdup(_SOLARIS_CRLE);
3385 fp = popen(_crle_cmd,
"r");
3394 while((f = fgets(buf,
sizeof(buf), fp)) != NULL) {
3398 g = strstr(f,
"(ELF):");
3403 f = g + (
sizeof(
"(ELF):")-1);
3416 rc = rpmdsRldpath(PRCO, f);
3425 static const char * NS =
"uname";
3426 struct utsname myun;
3439 if (un->sysname != NULL)
3441 if (un->nodename != NULL)
3443 if (un->release != NULL)
3446 if (un->version != NULL)
3449 if (un->machine != NULL)
3451 #if defined(__linux__)
3452 if (un->domainname != NULL && strcmp(un->domainname,
"(none)"))
3462 #define _PERL_PROVIDES "/usr/bin/find /usr/lib/perl5 | /usr/lib/rpm/perl.prov"
3471 const char *N, *EVR;
3477 const char * fn =
"pipe";
3484 if (_perldeps_cmd == NULL) {
3485 _perldeps_cmd =
rpmExpand(
"%{?_rpmds_perldeps_cmd}", NULL);
3487 if (!(_perldeps_cmd != NULL && *_perldeps_cmd ==
'/')) {
3489 _perldeps_cmd =
_free(_perldeps_cmd);
3503 fp = popen(cmd,
"r");
3509 while((f = fgets(buf,
sizeof(buf), fp)) != NULL) {
3513 buf[
sizeof(buf)-1] =
'\0';
3520 if (*f ==
'\0' || *f ==
'#')
3530 if (*f ==
'!') fe++;
3531 while (*fe && !
_isspace(*fe) && strchr(
"!<=>", *fe) == NULL)
3536 if (!(
xisalnum(f[0]) || strchr(
"/_%!", f[0]) != NULL)) {
3538 fprintf(stderr,
_(
"running \"%s\" pipe command\n"), cmd);
3539 fprintf(stderr,
_(
"%s:%d \"%s\" has invalid name. Skipping ...\n"),
3550 if (*f !=
'/' && *fe !=
'\0') {
3556 fprintf(stderr,
_(
"running \"%s\" pipe command\n"), cmd),
3557 fprintf(stderr,
_(
"%s:%d \"%s\" has no comparison operator. Skipping ...\n"),
3568 fprintf(stderr,
_(
"running \"%s\" pipe command\n"), cmd),
3570 fprintf(stderr,
_(
"\tline %d: No EVR comparison value found.\n Skipping ..."),
3572 fprintf(stderr,
_(
"%s:%d \"%s\" has no EVR string. Skipping ...\n"),
3589 Flags |= RPMSENSE_PROBE;
3598 if (fp != NULL) (void) pclose(fp);
3605 const char * AN = A->ns.N;
3606 const char * AA = A->ns.A;
3607 const char * BN = B->ns.N;
3608 const char * BA = B->ns.A;
3612 rc = strcmp(AN, BN);
3613 }
else if (AA && !BA) {
3614 rc = strncmp(AN, BN, (AA - AN)) || BN[AA - AN];
3616 rc = strcmp(AA, B->A);
3617 }
else if (!AA && BA) {
3618 rc = strncmp(AN, BN, (BA - BN)) || AN[BA - BN];
3620 rc = strcmp(BA, A->A);
3622 rc = strcmp(AN, BN);
3629 const char *aDepend = (A->DNEVR != NULL ?
xstrdup(A->DNEVR+2) :
"");
3630 const char *bDepend = (B->DNEVR != NULL ?
xstrdup(B->DNEVR+2) :
"");
3631 EVR_t a = memset(
alloca(
sizeof(*a)), 0,
sizeof(*a));
3632 EVR_t b = memset(
alloca(
sizeof(*a)), 0,
sizeof(*a));
3633 int_32 aFlags = A->ns.Flags;
3634 int_32 bFlags = B->ns.Flags;
3635 int (*EVRcmp) (
const char *a,
const char *b);
3641 assert((
rpmdsFlags(B) & RPMSENSE_SENSEMASK) == B->ns.Flags);
3651 if (!(A->EVR && A->Flags && B->EVR && B->Flags))
3655 if (!(aFlags && bFlags))
3659 if (!(A->EVR[A->i] && *A->EVR[A->i] && B->EVR[B->i] && *B->EVR[B->i]))
3664 xx = (A->EVRparse ? A->EVRparse :
rpmEVRparse) (A->EVR[A->i], a);
3665 xx = (B->EVRparse ? B->EVRparse :
rpmEVRparse) (B->EVR[B->i], b);
3669 EVRcmp = (A->EVRcmp && B->EVRcmp && A->EVRcmp == B->EVRcmp)
3674 if (a->E && *a->E && b->E && *b->E)
3675 sense = EVRcmp(a->E, b->E);
3676 else if (a->E && *a->E && atol(a->E) > 0) {
3677 if (!B->nopromote) {
3679 rpmMessage(lvl,
_(
"The \"B\" dependency needs an epoch (assuming same epoch as \"A\")\n\tA = \"%s\"\tB = \"%s\"\n"),
3684 }
else if (b->E && *b->E && atol(b->E) > 0)
3688 sense = EVRcmp(a->V, b->V);
3689 if (sense == 0 && a->R && *a->R && b->R && *b->R)
3690 sense = EVRcmp(a->R, b->R);
3693 a->str =
_free(a->str);
3694 b->str =
_free(b->str);
3698 result = (sense != 0);
3701 }
else if (sense > 0 && ((aFlags & RPMSENSE_LESS) || (bFlags & RPMSENSE_GREATER))) {
3703 }
else if (sense == 0 &&
3705 ((aFlags & RPMSENSE_LESS) && (bFlags & RPMSENSE_LESS)) ||
3706 ((aFlags & RPMSENSE_GREATER) && (bFlags & RPMSENSE_GREATER)))) {
3713 if (_noisy_range_comparison_debug_message)
3715 (result ?
_(
"YES") :
_(
"NO ")), aDepend, bDepend);
3716 aDepend =
_free(aDepend);
3717 bDepend =
_free(bDepend);
3722 const fnpyKey * suggestedKeys,
int adding)
3724 const char * Name =
rpmdsN(ds);
3730 if (ps == NULL)
return;
3733 if (Name == NULL) Name =
"?N?";
3734 if (EVR == NULL) EVR =
"?EVR?";
3735 if (DNEVR == NULL) DNEVR =
"? ?N? ?OP? ?EVR?";
3739 pkgNEVR, ds->Type, DNEVR+2);
3741 switch ((
unsigned)DNEVR[0]) {
3747 key = (suggestedKeys ? suggestedKeys[0] : NULL);
3748 rpmpsAppend(ps, type, pkgNEVR, key, NULL, NULL, DNEVR, adding);
3754 rpmds provides = NULL;
3755 int_32 reqFlags = req->ns.Flags;
3760 if (req->EVR == NULL || req->Flags == NULL)
3763 switch(req->ns.Type) {
3767 if (!reqFlags || !req->EVR[req->i] || *req->EVR[req->i] ==
'\0')
3777 if (provides == NULL) {
3789 if (provides->EVR == NULL)
3794 if (provides != NULL)
3808 const char * pkgN, *
V, * R;
3810 const char * pkgEVR;
3812 int_32 reqFlags = req->ns.Flags;
3820 if (req->EVR == NULL || req->Flags == NULL)
3824 if (!(reqFlags && req->EVR[req->i] && *req->EVR[req->i]))
3832 if (V) nb += strlen(V);
3833 if (R) nb += strlen(R);
3838 sprintf(t,
"%d:", *epoch);
3857 if (ds->ns.str[0] ==
'!')