3
# DP: Owerflow in the network load indicator
7
echo >&2 "$0: script expects -patch|-unpatch as argument"
11
-patch) patch -f -p0 < $0;;
12
-unpatch) patch -f -R -p0 < $0;;
14
echo >&2 "$0: script expects -patch|-unpatch as argument"
19
--- src/apppstatus.cc.orig
25
- char const * const sizeUnits[] = { "b", "kb", "Mb", "Gb", "Tb", NULL };
26
- char const * const rateUnits[] = { "bps", "kps", "Mps", NULL };
27
+ char const * const sizeUnits[] = { "b", "KiB", "MiB", "GiB", "TiB", NULL };
28
+ char const * const rateUnits[] = { "Bps", "Kps", "Mps", NULL };
30
int const t(time(NULL) - start_time);
32
- int vi(cur_ibytes - start_ibytes);
33
- int vo(cur_obytes - start_obytes);
34
+ long long vi(cur_ibytes - start_ibytes);
35
+ long long vo(cur_obytes - start_obytes);
37
- int ci(ppp_in[NET_SAMPLES - 1]);
38
- int co(ppp_out[NET_SAMPLES - 1]);
39
+ long long ci(ppp_in[NET_SAMPLES - 1]);
40
+ long long co(ppp_out[NET_SAMPLES - 1]);
42
- int ai(t ? vi / t : 0);
43
- int ao(t ? vo / t : 0);
44
+ long long ai(t ? vi / t : 0);
45
+ long long ao(t ? vo / t : 0);
47
const char * const viUnit(niceUnit(vi, sizeUnits));
48
const char * const voUnit(niceUnit(vo, sizeUnits));
51
snprintf(status, sizeof(status),
53
- " Current rate (in/out):\t%d %s/%d %s\n"
54
- " Average rate (in/out):\t%d %s/%d %s\n"
55
- " Transferred (in/out):\t%d %s/%d %s\n"
56
+ " Current rate (in/out):\t%lli %s/%lli %s\n"
57
+ " Average rate (in/out):\t%lli %s/%lli %s\n"
58
+ " Transferred (in/out):\t%lli %s/%lli %s\n"
59
" Online time:\t%d:%02d:%02d"
63
void NetStatus::paint(Graphics &g, int /*x*/, int /*y*/,
64
unsigned int /*width*/, unsigned int /*height*/ )
69
//!!! this should really be unified with acpustatus.cc
70
for (int i = 0; i < NET_SAMPLES; i++) {
72
- int in = (h * ppp_in[i] + maxBytes - 1) / maxBytes;
73
- int out = (h * ppp_out[i] + maxBytes - 1) / maxBytes;
76
+ long long in = (h * ppp_in[i] + maxBytes - 1) / maxBytes;
77
+ long long out = (h * ppp_out[i] + maxBytes - 1) / maxBytes;
78
+ long long t = h - in - 1;
81
//msg("in: %d:%d:%d, out: %d:%d:%d", in, t, ppp_in[i], out, l, ppp_out[i]);
89
int f = open("/dev/isdninfo", O_RDONLY);
93
char buffer[32 * sizeof(struct ifreq)];
105
-void NetStatus::getCurrent(int *in, int *out, int *tot) {
106
+void NetStatus::getCurrent(long long *in, long long *out, long long *tot) {
108
struct ifpppstatsreq req; // from <net/if_ppp.h> in the linux world
110
@@ -428,24 +428,24 @@
111
if (strncmp(p, fNetDev, strlen(fNetDev)) == 0 &&
112
p[strlen(fNetDev)] == ':')
114
- int ipackets, opackets;
123
+ long long ipackets, opackets;
124
+ long long ierrs, oerrs;
125
+ long long idrop, odrop;
126
+ long long ififo, ofifo;
129
+ long long ocarrier;
130
+ long long icomp, ocomp;
133
p = strchr(p, ':') + 1;
135
- if (sscanf(p, "%lu %d %d %d %d %d %d %d" " %lu %d %d %d %d %d %d %d",
136
+ if (sscanf(p, "%llu %lld %lld %lld %lld %lld %lld %lld" " %llu %lld %lld %lld %lld %lld %lld %lld",
137
&cur_ibytes, &ipackets, &ierrs, &idrop, &ififo, &iframe, &icomp, &imcast,
138
&cur_obytes, &opackets, &oerrs, &odrop, &ofifo, &ocolls, &ocarrier, &ocomp) != 16)
140
ipackets = opackets = 0;
141
- sscanf(p, "%d %d %d %d %d" " %d %d %d %d %d %d",
142
+ sscanf(p, "%lld %lld %lld %lld %lld" " %lld %lld %lld %lld %lld %lld",
143
&ipackets, &ierrs, &idrop, &ififo, &iframe,
144
&opackets, &oerrs, &odrop, &ofifo, &ocolls, &ocarrier);
145
// for linux<2.0 fake packets as bytes (we only need relative values anyway)
147
double delta_t = (double) ((curr_time.tv_sec - prev_time.tv_sec) * 1000000L
148
+ (curr_time.tv_usec - prev_time.tv_usec)) / 1000000.0;
150
- int ni = (int)((cur_ibytes - prev_ibytes) / delta_t);
151
- int no = (int)((cur_obytes - prev_obytes) / delta_t);
152
+ long long ni = (long long)((cur_ibytes - prev_ibytes) / delta_t);
153
+ long long no = (long long)((cur_obytes - prev_obytes) / delta_t);
155
//msg("%d %d", ni, no);
157
--- src/apppstatus.h.orig
160
YTimer *fUpdateTimer;
163
- int ppp_in[NET_SAMPLES];
164
- int ppp_out[NET_SAMPLES];
165
- int ppp_tot[NET_SAMPLES];
166
+ long long ppp_in[NET_SAMPLES];
167
+ long long ppp_out[NET_SAMPLES];
168
+ long long ppp_tot[NET_SAMPLES];
170
- unsigned long prev_ibytes, start_ibytes, cur_ibytes;
171
- unsigned long prev_obytes, start_obytes, cur_obytes;
172
+ unsigned long long prev_ibytes, start_ibytes, cur_ibytes;
173
+ unsigned long long prev_obytes, start_obytes, cur_obytes;
178
// methods local to this class
181
- void getCurrent(int *in, int *out, int *tot);
182
+ void getCurrent(long long *in, long long *out, long long *tot);
184
void updateToolTip();