From: Andrey Rys Date: Sun, 28 Nov 2021 17:05:51 +0000 (+0100) Subject: -O ioseek=: apply iseek and oseek at same time. X-Git-Url: https://jxself.org/git/?p=tfcrypt.git;a=commitdiff_plain;h=ef3f3a7b878b0be4da7a22a6954f378aa86561e3 -O ioseek=: apply iseek and oseek at same time. --- diff --git a/VERSION b/VERSION index e1617e8..8c61d23 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -57 +58 diff --git a/tfc_error.c b/tfc_error.c index bb477c4..4d64afd 100644 --- a/tfc_error.c +++ b/tfc_error.c @@ -164,6 +164,8 @@ void usage(void) tfc_say(" iobs=val: set IO block size value. Must not exceed %u bytes.", TFC_U(TFC_BLKSIZE)); tfc_say(" iseek=val: seek source file/device by these val bytes."); tfc_say(" oseek=val: seek destination file/device by these val bytes."); + tfc_say(" ioseek=val: seek both source and destination."); + tfc_say(" ioseek is equal to iseek and oseek."); tfc_say(" count=val: process only these val bytes, both input and output."); tfc_say(" ftrunc=val: truncate output file to these val bytes before closing it."); tfc_say(" ftrunc=tail: truncate output's tail, leaving only processed data."); @@ -350,6 +352,8 @@ void usage(void) tfc_say(" ixctr=val: Increment initial counter by this val bytes."); tfc_say(" Internally this number is translated into number of %u byte blocks.", TFC_U(TF_BLOCK_SIZE)); tfc_say(" oseek=val: seek destination file/device by these val bytes."); + tfc_say(" ioseek=val: seek both source and destination."); + tfc_say(" ioseek is equal to iseek and oseek."); tfc_say(" count=val: process only these val bytes, both input and output."); tfc_say(" ftrunc=val: truncate output file to these val bytes before closing it."); tfc_say(" ftrunc=tail: truncate output's tail, leaving only processed data."); diff --git a/tfcrypt.c b/tfcrypt.c index e6d422d..7da9e99 100644 --- a/tfcrypt.c +++ b/tfcrypt.c @@ -456,6 +456,33 @@ _baddfname: } else oseek = tfc_modifysize(oseek, strchr(s, ':')); } + else if (!strncmp(s, "ioseek", 6) && *(s+6) == '=') { + s += 7; + + iseek = tfc_humanfsize(s, &stoi); + if (!str_empty(stoi)) { + iseek = tfc_fnamesize(s, YES); + iseek = tfc_modifysize(iseek, strchr(s, ':')); + if (iseek == NOFSIZE) xerror(NO, YES, YES, + "%s: invalid iseek value", s); + } + else iseek = tfc_modifysize(iseek, strchr(s, ':')); + if (ctr_mode != TFC_MODE_PLAIN && iseek % TF_BLOCK_SIZE) + xerror(NO, YES, YES, + "%s: not round to TF block size " + "of %u bytes", + s, TFC_U(TF_BLOCK_SIZE)); + iseek_blocks = iseek / TF_BLOCK_SIZE; + + oseek = tfc_humanfsize(s, &stoi); + if (!str_empty(stoi)) { + oseek = tfc_fnamesize(s, YES); + oseek = tfc_modifysize(oseek, strchr(s, ':')); + if (oseek == NOFSIZE) xerror(NO, YES, YES, + "%s: invalid oseek value", s); + } + else oseek = tfc_modifysize(oseek, strchr(s, ':')); + } else if (!strncmp(s, "count", 5) && *(s+5) == '=') { s += 6; maxlen = tfc_humanfsize(s, &stoi);