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