6 static int allwrite(int (*op
)(),int fd
,const char *buf
,unsigned int len
)
13 if (errno
== error_intr
) continue;
14 return -1; /* note that some data may have been written */
16 if (w
== 0) ; /* luser's fault */
23 int buffer_flush(buffer
*s
)
30 return allwrite(s
->op
,s
->fd
,s
->x
,p
);
33 int buffer_putalign(buffer
*s
,const char *buf
,unsigned int len
)
37 while (len
> (n
= s
->n
- s
->p
)) {
38 byte_copy(s
->x
+ s
->p
,n
,buf
); s
->p
+= n
; buf
+= n
; len
-= n
;
39 if (buffer_flush(s
) == -1) return -1;
41 /* now len <= s->n - s->p */
42 byte_copy(s
->x
+ s
->p
,len
,buf
);
47 int buffer_put(buffer
*s
,const char *buf
,unsigned int len
)
53 if (buffer_flush(s
) == -1) return -1;
55 if (n
< BUFFER_OUTSIZE
) n
= BUFFER_OUTSIZE
;
58 if (allwrite(s
->op
,s
->fd
,buf
,n
) == -1) return -1;
63 /* now len <= s->n - s->p */
64 byte_copy(s
->x
+ s
->p
,len
,buf
);
69 int buffer_putflush(buffer
*s
,const char *buf
,unsigned int len
)
71 if (buffer_flush(s
) == -1) return -1;
72 return allwrite(s
->op
,s
->fd
,buf
,len
);
75 int buffer_putsalign(buffer
*s
,const char *buf
)
77 return buffer_putalign(s
,buf
,str_len(buf
));
80 int buffer_puts(buffer
*s
,const char *buf
)
82 return buffer_put(s
,buf
,str_len(buf
));
85 int buffer_putsflush(buffer
*s
,const char *buf
)
87 return buffer_putflush(s
,buf
,str_len(buf
));