Author: ivoras
Date: Mon Oct  3 21:48:10 2011
New Revision: 225954
URL: http://svn.freebsd.org/changeset/base/225954

Log:
  Don't chop IO into small pieces, follow cp(1) and just use MAXPHYS.

Modified:
  head/bin/mv/mv.c

Modified: head/bin/mv/mv.c
==============================================================================
--- head/bin/mv/mv.c    Mon Oct  3 21:19:15 2011        (r225953)
+++ head/bin/mv/mv.c    Mon Oct  3 21:48:10 2011        (r225954)
@@ -260,40 +260,34 @@ static int
 fastcopy(const char *from, const char *to, struct stat *sbp)
 {
        struct timeval tval[2];
-       static u_int blen;
-       static char *bp;
+       static u_int blen = MAXPHYS;
+       static char *bp = NULL;
        mode_t oldmode;
        int nread, from_fd, to_fd;
 
        if ((from_fd = open(from, O_RDONLY, 0)) < 0) {
-               warn("%s", from);
+               warn("fastcopy: open() failed (from): %s", from);
                return (1);
        }
-       if (blen < sbp->st_blksize) {
-               if (bp != NULL)
-                       free(bp);
-               if ((bp = malloc((size_t)sbp->st_blksize)) == NULL) {
-                       blen = 0;
-                       warnx("malloc failed");
-                       return (1);
-               }
-               blen = sbp->st_blksize;
+       if (bp == NULL && (bp = malloc((size_t)blen)) == NULL) {
+               warnx("malloc(%u) failed", blen);
+               return (1);
        }
        while ((to_fd =
            open(to, O_CREAT | O_EXCL | O_TRUNC | O_WRONLY, 0)) < 0) {
                if (errno == EEXIST && unlink(to) == 0)
                        continue;
-               warn("%s", to);
+               warn("fastcopy: open() failed (to): %s", to);
                (void)close(from_fd);
                return (1);
        }
        while ((nread = read(from_fd, bp, (size_t)blen)) > 0)
                if (write(to_fd, bp, (size_t)nread) != nread) {
-                       warn("%s", to);
+                       warn("fastcopy: write() failed: %s", to);
                        goto err;
                }
        if (nread < 0) {
-               warn("%s", from);
+               warn("fastcopy: read() failed: %s", from);
 err:           if (unlink(to))
                        warn("%s: remove", to);
                (void)close(from_fd);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to