$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 #include +#include #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 ****************/