You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/x11-plugins/wmtop/files/wmtop-0.9.0-meminfo.patch

190 lines
5.6 KiB

--- wmtop.c.orig 2001-01-19 15:41:20.000000000 -0600
+++ wmtop.c 2012-03-29 22:36:49.906684353 -0500
@@ -182,12 +182,12 @@
pid_t pid;
char *name;
float amount;
- int user_time;
- int kernel_time;
- int previous_user_time;
- int previous_kernel_time;
- int vsize;
- int rss;
+ unsigned long user_time;
+ unsigned long kernel_time;
+ unsigned long previous_user_time;
+ unsigned long previous_kernel_time;
+ unsigned long vsize;
+ long rss;
int time_stamp;
int counted;
};
@@ -236,8 +236,8 @@
process->pid = p;
process->time_stamp = 0;
- process->previous_user_time = INT_MAX;
- process->previous_kernel_time = INT_MAX;
+ process->previous_user_time = ULONG_MAX;
+ process->previous_kernel_time = ULONG_MAX;
process->counted = 1;
/* process_find_name(process);*/
@@ -256,11 +256,11 @@
void process_cleanup(void);
void delete_process(struct process *);
inline void draw_processes(void);
-int calc_cpu_total(void);
-void calc_cpu_each(int);
+unsigned long calc_cpu_total(void);
+void calc_cpu_each(unsigned long total);
#if defined(LINUX)
-int calc_mem_total(void);
-void calc_mem_each(int);
+unsigned long calc_mem_total(void);
+void calc_mem_each(unsigned long total);
#endif
int process_find_top_three(struct process **);
void draw_bar(int, int, int, int, float, int, int);
@@ -457,13 +457,15 @@
char line[WMTOP_BUFLENGTH],filename[WMTOP_BUFLENGTH],procname[WMTOP_BUFLENGTH];
int ps;
struct stat sbuf;
- int user_time,kernel_time;
+ unsigned long user_time,kernel_time;
int rc;
#if defined(LINUX)
char *r,*q;
char deparenthesised_name[WMTOP_BUFLENGTH];
#endif /* defined(LINUX) */
#if defined(FREEBSD)
+ /* TODO: needs analysis. Probably needs same data type fix as LINUX (use
+ * long types). Need to check FreeBSD docs and test. -wbk */
int us,um,ks,km;
#endif /* defined(FREEBSD) */
@@ -501,9 +503,10 @@
#if defined(LINUX)
/*
- * Extract cpu times from data in /proc filesystem
+ * Extract cpu times from data in /proc filesystem.
+ * For conversion types see man proc(5).
*/
- rc = sscanf(line,"%*s %s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %d %d %*s %*s %*s %*s %*s %*s %*s %d %d",
+ rc = sscanf(line,"%*s %s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %lu %lu %*s %*s %*s %*s %*s %*s %*s %lu %ld",
procname,
&process->user_time,&process->kernel_time,
&process->vsize,&process->rss);
@@ -527,6 +530,9 @@
/*
* Extract cpu times from data in /proc/<pid>/stat
* XXX: Process name extractor for FreeBSD is untested right now.
+ *
+ * [TODO: FREEBSD code probably needs similar data type changes to
+ * those made for LINUX above. Need to check docs. -wbk]
*/
rc = sscanf(line,"%s %*s %*s %*s %*s %*s %*s %*s %d,%d %d,%d",
procname,
@@ -540,11 +546,14 @@
process->kernel_time = ks*1000+km/1000;
#endif /* defined(FREEBSD) */
+ /* not portable (especially unsuitable for redistributable executables.
+ * On some systems, getpagesize() is a preprocessor macro).
+ */
process->rss *= getpagesize();
- if (process->previous_user_time==INT_MAX)
+ if (process->previous_user_time==ULONG_MAX)
process->previous_user_time = process->user_time;
- if (process->previous_kernel_time==INT_MAX)
+ if (process->previous_kernel_time==ULONG_MAX)
process->previous_kernel_time = process->kernel_time;
user_time = process->user_time-process->previous_user_time;
@@ -686,7 +695,7 @@
void draw_processes() {
int i,n;
struct process *best[3] = { 0, 0, 0 };
- int total;
+ unsigned long total;
/*
* Invalidate time stamps
@@ -743,21 +752,21 @@
/* Calculate cpu total */
/******************************************/
-int calc_cpu_total() {
- int total,t;
- static int previous_total = INT_MAX;
+unsigned long calc_cpu_total() {
+ unsigned long total,t;
+ static unsigned long previous_total = ULONG_MAX;
#if defined(LINUX)
int rc;
int ps;
char line[WMTOP_BUFLENGTH];
- int cpu,nice,system,idle;
+ unsigned long cpu,nice,system,idle;
ps = open("/proc/stat",O_RDONLY);
rc = read(ps,line,sizeof(line));
close(ps);
if (rc<0)
return 0;
- sscanf(line,"%*s %d %d %d %d",&cpu,&nice,&system,&idle);
+ sscanf(line,"%*s %lu %lu %lu %lu",&cpu,&nice,&system,&idle);
total = cpu+nice+system+idle;
#endif /* defined(LINUX) */
@@ -780,7 +789,7 @@
/* Calculate each processes cpu */
/******************************************/
-void calc_cpu_each(int total) {
+void calc_cpu_each(unsigned long total) {
struct process *p = first_process;
while (p) {
@@ -798,7 +807,8 @@
/******************************************/
#if defined(LINUX)
-int calc_mem_total() {
+/* INT_MAX won't always hold total system RAM, especially on a 64 bit system. */
+unsigned long calc_mem_total() {
int ps;
char line[512];
char *ptr;
@@ -810,11 +820,12 @@
if (rc<0)
return 0;
- if ((ptr = strstr(line, "Mem:")) == NULL) {
+ if ((ptr = strstr(line, "MemTotal:")) == NULL) {
return 0;
} else {
- ptr += 4;
- return atoi(ptr);
+ ptr += 9; /* move into whitespace */
+ /* wbk - old Mem: Total was bytes. MemTotal: is KB */
+ return (unsigned long)atoi(ptr) * 1024;
}
}
@@ -825,10 +836,10 @@
/******************************************/
#if defined(LINUX)
-void calc_mem_each(int total) {
+void calc_mem_each(unsigned long total) {
struct process *p = first_process;
while (p) {
- p->amount = 100*(float)p->rss/total;
+ p->amount = 100*(double)p->rss/total;
p = p->next;
}
}