Call libproc constructors in strict order
Having one constructor depend on another means if the order is reversed you get a different result. Patched based on idea by Tom Evans. Added new code to old_Hertz_hack by Werner Fink <werner@suse.de> Bug-Debian: http://bugs.debian.org/460331 Bug-Redhat: https://bugzilla.redhat.com/show_bug.cgi?id=632236 Reviewed-by: Jan Görig <jgorig@redhat.com>
This commit is contained in:
parent
4736dad559
commit
8fde4af11d
@ -158,6 +158,14 @@ static void old_Hertz_hack(void){
|
|||||||
unsigned long long jiffies;
|
unsigned long long jiffies;
|
||||||
unsigned h;
|
unsigned h;
|
||||||
char *restrict savelocale;
|
char *restrict savelocale;
|
||||||
|
long hz;
|
||||||
|
|
||||||
|
#ifdef _SC_CLK_TCK
|
||||||
|
if((hz = sysconf(_SC_CLK_TCK)) > 0){
|
||||||
|
Hertz = hz;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
savelocale = setlocale(LC_NUMERIC, NULL);
|
savelocale = setlocale(LC_NUMERIC, NULL);
|
||||||
setlocale(LC_NUMERIC, "C");
|
setlocale(LC_NUMERIC, "C");
|
||||||
@ -241,6 +249,7 @@ static int check_for_privs(void){
|
|||||||
static void init_libproc(void) __attribute__((constructor));
|
static void init_libproc(void) __attribute__((constructor));
|
||||||
static void init_libproc(void){
|
static void init_libproc(void){
|
||||||
have_privs = check_for_privs();
|
have_privs = check_for_privs();
|
||||||
|
init_Linux_version(); /* Must be called before we check code */
|
||||||
// ought to count CPUs in /proc/stat instead of relying
|
// ought to count CPUs in /proc/stat instead of relying
|
||||||
// on glibc, which foolishly tries to parse /proc/cpuinfo
|
// on glibc, which foolishly tries to parse /proc/cpuinfo
|
||||||
//
|
//
|
||||||
|
@ -33,8 +33,7 @@ void display_version(void) {
|
|||||||
|
|
||||||
int linux_version_code;
|
int linux_version_code;
|
||||||
|
|
||||||
static void init_Linux_version(void) __attribute__((constructor));
|
void init_Linux_version(void) {
|
||||||
static void init_Linux_version(void) {
|
|
||||||
static struct utsname uts;
|
static struct utsname uts;
|
||||||
int x = 0, y = 0, z = 0; /* cleared in case sscanf() < 3 */
|
int x = 0, y = 0, z = 0; /* cleared in case sscanf() < 3 */
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
EXTERN_C_BEGIN
|
EXTERN_C_BEGIN
|
||||||
|
|
||||||
|
void init_Linux_version(void); /* Get Linux version */
|
||||||
extern void display_version(void); /* display suite version */
|
extern void display_version(void); /* display suite version */
|
||||||
extern const char procps_version[]; /* global buf for suite version */
|
extern const char procps_version[]; /* global buf for suite version */
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user