isync

mailbox synchronization program
git clone https://git.code.sf.net/p/isync/isync
Log | Files | Refs | README | LICENSE

commit 91d19cceac80d14b5700bfe6d0e12c3f9bea7cb2
parent 608c724addbb45dee0c9c112c7a57868f935c4d9
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date:   Tue,  8 Feb 2022 15:19:19 +0100

make journal entry argument processing saner

the mega-if was unreadable and caused lots of churn.

Diffstat:
Msrc/sync_state.c | 48+++++++++++++++++++++++++++++++++++-------------
1 file changed, 35 insertions(+), 13 deletions(-)

diff --git a/src/sync_state.c b/src/sync_state.c @@ -279,18 +279,41 @@ load_state( sync_vars_t *svars ) } buf[ll] = 0; char c; - int tn; + int tn, bad; uint t1, t2, t3, t4; - if ((c = buf[0]) == '#' ? - (tn = 0, (sscanf( buf + 2, "%u %u %n", &t1, &t2, &tn ) < 2) || !tn || (ll - (uint)tn != TUIDL + 2)) : - c == '!' ? - (sscanf( buf + 2, "%u", &t1 ) != 1) : - c == 'N' || c == 'F' || c == 'T' || c == '+' || c == '&' || c == '-' || c == '=' || c == '_' || c == '|' ? - (sscanf( buf + 2, "%u %u", &t1, &t2 ) != 2) : - c != '^' ? - (sscanf( buf + 2, "%u %u %u", &t1, &t2, &t3 ) != 3) : - (sscanf( buf + 2, "%u %u %u %u", &t1, &t2, &t3, &t4 ) != 4)) - { + switch ((c = buf[0])) { + case '#': + tn = 0; + bad = (sscanf( buf + 2, "%u %u %n", &t1, &t2, &tn ) < 2) || !tn || (ll - (uint)tn != TUIDL + 2); + break; + case '!': + bad = sscanf( buf + 2, "%u", &t1 ) != 1; + break; + case 'N': + case 'F': + case 'T': + case '+': + case '&': + case '-': + case '=': + case '_': + case '|': + bad = sscanf( buf + 2, "%u %u", &t1, &t2 ) != 2; + break; + case '<': + case '>': + case '*': + case '~': + bad = sscanf( buf + 2, "%u %u %u", &t1, &t2, &t3 ) != 3; + break; + case '^': + bad = sscanf( buf + 2, "%u %u %u %u", &t1, &t2, &t3, &t4 ) != 4; + break; + default: + error( "Error: unrecognized journal entry at %s:%d\n", svars->jname, line ); + goto jbail; + } + if (bad) { error( "Error: malformed journal entry at %s:%d\n", svars->jname, line ); goto jbail; } @@ -373,8 +396,7 @@ load_state( sync_vars_t *svars ) srec = upgrade_srec( svars, srec ); break; default: - error( "Error: unrecognized journal entry at %s:%d\n", svars->jname, line ); - goto jbail; + assert( !"Unhandled journal entry" ); } } }