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
84
85
86
87
88
89
90
91
92
93
94
95
|
$NetBSD: patch-aa,v 1.3 2002/04/05 01:33:25 hubertf Exp $
--- xdu.c.orig Sun Jun 5 21:29:23 1994
+++ xdu.c
@@ -19,13 +19,15 @@
* limitation a license to do the foregoing actions under any patents of
* the party supplying this software to the X Consortium.
*/
+#include <assert.h>
#include <stdio.h>
+#include <string.h>
#include "version.h"
extern char *malloc(), *calloc();
-#define MAXDEPTH 80 /* max elements in a path */
-#define MAXNAME 1024 /* max pathname element length */
+#define MAXDEPTH 1024 /* max elements in a path */
+#define MAXNAME 4096 /* max pathname element length */
#define MAXPATH 4096 /* max total pathname length */
#define NCOLS 5 /* default number of columns in display */
@@ -96,6 +98,10 @@
struct node *np;
np = (struct node *)calloc(1,sizeof(struct node));
+ if (np == NULL) {
+ fprintf(stderr, "Out of memory! (#1)\n");
+ exit(1);
+ }
np->name = strdup(name);
np->size = size;
np->num = nnodes;
@@ -232,7 +238,6 @@
char *filename;
{
char buf[4096];
- char name[4096];
int size;
FILE *fp;
@@ -245,9 +250,12 @@
}
}
while (fgets(buf,sizeof(buf),fp) != NULL) {
- sscanf(buf, "%d %s\n", &size, name);
- /*printf("%d %s\n", size, name);*/
- parse_entry(name,size);
+ char *p, *q = NULL;
+ p = strtok_r(buf, " \t", &q);
+ size = atoi(p);
+ p = strtok_r(NULL, "\r\n", &q);
+ /* printf("%d %s\n", size, p); */
+ parse_entry(p,size);
}
fclose(fp);
}
@@ -290,7 +298,12 @@
name++;
}
buf[indx] = 0;
- path[arg++] = strdup(buf);
+ path[arg] = strdup(buf);
+ if (path[arg] == NULL) {
+ fprintf(stderr, "Out of memory! (#3)\n");
+ exit(1);
+ }
+ arg++;
path[arg] = NULL;
addtree(&top,path,size);
@@ -622,6 +635,7 @@
100.0*topp->size/rootp->size);
}
+#ifndef __NetBSD__
char *
strdup(s)
char *s;
@@ -631,10 +645,15 @@
n = strlen(s);
cp = malloc(n+1);
+ if (cp == NULL) {
+ fprintf(stderr, "Out of memory! (#2)\n");
+ exit(1);
+ }
strcpy(cp,s);
return cp;
}
+#endif /* __NetBSD__ */
/**************** External Entry Points ****************/
|