ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/wordfile.c
Revision: 2.4
Committed: Tue Nov 3 19:34:00 1992 UTC (31 years, 6 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.3: +9 -8 lines
Log Message:
bug fix in wordstring()

File Contents

# Content
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 #include <ctype.h>
13
14 #define NULL 0
15
16 #define MAXFLEN 8192 /* file must be smaller than this */
17
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 int fd;
27 char buf[MAXFLEN];
28 register int n;
29 /* load file into buffer */
30 if ((fd = open(fname, 0)) < 0)
31 return(-1); /* open error */
32 n = read(fd, buf, MAXFLEN);
33 close(fd);
34 if (n < 0) /* read error */
35 return(-1);
36 if (n == MAXFLEN) /* file too big, take what we can */
37 while (!isspace(buf[--n]))
38 if (n <= 0) /* one long word! */
39 return(-1);
40 buf[n] = '\0'; /* terminate */
41 return(wordstring(words, buf)); /* wordstring does the rest */
42 }
43
44
45 int
46 wordstring(avl, str) /* allocate and load argument list */
47 char **avl;
48 char *str;
49 {
50 register char *cp, **ap;
51
52 if (str == NULL)
53 return(-1);
54 cp = bmalloc(strlen(str)+1);
55 if (cp == NULL) /* ENOMEM */
56 return(-1);
57 strcpy(cp, str);
58 ap = avl; /* parse into words */
59 for ( ; ; ) {
60 while (isspace(*cp)) /* nullify spaces */
61 *cp++ = '\0';
62 if (!*cp) /* all done? */
63 break;
64 *ap++ = cp; /* add argument to list */
65 while (*cp && !isspace(*cp++))
66 ;
67 }
68 *ap = NULL;
69 return(ap - avl);
70 }