summaryrefslogtreecommitdiff
blob: c4545d0654c62238cf01ba9a29d4aaf7c7311bea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
diff -Naur wmmemfree-0.7/mem_linux.c wmmemfree-0.7.new/mem_linux.c
--- wmmemfree-0.7/mem_linux.c	2003-03-17 14:23:05.000000000 +0100
+++ wmmemfree-0.7/mem_linux.c	2004-08-28 23:18:56.783772744 +0200
@@ -20,24 +20,48 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
+
+long int mem_total, mem_used, mem_free, mem_buffers, mem_cached;
+long int swp_total, swp_used, swp_free;
 
-long long int mem_total, mem_used, mem_free, mem_shared, mem_buffers, mem_cached;
-long long int swp_total, swp_used, swp_free;
 
 void mem_getfree()
 {
- FILE *file;
+	FILE *memfp;
+
+	static char buf[1024];
+	static char *p_mem_tot=NULL, *p_mem_free, *p_mem_buffers, *p_mem_cache;
+	static char *p_swap_total, *p_swap_free; 
+
+	memfp = fopen("/proc/meminfo", "r");
+	if (!memfp)
+	{
+		perror("/proc/meminfo");
+		exit(1);
+	}
+
+ 	fread_unlocked (buf, 1024, 1, memfp);
+	fclose(memfp);
+
+	if (!p_mem_tot)
+	{
+		p_mem_tot     = strstr(buf, "MemTotal:" ) + 13;
+		p_mem_free    = strstr(buf, "MemFree:"  ) + 13;
+		p_mem_buffers = strstr(buf, "Buffers:"  ) + 13;
+		p_mem_cache   = strstr(buf, "Cached:"   ) + 13;
+		p_swap_total  = strstr(buf, "SwapTotal:") + 13;
+		p_swap_free   = strstr(buf, "SwapFree:" ) + 13;
+	}
+
+	sscanf(p_mem_tot,     "%ld", &mem_total  );
+	sscanf(p_mem_free,    "%ld", &mem_free   );
+	sscanf(p_mem_buffers, "%ld", &mem_buffers);
+	sscanf(p_mem_cache,   "%ld", &mem_cached );
+	sscanf(p_swap_total,  "%ld", &swp_total );
+	sscanf(p_swap_free,   "%ld", &swp_free  );
+
+	mem_used = mem_total - mem_free;
+	swp_used = swp_total - swp_free;
 
- file = fopen("/proc/meminfo", "r");
- if(!file)
- {
-  perror("/proc/meminfo");
-  exit(1);
- }
- while(fgetc(file)!='\n'){}
- fscanf(file, "%*s %Ld %Ld %Ld %Ld %Ld %Ld",
-        &mem_total, &mem_used, &mem_free, &mem_shared, &mem_buffers, &mem_cached);
- fscanf(file, "%*s %Ld %Ld %Ld",
-        &swp_total, &swp_used, &swp_free);
- fclose(file);
 }
diff -Naur wmmemfree-0.7/mem_linux.h wmmemfree-0.7.new/mem_linux.h
--- wmmemfree-0.7/mem_linux.h	2003-03-22 19:51:35.000000000 +0100
+++ wmmemfree-0.7/mem_linux.h	2004-08-28 23:12:19.066235000 +0200
@@ -21,9 +21,9 @@
 #ifndef __MEM_LINUX_H__
 #define __MEM_LINUX_H__
 
-extern long long int mem_total, mem_used;
-extern long long int mem_shared, mem_buffers, mem_cached;
-extern long long int swp_total, swp_used;
+extern long int mem_total, mem_used;
+extern long int mem_buffers, mem_cached;
+extern long int swp_total, swp_used;
 
 void mem_getfree();