ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/ot/readobj2.c
(Generate patch)

Comparing ray/src/ot/readobj2.c (file contents):
Revision 1.3 by greg, Wed Jul 17 13:56:02 1991 UTC vs.
Revision 1.4 by greg, Fri Jul 19 09:29:24 1991 UTC

# Line 90 | Line 90 | int  (*f)();
90                  fscanf(fp, "%*s");
91                  return;
92          }
93 <        if (readfargs(&thisobj.oargs, fp) < 0) {
93 >        if (readfargs(&thisobj.oargs, fp) <= 0) {
94                  sprintf(errmsg, "(%s): bad arguments", name);
95                  objerror(&thisobj, USER, errmsg);
96          }
# Line 116 | Line 116 | int  (*f)();
116                          break;
117                  }
118          freefargs(&thisobj.oargs);
119 }
120
121
122 readfargs(fa, fp)               /* read function arguments from stream */
123 register FUNARGS  *fa;
124 FILE  *fp;
125 {
126        extern char  *strcpy();
127        char  sbuf[MAXSTR];
128        int  n;
129        register int  i;
130
131        if (fscanf(fp, "%d", &n) != 1 || n < 0)
132                return(-1);
133        if (fa->nsargs = n) {
134                fa->sarg = (char **)malloc(n*sizeof(char *));
135                if (fa->sarg == NULL)
136                        goto memerr;
137                for (i = 0; i < fa->nsargs; i++) {
138                        if (fscanf(fp, "%s", sbuf) != 1)
139                                return(-1);
140                        fa->sarg[i] = malloc(strlen(sbuf)+1);
141                        if (fa->sarg[i] == NULL)
142                                goto memerr;
143                        (void)strcpy(fa->sarg[i], sbuf);
144                }
145        } else
146                fa->sarg = NULL;
147        if (fscanf(fp, "%d", &n) != 1 || n < 0)
148                return(-1);
149 #ifdef  IARGS
150        if (fa->niargs = n) {
151                fa->iarg = (long *)malloc(n*sizeof(long));
152                if (fa->iarg == NULL)
153                        goto memerr;
154                for (i = 0; i < n; i++)
155                        if (fscanf(fp, "%ld", &fa->iarg[i]) != 1)
156                                return(-1);
157        } else
158                fa->iarg = NULL;
159 #else
160        if (n != 0)
161                return(-1);
162 #endif
163        if (fscanf(fp, "%d", &n) != 1 || n < 0)
164                return(-1);
165        if (fa->nfargs = n) {
166                fa->farg = (double *)malloc(n*sizeof(double));
167                if (fa->farg == NULL)
168                        goto memerr;
169                for (i = 0; i < n; i++)
170                        if (fscanf(fp, "%lf", &fa->farg[i]) != 1)
171                                return(-1);
172        } else
173                fa->farg = NULL;
174        return(0);
175 memerr:
176        error(SYSTEM, "out of memory in readfargs");
177 }
178
179
180 freefargs(fa)           /* free arguments */
181 register FUNARGS  *fa;
182 {
183        register int  i;
184
185        if (fa->nsargs) {
186                for (i = 0; i < fa->nsargs; i++)
187                        free(fa->sarg[i]);
188                free((char *)fa->sarg);
189        }
190 #ifdef  IARGS
191        if (fa->niargs)
192                free((char *)fa->iarg);
193 #endif
194        if (fa->nfargs)
195                free((char *)fa->farg);
119   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines