/[pengfork]/pengfork/src/buffer.c
ViewVC logotype

Diff of /pengfork/src/buffer.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by chupa, Tue Aug 27 13:00:38 2002 UTC revision 1.3 by chupa, Wed Aug 28 22:32:00 2002 UTC
# Line 25  Line 25 
25  #include <stdlib.h>  #include <stdlib.h>
26  #include <stdio.h>  #include <stdio.h>
27  #include <string.h>  #include <string.h>
28    #include <errno.h>
29    
30  #include "buffer.h"  #include "buffer.h"
31    
# Line 105  buffer_recv (buffer, fd) Line 106  buffer_recv (buffer, fd)
106  {  {
107    int len;    int len;
108    int nread;    int nread;
109    int total;    int total = 0;
110      int total2 = 0;
111      char *p;
112    
113    if (buffer->used >= buffer->size)    if (buffer->used >= buffer->size)
114      return 0;      return 0;
115    
116    len = (buffer->size - buffer->start) - buffer->used;    len = (buffer->size - buffer->start) - buffer->used;
117    nread = read (fd, buffer_end (buffer), len);    p = buffer_end (buffer);
118    total = nread;    do
119    if (total == -1)      {
120          nread = read (fd, p, len);
121          if (nread > 0)
122            {
123            p += nread;
124            total += nread;
125            len -= nread;
126            }
127        }
128      while( nread > 0 && len > 0);
129      buffer_alloc (buffer, total);
130      if (nread == -1 && errno!=EAGAIN )
131      return 0;      return 0;
132    buffer_alloc (buffer, nread);    
133      if (len == 0 && buffer->used < buffer->size)
   if (nread == len && buffer->used < buffer->size)  
134      {      {
135        buffer_align (buffer);        buffer_align (buffer);
136        len = buffer->size - buffer->used;        len = buffer->size - buffer->used;
137        nread = read (fd, buffer_end (buffer), len);        p = buffer_end (buffer);
138        if (nread == -1)        do
139            {
140            nread = read (fd, p, len);
141            if (nread > 0)
142              {
143                p+=nread;
144                total2 += nread;
145                len -= nread;
146              }
147            }
148          while(nread > 0 && len > 0);
149          buffer_alloc (buffer, total2);
150          if (nread == -1 && errno!=EAGAIN )
151          return 0;          return 0;
152        total += nread;        total+=total2;
       buffer_alloc (buffer, nread);  
153      }      }
154    
155    printf ("%d bytes received\n", total);    printf ("%d bytes received\n", total);
156    return 1;    return 1;
157  }  }
# Line 138  buffer_send (buffer, fd) Line 163  buffer_send (buffer, fd)
163  {  {
164    int len;    int len;
165    int nwrote;    int nwrote;
166      int total=0;
167      char *p;
168    
169      len = buffer->used;
170      p= buffer_start(buffer);
171      do
172        {
173          nwrote = write (fd, p, len);
174          if(nwrote>0)
175            {
176            p+=nwrote;
177            total+=nwrote;
178            len-=nwrote;
179            }
180        }
181      while(nwrote>0 && len>0);
182    
183    len = (buffer->used);    if (nwrote == -1 && errno!=EAGAIN )
   nwrote = write (fd, buffer->data + buffer->start, buffer->used);  
   if (nwrote == -1)  
184      return 0;      return 0;
   buffer_free (buffer, nwrote);  
185    
186    printf ("%d bytes sended\n", nwrote);    buffer_free (buffer, total);
187    
188      printf ("%d bytes sended\n", total);
189    return 1;    return 1;
190  }  }
191    
# Line 158  buffer_align (buffer) Line 198  buffer_align (buffer)
198      memmove (buffer->data, buffer->data + buffer->start, buffer->used);      memmove (buffer->data, buffer->data + buffer->start, buffer->used);
199    buffer->start = 0;    buffer->start = 0;
200  }  }
201    
202    int
203    buffer_percent_free (buffer)
204         buffer_t *buffer;
205    {
206      return ((buffer->size - buffer->used) * 100)/buffer->size;
207    }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26