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:
parent
848f4ae4fb
commit
5ff6541e7a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=51335
@ -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
|
||||
|
19
bin/dd/dd.c
19
bin/dd/dd.c
@ -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,
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user