51 broke -E logic completely, rewise it
[tfcrypt.git] / tfc_base64.c
index f1d68f670e9d5c380e210a5446ab79aeeecc3cc2..10b8f1a3ade7ca4d7ef40e8a8b7daf07f2bc760f 100644 (file)
@@ -2,7 +2,7 @@
  * tfcrypt -- high security Threefish encryption tool.
  *
  * tfcrypt is copyrighted:
- * Copyright (C) 2012-2018 Andrey Rys. All rights reserved.
+ * Copyright (C) 2012-2019 Andrey Rys. All rights reserved.
  *
  * tfcrypt is licensed to you under the terms of std. MIT/X11 license:
  *
@@ -28,6 +28,8 @@
 
 #include "tfcrypt.h"
 
+enum { TFB64_STOP1 = 1, TFB64_STOPF };
+
 void do_edbase64(char **fargv)
 {
        struct base64_decodestate dstate;
@@ -39,7 +41,7 @@ void do_edbase64(char **fargv)
        if (fargv[0]) {
                if (!strcmp(fargv[0], "-")) sfd = 0;
                else {
-                       sfd = open(fargv[0], O_RDONLY | O_LARGEFILE);
+                       sfd = xopen(fargv[0], O_RDONLY | O_LARGEFILE);
                        if (do_preserve_time) if (fstat(sfd, &s_stat) == -1)
                                xerror(YES, NO, YES, "stat(%s)", fargv[0]);
                }
@@ -48,8 +50,7 @@ void do_edbase64(char **fargv)
 
        if (fargv[0] && fargv[1]) {
                if (!strcmp(fargv[1], "-")) dfd = 1;
-               else dfd = open(fargv[1], O_WRONLY | O_CREAT | O_LARGEFILE | write_flags, 0666);
-               if (dfd == -1) xerror(NO, NO, YES, "%s", fargv[1]);
+               else dfd = xopen(fargv[1], O_WRONLY | O_CREAT | O_LARGEFILE | write_flags);
        }
 
        if (do_edcrypt == TFC_DO_ENCRYPT) {
@@ -70,7 +71,7 @@ void do_edbase64(char **fargv)
                ldone = 0;
                if (error_action == TFC_ERRACT_SYNC) rdpos = tfc_fdgetpos(sfd);
 _again:                lio = xread(sfd, pblk, lrem);
-               if (lio == 0) do_stop = YES;
+               if (lio == 0) do_stop = TFB64_STOP1;
                if (lio != NOSIZE) ldone += lio;
                else {
                        if (errno != EIO && catch_all_errors != YES)
@@ -108,7 +109,7 @@ _again:             lio = xread(sfd, pblk, lrem);
 
                pblk = dstblk;
                if (ldone == 0) {
-                       do_stop = TFC_STOP_FULL;
+                       do_stop = TFB64_STOPF;
                        break;
                }
                lrem = ldone;
@@ -118,7 +119,7 @@ _wagain:    lio = xwrite(dfd, pblk, lrem);
                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) {
+                       if (lread >= lblock || do_stop == TFB64_STOPF) {
                                t = xwrite(dfd, "\n", 1);
                                if (t != NOSIZE) lio += t;
                                else lio = NOSIZE;
@@ -134,19 +135,18 @@ _wagain:  lio = xwrite(dfd, pblk, lrem);
                }
        }
 
-       if (do_edcrypt == TFC_DO_ENCRYPT && do_stop == TFC_STOP_BEGAN) {
+       if (do_edcrypt == TFC_DO_ENCRYPT && do_stop == TFB64_STOP1) {
                size_t t = estate.count;
                pblk = dstblk + estate.count;
                base64_encode_blockend((char *)dstblk, &estate);
                lrem = estate.count - t;
                ldone = 0;
-               do_stop = TFC_STOP_FULL;
+               do_stop = TFB64_STOPF;
                goto _wagain;
        }
 
        memset(&estate, 0, sizeof(struct base64_encodestate));
        memset(&dstate, 0, sizeof(struct base64_decodestate));
-       if (do_preserve_time) fcopy_matime(dfd, &s_stat);
        xexit(0);
 }