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

Comparing ray/src/common/portio.c (file contents):
Revision 2.22 by greg, Mon Jul 15 21:27:25 2019 UTC vs.
Revision 2.26 by greg, Fri Feb 19 18:00:29 2021 UTC

# Line 14 | Line 14 | static const char      RCSid[] = "$Id$";
14   #include <math.h>
15  
16  
17 < void
17 > int
18   putstr(                         /* write null-terminated string to fp */
19          char  *s,
20          FILE  *fp
# Line 23 | Line 23 | putstr(                                /* write null-terminated string to fp */
23          do
24                  putc(*s, fp);
25          while (*s++);
26 +
27 +        return(ferror(fp) ? EOF : 0);
28   }
29  
30  
31 < void
31 > int
32   putint(                         /* write a siz-byte integer to fp */
33          long  i,
34          int  siz,
35          FILE  *fp
36   )
37   {
38 +        while (siz > sizeof(long)) {
39 +                putc((i<0)*0xff, fp);
40 +                siz--;
41 +        }
42          siz <<= 3;
43          while ((siz -= 8) > 0)
44                  putc((int)(i>>siz & 0xff), fp);
45 <        putc((int)(i & 0xff), fp);
45 >
46 >        return(putc((int)(i & 0xff), fp) == EOF ? EOF : 0);
47   }
48  
49  
50 < void
50 > int
51   putflt(                         /* put out floating point number */
52          double  f,
53          FILE  *fp
# Line 58 | Line 65 | putflt(                                /* put out floating point number */
65                  e = 0;
66          }
67          putint(m, 4, fp);
68 <        putint(e, 1, fp);
68 >        return(putint(e, 1, fp));
69   }
70  
71  
72 < int
72 > size_t
73   putbinary(                      /* fwrite() replacement for small objects */
74          const void *p,
75 <        int elsiz,
76 <        int nel,
75 >        size_t elsiz,
76 >        size_t nel,
77          FILE *fp)
78   {
79          const char      *s = (const char *)p;
80 <        int             nbytes = elsiz*nel;
80 >        size_t          nbytes = elsiz*nel;
81  
82          if (nbytes > 128)
83                  return(fwrite(p, elsiz, nel, fp));
# Line 112 | Line 119 | getint(                                /* get a siz-byte integer */
119  
120          if ((c = getc(fp)) == EOF)
121                  return(EOF);
122 <        r = 0x80&c ? -1<<8|c : c;               /* sign extend */
122 >        r = c;
123 >        if (c & 0x80)           /* sign extend? */
124 >                r |= -256L;
125          while (--siz > 0) {
126                  if ((c = getc(fp)) == EOF)
127                          return(EOF);
# Line 143 | Line 152 | getflt(                                /* get a floating point number */
152   }
153  
154  
155 < int
155 > size_t
156   getbinary(                      /* fread() replacement for small objects */
157          void *p,
158 <        int elsiz,
159 <        int nel,
158 >        size_t elsiz,
159 >        size_t nel,
160          FILE *fp)
161   {
162          char    *s = (char *)p;
163 <        int     nbytes = elsiz*nel;
163 >        size_t  nbytes = elsiz*nel;
164          int     c;
165  
166          if (nbytes > 128)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines