Howdy Y'all, Heres a little patch against e16/epplets/E-MemWatch.c to make it work properly with 2.6 Kernels.
elemental0125
--- E-MemWatch.c.~1.15.~ Wed Jan 5 16:24:00 2000
+++ E-MemWatch.c Mon Mar 15 20:12:29 2004
@@ -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 @@
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 @@
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 @@
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 @@
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);
signature.asc
Description: This is a digitally signed message part
