| 402 |
|
/* read each ray request set */ |
| 403 |
|
while ((n = read(fd_in, (char *)r_queue, sizeof(r_queue))) > 0) { |
| 404 |
|
int n2; |
| 405 |
< |
if (n % sizeof(RAY)) |
| 405 |
> |
if (n < sizeof(RAY)) |
| 406 |
|
break; |
| 407 |
– |
n /= sizeof(RAY); |
| 407 |
|
/* get smuggled set length */ |
| 408 |
< |
n2 = r_queue[0].crtype - n; |
| 408 |
> |
n2 = sizeof(RAY)*r_queue[0].crtype - n; |
| 409 |
|
if (n2 < 0) |
| 410 |
|
error(INTERNAL, "buffer over-read in ray_pchild"); |
| 411 |
|
if (n2 > 0) { /* read the rest of the set */ |
| 412 |
< |
i = readbuf(fd_in, (char *)(r_queue+n), |
| 413 |
< |
sizeof(RAY)*n2); |
| 415 |
< |
if (i != sizeof(RAY)*n2) |
| 412 |
> |
i = readbuf(fd_in, (char *)r_queue + n, n2); |
| 413 |
> |
if (i != n2) |
| 414 |
|
break; |
| 415 |
|
n += n2; |
| 416 |
|
} |
| 417 |
+ |
n /= sizeof(RAY); |
| 418 |
|
/* evaluate rays */ |
| 419 |
|
for (i = 0; i < n; i++) { |
| 420 |
|
r_queue[i].crtype = r_queue[i].rtype; |