Make count=0 set cpy_cnt to -1, which is slight overloading, but makes

what I was trying to do work much better (ie at all.  I could have sworn
it was working...) Fix a SEEK_SET to be SEEK_CUR, and make Bruce's
lseek() test work correctly.
This commit is contained in:
Brian Feldman 1999-09-16 19:50:59 +00:00
parent 848f4ae4fb
commit 5ff6541e7a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=51335
3 changed files with 18 additions and 5 deletions

View File

@ -209,6 +209,8 @@ f_count(arg)
cpy_cnt = get_num(arg);
if (cpy_cnt < 0)
errx(1, "count cannot be negative");
if (cpy_cnt == 0)
cpy_cnt = -1;
}
static void

View File

@ -225,10 +225,13 @@ getfdtype(io)
if (S_ISCHR(sb.st_mode) && (type & D_TAPE) == 0)
io->flags |= ISCHR;
}
} else if (lseek(io->fd, (off_t)0, SEEK_CUR) == 0)
io->flags |= ISSEEK;
else if (errno == ESPIPE)
return;
}
errno = 0;
if (lseek(io->fd, (off_t)0, SEEK_CUR) == -1 && errno == ESPIPE)
io->flags |= ISPIPE;
else
io->flags |= ISSEEK;
}
static void
@ -237,8 +240,16 @@ dd_in()
ssize_t n;
for (;;) {
if (cpy_cnt && (st.in_full + st.in_part) >= cpy_cnt)
switch (cpy_cnt) {
case -1: /* count=0 was specified */
return;
case 0:
break;
default:
if (st.in_full + st.in_part >= cpy_cnt)
return;
break;
}
/*
* Zero the buffer first if sync; if doing block operations,

View File

@ -132,7 +132,7 @@ pos_out()
*/
if (!(out.flags & ISTAPE)) {
errno = 0;
if (lseek(out.fd, out.offset * out.dbsz, SEEK_SET) == -1 &&
if (lseek(out.fd, out.offset * out.dbsz, SEEK_CUR) == -1 &&
errno != 0)
err(1, "%s", out.name);
return;