Fix up platform and related sysinfo file loading. Upstream-Status: Pending This ensures that RPM knows the compatible set of package types at all times. Signed-off-by: Mark Hatle diff -ur rpm-5.4.0.orig/lib/depends.c rpm-5.4.0/lib/depends.c --- rpm-5.4.0.orig/lib/depends.c 2011-02-15 20:40:13.002849708 -0600 +++ rpm-5.4.0/lib/depends.c 2011-02-15 20:47:05.838981632 -0600 @@ -248,7 +248,7 @@ he->p.ptr = _free(he->p.ptr); } -#if defined(RPM_VENDOR_WINDRIVER) +#if defined(RPM_VENDOR_WINDRIVER) && !defined(RPM_VENDOR_POKY) /* * If we're capable of installing multiple colors * but at least one of the packages are white (0), we @@ -505,7 +505,7 @@ return 0; } -#if defined(RPM_VENDOR_WINDRIVER) +#if defined(RPM_VENDOR_WINDRIVER) && !defined(RPM_VENDOR_POKY) /* Is "compat" compatible w/ arch? */ int _isCompatibleArch(const char * arch, const char * compat) { @@ -649,7 +649,7 @@ if (arch == NULL || (parch = rpmteA(p)) == NULL) continue; -#if defined(RPM_VENDOR_WINDRIVER) +#if defined(RPM_VENDOR_WINDRIVER) && !defined(RPM_VENDOR_POKY) /* XXX hackery for alias matching. */ if (!_isCompatibleArch(arch, parch)) continue; @@ -815,6 +815,12 @@ return rc; } +#if defined(RPM_VENDOR_WINDRIVER) +#define _ETC_RPM_SYSINFO "%{_etcrpm}/sysinfo" +#else +#define _ETC_RPM_SYSINFO SYSCONFIGDIR "/sysinfo" +#endif + /*@only@*/ /*@null@*/ /*@unchecked@*/ static char *sysinfo_path = NULL; @@ -1296,7 +1302,7 @@ sysinfo_path = rpmExpand("%{?_rpmds_sysinfo_path}", NULL); if (!(sysinfo_path != NULL && *sysinfo_path == '/')) { sysinfo_path = _free(sysinfo_path); - sysinfo_path = xstrdup(SYSCONFIGDIR "/sysinfo"); + sysinfo_path = rpmExpand(_ETC_RPM_SYSINFO, NULL); } } diff -ur rpm-5.4.0.orig/lib/rpmds.c rpm-5.4.0/lib/rpmds.c --- rpm-5.4.0.orig/lib/rpmds.c 2011-02-15 20:40:13.004855352 -0600 +++ rpm-5.4.0/lib/rpmds.c 2011-02-15 20:41:55.598846670 -0600 @@ -1737,7 +1737,7 @@ /*@-observertrans @*/ _sysinfo_path = _free(_sysinfo_path); /*@=observertrans @*/ - _sysinfo_path = xstrdup(_ETC_RPM_SYSINFO); + _sysinfo_path = rpmExpand(_ETC_RPM_SYSINFO, NULL); } } /*@=modobserver@*/ diff -ur rpm-5.4.0.orig/lib/rpmrc.c rpm-5.4.0/lib/rpmrc.c --- rpm-5.4.0.orig/lib/rpmrc.c 2011-02-15 20:40:13.006853913 -0600 +++ rpm-5.4.0/lib/rpmrc.c 2011-02-15 20:44:39.708972391 -0600 @@ -38,7 +38,13 @@ static const char * configTarget = NULL; /*@observer@*/ /*@unchecked@*/ -static const char * platform = SYSCONFIGDIR "/platform"; +#if defined(RPM_VENDOR_WINDRIVER) +#define _ETC_RPM_PLATFORM "%{_etcrpm}/platform" +#else +#define _ETC_RPM_PLATFORM SYSCONFIGDIR "/platform" +#endif + +static const char * _platform = NULL; /*@only@*/ /*@relnull@*/ /*@unchecked@*/ void * platpat = NULL; @@ -685,16 +691,17 @@ int rc; while (!gotDefaults) { -#if defined(RPM_VENDOR_WINDRIVER) - const char * _platform = rpmGetPath(__etcrpm, "/platform", NULL); -#else - const char * _platform = platform; -#endif + if (_platform == NULL) { + _platform = rpmExpand("%{?_rpmrc_platform_path}", NULL); + /* XXX may need to validate path existence somewhen. */ + if (!(_platform != NULL && *_platform == '/')) { + _platform = _free(_platform); + _platform = rpmExpand(_ETC_RPM_PLATFORM, NULL); + } + } CVOG_t cvog = NULL; #if defined(RPM_VENDOR_OPENPKG) /* larger-utsname */ const char *cp; -#endif -#if defined(RPM_VENDOR_OPENPKG) /* larger-utsname */ /* utsname fields on some platforms (like HP-UX) are very small (just about 8 characters). This is too small for OpenPKG, so cheat! */ rc = uname(&un_real); @@ -771,9 +778,7 @@ if (cp != NULL && cp != _platform) cp = _free(cp); #endif -#if defined(RPM_VENDOR_WINDRIVER) _platform = _free(_platform); -#endif if (configTarget && !parseCVOG(configTarget, &cvog) && cvog != NULL) { gotDefaults = 1; @@ -1096,6 +1101,8 @@ #ifdef PREMACROFILES if (rpmReadRC(PREMACROFILES)) return -1; +#else + if (rpmReadRC(NULL)) return -1; #endif /* Reset umask to its default umask(2) value. */