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

Comparing ray/src/util/rcollate.c (file contents):
Revision 2.4 by greg, Fri Sep 6 21:34:39 2013 UTC vs.
Revision 2.8 by greg, Fri Feb 21 13:49:00 2014 UTC

# Line 6 | Line 6 | static const char RCSid[] = "$Id$";
6   */
7  
8   #include <stdlib.h>
9 #include <unistd.h>
9   #include <string.h>
10   #include <ctype.h>
11   #include "platform.h"
12   #include "rtio.h"
13   #include "resolu.h"
14 < #ifndef _WIN32
14 > #ifdef _WIN32
15 > #undef ftello
16 > #define ftello  ftell
17 > #undef ssize_t
18 > #define ssize_t size_t
19 > #else
20   #include <sys/mman.h>
21   #endif
22  
# Line 99 | Line 103 | load_file(MEMLOAD *mp, FILE *fp)
103   static int
104   load_stream(MEMLOAD *mp, FILE *fp)
105   {
106 +        size_t  alloced = 0;
107          char    buf[8192];
108          size_t  nr;
109  
# Line 110 | Line 115 | load_stream(MEMLOAD *mp, FILE *fp)
115          if (fp == NULL)
116                  return(-1);
117          while ((nr = fread(buf, 1, sizeof(buf), fp)) > 0) {
118 <                if (!mp->len)
118 >                if (!alloced)
119                          mp->base = malloc(nr);
120 <                else
121 <                        mp->base = realloc(mp->base, mp->len+nr);
120 >                else if (mp->len+nr > alloced)
121 >                        mp->base = realloc(mp->base,
122 >                                alloced = alloced*(2+(nr==sizeof(buf)))/2+nr);
123                  if (mp->base == NULL)
124                          return(-1);
125                  memcpy((char *)mp->base + mp->len, buf, nr);
# Line 123 | Line 129 | load_stream(MEMLOAD *mp, FILE *fp)
129                  free_load(mp);
130                  return(-1);
131          }
132 +        if (alloced > mp->len*5/4)      /* don't waste too much space */
133 +                mp->base = realloc(mp->base, mp->len);
134          return(mp->len > 0);
135   }
136  
# Line 274 | Line 282 | do_transpose(const MEMLOAD *mp)
282          RECINDEX                *rp = NULL;
283          long                    nrecords;
284          int                     i, j;
285 +                                                /* propogate sizes */
286 +        if (ni_rows <= 0)
287 +                ni_rows = no_columns;
288 +        if (ni_columns <= 0)
289 +                ni_columns = no_rows;
290                                                  /* get # records (& index) */
291          if (record_width > 0) {
292                  if ((rp = index_records(mp, record_width)) == NULL)
# Line 291 | Line 304 | do_transpose(const MEMLOAD *mp)
304          } else
305                  nrecords = mp->len / -record_width;
306                                                  /* check sizes */
294        if (ni_rows <= 0)
295                ni_rows = no_columns;
296        if (ni_columns <= 0)
297                ni_columns = no_rows;
307          if ((ni_rows <= 0) & (ni_columns > 0))
308                  ni_rows = nrecords/ni_columns;
309          if ((ni_columns <= 0) & (ni_rows > 0))

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines