pblk = skblk;
lblock = lrem = blk_len_adj(readto, total, TFC_BLKSIZE);
ldone = 0;
-_again: lio = read(fd, pblk, lrem);
+ if (error_action == TFC_ERRACT_SYNC) rdpos = tfc_fdgetpos(fd);
+_again: lio = xread(fd, pblk, lrem);
if (lio == 0) stop = YES;
if (lio != NOSIZE) ldone += lio;
else {
switch (error_action) {
case TFC_ERRACT_CONT: xerror(YES, NO, NO, "skeinfd: %d", fd); goto _again; break;
case TFC_ERRACT_SYNC:
+ case TFC_ERRACT_LSYNC:
xerror(YES, NO, NO, "skeinfd: %d", fd);
lio = lrem = ldone = lblock;
total += lio;
memset(skblk, 0, lio);
- lseek(fd, lio, SEEK_CUR);
+ if (rdpos == NOFSIZE) lseek(fd, lio, SEEK_CUR);
+ else lseek(fd, rdpos + lio, SEEK_SET);
break;
default: goto _fail; break;
}
for (y = 0; y < sksum_turns; y++) skein(hash, bits, mackey_opt ? mackey : NULL, hash, TF_FROM_BITS(bits));
}
if (do_outfmt == TFC_OUTFMT_B64) tfc_printbase64(stdout, hash, TF_FROM_BITS(bits), 0);
- else if (do_outfmt == TFC_OUTFMT_RAW) write(1, hash, TF_FROM_BITS(bits));
+ else if (do_outfmt == TFC_OUTFMT_RAW) xwrite(1, hash, TF_FROM_BITS(bits));
else mhexdump(hash, TF_FROM_BITS(bits), TF_FROM_BITS(bits), 0);
if (do_outfmt != TFC_OUTFMT_RAW) {
if (quiet == NO || xx > 1) tfc_say("\t%s", fargv[x] ? fargv[x] : "-");