ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/wordfile.c
Revision: 2.2
Committed: Fri Oct 16 13:02:46 1992 UTC (31 years, 6 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.1: +9 -8 lines
Log Message:
increased file size limit

File Contents

# User Rev Content
1 greg 2.1 /* Copyright (c) 1992 Regents of the University of California */
2    
3     #ifndef lint
4     static char SCCSid[] = "$SunId$ LBL";
5     #endif
6    
7     /*
8     * Load whitespace separated words from a file into an array.
9     * Assume the passed pointer array is big enough to hold them all.
10     */
11    
12 greg 2.2 #include <ctype.h>
13    
14 greg 2.1 #define NULL 0
15    
16 greg 2.2 #define MAXFLEN 10240 /* file must be smaller than this */
17 greg 2.1
18     extern char *bmalloc();
19    
20    
21     int
22     wordfile(words, fname) /* get words from fname, put in words */
23     char **words;
24     char *fname;
25     {
26     char **wp = words;
27     int fd;
28     char *buf;
29     register int n;
30     register char *cp;
31     /* allocate memory */
32 greg 2.2 if ((cp = buf = bmalloc(MAXFLEN)) == NULL)
33 greg 2.1 return(-1);
34     if ((fd = open(fname, 0)) < 0)
35     goto err;
36 greg 2.2 n = read(fd, buf, MAXFLEN);
37 greg 2.1 close(fd);
38     if (n < 0)
39     goto err;
40 greg 2.2 if (n == MAXFLEN) /* file too big, take what we can */
41 greg 2.1 while (!isspace(buf[--n]))
42     if (n <= 0)
43     goto err;
44 greg 2.2 bfree(buf+n+1, MAXFLEN-n-1); /* return unneeded memory */
45 greg 2.1 while (n > 0) { /* break buffer into words */
46     while (isspace(*cp)) {
47     cp++;
48     if (--n <= 0)
49     return(wp - words);
50     }
51     *wp++ = cp;
52     while (!isspace(*cp)) {
53     cp++;
54     if (--n <= 0)
55     break;
56     }
57     *cp++ = '\0'; n--;
58     }
59 greg 2.2 *wp = NULL; /* null terminator */
60 greg 2.1 return(wp - words);
61     err:
62 greg 2.2 bfree(buf, MAXFLEN);
63 greg 2.1 return(-1);
64     }