1 |
vip-ire |
1.1 |
diff -Nur -x '*.orig' -x '*.rej' cpu-1.4.3/src/util/parser.c mezzanine_patched_cpu-1.4.3/src/util/parser.c |
2 |
|
|
--- cpu-1.4.3/src/util/parser.c 2003-10-22 17:17:15.000000000 -0400 |
3 |
|
|
+++ mezzanine_patched_cpu-1.4.3/src/util/parser.c 2007-07-24 15:17:47.000000000 -0400 |
4 |
|
|
@@ -57,6 +57,8 @@ |
5 |
|
|
{ |
6 |
|
|
int fd = 0; |
7 |
|
|
ssize_t retval = 0; |
8 |
|
|
+ ssize_t nread; |
9 |
|
|
+ ssize_t bufsize; |
10 |
|
|
void * temp; |
11 |
|
|
struct stat buf; |
12 |
|
|
|
13 |
|
|
@@ -75,14 +77,31 @@ |
14 |
|
|
return NULL; |
15 |
|
|
} |
16 |
|
|
|
17 |
|
|
- temp = malloc(buf.st_size); |
18 |
|
|
- if ( temp == NULL ) |
19 |
|
|
- return NULL; |
20 |
|
|
- bzero(temp, buf.st_size); |
21 |
|
|
- |
22 |
|
|
- retval = read(fd, temp, buf.st_size); |
23 |
|
|
+ for (nread = 0, temp = NULL, bufsize = 4096; ;bufsize *= 2) |
24 |
|
|
+ { |
25 |
|
|
+ void *temp2; |
26 |
|
|
+ ssize_t rbufsize; |
27 |
|
|
+ temp2 = malloc(bufsize); |
28 |
|
|
+ if ( temp2 == NULL ) |
29 |
|
|
+ { |
30 |
|
|
+ perror(filename); |
31 |
|
|
+ return NULL; |
32 |
|
|
+ } |
33 |
|
|
+ bzero(temp2, bufsize); |
34 |
|
|
+ if (temp) |
35 |
|
|
+ { |
36 |
|
|
+ memcpy(temp2, temp, nread); |
37 |
|
|
+ free(temp); |
38 |
|
|
+ } |
39 |
|
|
+ temp = temp2; |
40 |
|
|
+ rbufsize = bufsize - nread; |
41 |
|
|
+ retval = read(fd, temp+nread, rbufsize); |
42 |
|
|
+ nread += retval; |
43 |
|
|
+ if (retval < rbufsize) |
44 |
|
|
+ break; |
45 |
|
|
+ } |
46 |
|
|
close(fd); |
47 |
|
|
- if ( retval != buf.st_size ) |
48 |
|
|
+ if (buf.st_size && nread != buf.st_size ) |
49 |
|
|
printf("Hmm, didn't read all wanted data. Continuing\n"); |
50 |
|
|
if ( retval < 0 ) |
51 |
|
|
return NULL; |