patch from elemental... :)

SVN revision: 9361
This commit is contained in:
Carsten Haitzler 2004-03-16 01:59:15 +00:00
parent f902654cb2
commit 8741181adf
1 changed files with 74 additions and 9 deletions

View File

@ -48,6 +48,7 @@
Epplet_gadget close_button, mem_bar, swap_bar, mem_label, swap_label, title, cfg_button;
int mem_val = 0, swap_val = 0;
int show_title = 1;
int kernel_2_6 = 0;
static void timer_cb(void *data);
static void close_cb(void *data);
@ -58,7 +59,7 @@ static void
timer_cb(void *data) {
char buff[1024];
unsigned long total, used, buffers, cached;
unsigned long total, used, buffers, cached, free;
#ifdef HAVE_LIBGTOP
int check=0;
@ -77,11 +78,33 @@ timer_cb(void *data) {
D(("Failed to open /proc/meminfo -- %s\n", strerror(errno)));
return;
}
fgets(buff, sizeof(buff), fp); /* Ignore the first line */
fgets(buff, sizeof(buff), fp);
sscanf(buff, "%*s %lu %lu %*u %*u %lu %lu",
&total, &used, &buffers, &cached);
#endif
if( kernel_2_6 ) {
fgets(buff, sizeof(buff), fp);
sscanf(buff, "%*s %lu", &total);
fgets(buff, sizeof(buff), fp);
sscanf(buff, "%*s %lu", &free);
fgets(buff, sizeof(buff), fp);
sscanf(buff, "%*s %lu", &buffers);
fgets(buff, sizeof(buff), fp);
sscanf(buff, "%*s %lu", &cached);
total *= 1024;
free *= 1024;
buffers *= 1024;
cached *= 1024;
used = total - free;
} else {
fgets(buff, sizeof(buff), fp); /* Ignore the first line */
fgets(buff, sizeof(buff), fp);
sscanf(buff, "%*s %lu %lu %*u %*u %lu %lu",
&total, &used, &buffers, &cached);
}
#endif /* HAVE_LIBGTOP */
used -= (buffers + cached);
mem_val = (int) ((((float) used) / total) * 100.0);
D(("%d = 100 * %lu / %lu\n", (100 * used) / total, used, total));
@ -107,11 +130,32 @@ timer_cb(void *data) {
used=(unsigned long)swap.used;
} while (swap.total==0 && swap.used==0 && check++<15);
#else
fgets(buff, sizeof(buff), fp);
sscanf(buff, "%*s %lu %lu", &total, &used);
if( kernel_2_6 ) {
fgets(buff, sizeof(buff), fp);
fgets(buff, sizeof(buff), fp);
fgets(buff, sizeof(buff), fp);
fgets(buff, sizeof(buff), fp);
fgets(buff, sizeof(buff), fp);
fgets(buff, sizeof(buff), fp);
fgets(buff, sizeof(buff), fp);
fgets(buff, sizeof(buff), fp);
sscanf(buff, "%*s %lu", &total);
fgets(buff, sizeof(buff), fp);
sscanf(buff, "%*s %lu", &free);;
total *= 1024;
free *= 1024;
used = total - free;
} else {
fgets(buff, sizeof(buff), fp);
sscanf(buff, "%*s %lu %lu", &total, &used);
}
fclose(fp);
#endif
#endif /* HAVE_LIBGTOP */
swap_val = (int) ((((float) used) / total) * 100.0);
/*printf ("Swap: %lu %lu %d%%\n", total, used, swap_val); */
@ -194,6 +238,27 @@ main(int argc, char **argv) {
int prio;
/* check for Kernel 2.6 */
FILE *fp;
char version[8], buff[1024];
if ((fp = fopen("/proc/version", "r")) == NULL) {
D(("Failed to open /proc/version -- %s\nWill assume not 2.6 kernel"
, strerror(errno)));
return;
}
fgets(buff, sizeof(buff), fp);
sscanf(buff, "%*s %*s %s", version);
if(version[2] == '6') {
kernel_2_6 = 1;
}
close(fp);
/* end check for Kernel 2.6 */
atexit(Epplet_cleanup);
prio = getpriority(PRIO_PROCESS, getpid());
setpriority(PRIO_PROCESS, getpid(), prio + 10);