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; |