call versioned boot_time functions based on uname version rather than always trying v4 first
This commit is contained in:
parent
698be6dd32
commit
471d4bb02b
|
@ -16,6 +16,7 @@
|
||||||
#include <sys/mntctl.h>
|
#include <sys/mntctl.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/user.h>
|
#include <sys/user.h>
|
||||||
|
#include <sys/utsname.h>
|
||||||
#include <sys/vmount.h>
|
#include <sys/vmount.h>
|
||||||
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
@ -88,6 +89,7 @@ int sigar_os_open(sigar_t **sigar)
|
||||||
void *dlhandle;
|
void *dlhandle;
|
||||||
int kmem = -1;
|
int kmem = -1;
|
||||||
vminfo_func_t vminfo = NULL;
|
vminfo_func_t vminfo = NULL;
|
||||||
|
struct utsname name;
|
||||||
|
|
||||||
if ((dlhandle = dlopen("/unix", RTLD_NOW))) {
|
if ((dlhandle = dlopen("/unix", RTLD_NOW))) {
|
||||||
vminfo = (vminfo_func_t)dlsym(dlhandle, "vmgetinfo");
|
vminfo = (vminfo_func_t)dlsym(dlhandle, "vmgetinfo");
|
||||||
|
@ -128,6 +130,10 @@ int sigar_os_open(sigar_t **sigar)
|
||||||
|
|
||||||
(*sigar)->self_path[0] = '\0';
|
(*sigar)->self_path[0] = '\0';
|
||||||
|
|
||||||
|
uname(&name);
|
||||||
|
|
||||||
|
(*sigar)->aix_version = atoi(name.version);
|
||||||
|
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -448,7 +454,7 @@ static int boot_time_v5(int fd, time_t *time)
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int boot_time(time_t *time)
|
static int boot_time(sigar_t *sigar, time_t *time)
|
||||||
{
|
{
|
||||||
struct utmp_v5 data_v5;
|
struct utmp_v5 data_v5;
|
||||||
int utmp, status;
|
int utmp, status;
|
||||||
|
@ -457,8 +463,10 @@ static int boot_time(time_t *time)
|
||||||
return errno;
|
return errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((status = boot_time_v4(utmp, time)) != SIGAR_OK) {
|
if (sigar->aix_version == 4) {
|
||||||
lseek(utmp, 0, SEEK_SET);
|
status = boot_time_v4(utmp, time);
|
||||||
|
}
|
||||||
|
else {
|
||||||
status = boot_time_v5(utmp, time);
|
status = boot_time_v5(utmp, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -474,7 +482,7 @@ int sigar_uptime_get(sigar_t *sigar,
|
||||||
int status;
|
int status;
|
||||||
time_t time;
|
time_t time;
|
||||||
|
|
||||||
if ((status = boot_time(&time)) != SIGAR_OK) {
|
if ((status = boot_time(sigar, &time)) != SIGAR_OK) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,7 @@ struct sigar_t {
|
||||||
int cpu_mhz;
|
int cpu_mhz;
|
||||||
char model[128];
|
char model[128];
|
||||||
char self_path[SIGAR_PATH_MAX]; /* path to where libsigar.so lives */
|
char self_path[SIGAR_PATH_MAX]; /* path to where libsigar.so lives */
|
||||||
|
int aix_version;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define HAVE_STRERROR_R
|
#define HAVE_STRERROR_R
|
||||||
|
|
Loading…
Reference in New Issue