-c zero: assume zero counter value.
[tfcrypt.git] / tfc_base64.c
index b92ac9676a3bc567aaf97f167201cb1bb1b0e8d0..f1d68f670e9d5c380e210a5446ab79aeeecc3cc2 100644 (file)
@@ -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;
                        }