X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=tfc_base64.c;h=f1d68f670e9d5c380e210a5446ab79aeeecc3cc2;hb=347d23692d3a723b69b022d0e2f6cd9ecb388d1c;hp=b92ac9676a3bc567aaf97f167201cb1bb1b0e8d0;hpb=efa545d64b910923248233618e774ca3b87efebb;p=tfcrypt.git diff --git a/tfc_base64.c b/tfc_base64.c index b92ac96..f1d68f6 100644 --- a/tfc_base64.c +++ b/tfc_base64.c @@ -68,7 +68,8 @@ void do_edbase64(char **fargv) pblk = srcblk; lblock = lrem = do_edcrypt == TFC_DO_DECRYPT ? TFC_B64_DWIDTH : TFC_B64_EWIDTH; ldone = 0; -_again: lio = read(sfd, pblk, lrem); + if (error_action == TFC_ERRACT_SYNC) rdpos = tfc_fdgetpos(sfd); +_again: lio = xread(sfd, pblk, lrem); if (lio == 0) do_stop = YES; if (lio != NOSIZE) ldone += lio; else { @@ -77,10 +78,12 @@ _again: lio = read(sfd, pblk, lrem); switch (error_action) { case TFC_ERRACT_CONT: xerror(YES, NO, NO, "%s", fargv[0]); goto _again; break; case TFC_ERRACT_SYNC: + case TFC_ERRACT_LSYNC: xerror(YES, NO, NO, "%s", fargv[0]); lio = ldone = lrem = lblock; memset(srcblk, 0, lio); - lseek(sfd, lio, SEEK_CUR); + if (rdpos == NOFSIZE) lseek(sfd, lio, SEEK_CUR); + else lseek(sfd, rdpos + lio, SEEK_SET); break; default: xerror(NO, NO, NO, "%s", fargv[0]); break; } @@ -110,13 +113,13 @@ _again: lio = read(sfd, pblk, lrem); } lrem = ldone; ldone = 0; -_wagain: lio = write(dfd, pblk, lrem); +_wagain: lio = xwrite(dfd, pblk, lrem); if (lio != NOSIZE) ldone += lio; else xerror(NO, NO, NO, "%s", fargv[1]); if (do_edcrypt == TFC_DO_ENCRYPT) { size_t t; if (lread >= lblock || do_stop == TFC_STOP_FULL) { - t = write(dfd, "\n", 1); + t = xwrite(dfd, "\n", 1); if (t != NOSIZE) lio += t; else lio = NOSIZE; }