Simplify kdb_db2's open_db() a little further, avoiding a suspicious
authorGreg Hudson <ghudson@mit.edu>
Wed, 3 Nov 2010 17:32:11 +0000 (17:32 +0000)
committerGreg Hudson <ghudson@mit.edu>
Wed, 3 Nov 2010 17:32:11 +0000 (17:32 +0000)
switch fallthrough.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@24508 dc483132-0cff-0310-8789-dd5450dbe970

src/plugins/kdb/db2/kdb_db2.c

index a5ec2d01d2d2f6edcc1dc3e8cde363729fdf76e1..36969584af32727c9815064c02252797a9758688 100644 (file)
@@ -309,13 +309,14 @@ open_db(krb5_db2_context *dbc, char *fname, int flags, int mode)
     hashi.lorder = 0;
     hashi.nelem = 1;
 
+    /* Try our best guess at the database type. */
     db = dbopen(fname, flags, mode,
                 dbc->hashfirst ? DB_HASH : DB_BTREE,
                 dbc->hashfirst ? (void *) &hashi : (void *) &bti);
-    if (db != NULL) {
-        free(fname);
-        return db;
-    }
+    if (db != NULL)
+        goto done;
+
+    /* If that was wrong, retry with the other type. */
     switch (errno) {
 #ifdef EFTYPE
     case EFTYPE:
@@ -324,12 +325,15 @@ open_db(krb5_db2_context *dbc, char *fname, int flags, int mode)
         db = dbopen(fname, flags, mode,
                     dbc->hashfirst ? DB_BTREE : DB_HASH,
                     dbc->hashfirst ? (void *) &bti : (void *) &hashi);
+        /* If that worked, update our guess for next time. */
         if (db != NULL)
             dbc->hashfirst = !dbc->hashfirst;
-    default:
-        free(fname);
-        return db;
+        break;
     }
+
+done:
+    free(fname);
+    return db;
 }
 
 /* Initialize the lock file and policy database fields of the DB2 context