commit 91d19cceac80d14b5700bfe6d0e12c3f9bea7cb2
Author: Oswald Buddenhagen <o...@users.sf.net>
Date:   Tue Feb 8 15:19:19 2022 +0100

    make journal entry argument processing saner
    
    the mega-if was unreadable and caused lots of churn.

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

diff --git a/src/sync_state.c b/src/sync_state.c
index f06954b8..42a9a19f 100644
--- 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" );
                                        }
                                }
                        }


_______________________________________________
isync-devel mailing list
isync-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/isync-devel

Reply via email to