ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/wordfile.c
Revision: 2.10
Committed: Sat Jun 7 12:50:21 2003 UTC (20 years, 10 months ago) by schorsch
Content type: text/plain
Branch: MAIN
Changes since 2.9: +12 -2 lines
Log Message:
Various small changes to reduce compile warnings/errors on Windows.

File Contents

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id: wordfile.c,v 2.9 2003/02/25 02:47:22 greg Exp $";
3 #endif
4 /*
5 * Load whitespace separated words from a file into an array.
6 * Assume the passed pointer array is big enough to hold them all.
7 *
8 * External symbols declared in standard.h
9 */
10
11 #include "copyright.h"
12
13 #include <ctype.h>
14 #include <string.h>
15 #include <stdio.h>
16 #include <sys/types.h>
17 #include <sys/stat.h>
18 #include <fcntl.h>
19
20 #ifdef _WIN32
21 #include <io.h>
22 #endif
23
24 #include "standard.h"
25
26
27 #define MAXFLEN 8192 /* file must be smaller than this */
28
29 extern char *bmalloc();
30
31
32 int
33 wordfile(words, fname) /* get words from fname, put in words */
34 char **words;
35 char *fname;
36 {
37 int fd;
38 char buf[MAXFLEN];
39 register int n;
40 /* load file into buffer */
41 if (fname == NULL)
42 return(-1); /* no filename */
43 if ((fd = open(fname, 0)) < 0)
44 return(-1); /* open error */
45 n = read(fd, buf, MAXFLEN);
46 close(fd);
47 if (n < 0) /* read error */
48 return(-1);
49 if (n == MAXFLEN) /* file too big, take what we can */
50 while (!isspace(buf[--n]))
51 if (n <= 0) /* one long word! */
52 return(-1);
53 buf[n] = '\0'; /* terminate */
54 return(wordstring(words, buf)); /* wordstring does the rest */
55 }
56
57
58 int
59 wordstring(avl, str) /* allocate and load argument list */
60 char **avl;
61 char *str;
62 {
63 register char *cp, **ap;
64
65 if (str == NULL)
66 return(-1);
67 cp = bmalloc(strlen(str)+1);
68 if (cp == NULL) /* ENOMEM */
69 return(-1);
70 strcpy(cp, str);
71 ap = avl; /* parse into words */
72 for ( ; ; ) {
73 while (isspace(*cp)) /* nullify spaces */
74 *cp++ = '\0';
75 if (!*cp) /* all done? */
76 break;
77 *ap++ = cp; /* add argument to list */
78 while (*++cp && !isspace(*cp))
79 ;
80 }
81 *ap = NULL;
82 return(ap - avl);
83 }