typedef void (*do_fd_write_t)(char *, int, void *, char *);
#define do_fd_copy(fd1, fd2, limit, desc...) read_fd_combined(fd1, (void*)fd2, FD_WRITE_FD, limit, desc)
-#define read_fd_vbuf(fd1, buf, limit, desc...) read_fd_combined(fd1, buf, FD_WRITE_BUF, limit, desc)
+#define read_fd_buf(fd1, buf, limit, desc...) read_fd_combined(fd1, buf, FD_WRITE_BUF, limit, desc)
+#define read_fd_vbuf(fd1, buf, limit, desc...) read_fd_combined(fd1, buf, FD_WRITE_VBUF, limit, desc)
int read_fd_combined(int fd, void *buf, int type, int limit, char *desc, ...);
int do_fd_read(int fd1, int limit, do_fd_write_t write_proc, void *proc_data, char *desc);