- while ((cc = read(sfd, buf, sizeof(buf))) > 0)
- if ((wcc = write(dfd, buf, cc)) != cc) {
+ rtn = SYSIO_INTERFACE_NAME(fstat)(dfd, &stat);
+ if (rtn != 0) {
+ perror(dpath);
+ goto out;
+ }
+ bufsiz = stat.st_blksize;
+ if (bufsiz < (64 * 1024))
+ bufsiz =
+ (((64 * 1024) / stat.st_blksize - 1) + 1) * (64 * 1024);
+ buf = malloc(bufsiz);
+ if (!buf) {
+ perror(dpath);
+ goto out;
+ }
+
+ while ((cc = SYSIO_INTERFACE_NAME(read)(sfd, buf, bufsiz)) > 0)
+ if ((wcc = SYSIO_INTERFACE_NAME(write)(dfd, buf, cc)) != cc) {