]> git.sur5r.net Git - openldap/commitdiff
ITS#7369 mdb_stat: cleanup in case something went wrong.
authorOndrej Kuznik <ondrej.kuznik@acision.com>
Fri, 24 Aug 2012 12:28:36 +0000 (05:28 -0700)
committerHoward Chu <hyc@symas.com>
Fri, 24 Aug 2012 12:33:46 +0000 (05:33 -0700)
libraries/libmdb/mdb_stat.c
libraries/libmdb/mdb_stata.c

index 5832e267c76bc87d012e0552490a856cd1d6d811..6007510c6b7800cefb8fe58262602b79a6fce945 100644 (file)
@@ -36,18 +36,17 @@ int main(int argc,char * argv[])
        rc = mdb_env_open(env, envname, MDB_RDONLY, 0);
        if (rc) {
                printf("mdb_env_open failed, error %d\n", rc);
-               exit(1);
+               goto env_close;
        }
        rc = mdb_txn_begin(env, NULL, 1, &txn);
        if (rc) {
                printf("mdb_txn_begin failed, error %d\n", rc);
-               exit(1);
+               goto env_close;
        }
        rc = mdb_open(txn, subname, 0, &dbi);
        if (rc) {
                printf("mdb_open failed, error %d\n", rc);
-               mdb_txn_abort(txn);
-               exit(1);
+               goto txn_abort;
        }
    
        rc = mdb_stat(txn, dbi, &mst);
@@ -58,8 +57,10 @@ int main(int argc,char * argv[])
        printf("Overflow pages: %zu\n", mst.ms_overflow_pages);
        printf("Entries: %zu\n", mst.ms_entries);
        mdb_close(env, dbi);
+txn_abort:
        mdb_txn_abort(txn);
+env_close:
        mdb_env_close(env);
 
-       return 0;
+       return rc ? EXIT_FAILURE : EXIT_SUCCESS;
 }
index 62f019fe9440c021ae3deddc83c759b1a72e476a..f8b2fe59a80cdd7c2f46ca5ade04f123475f5c5d 100644 (file)
@@ -34,18 +34,17 @@ int main(int argc,char * argv[])
        rc = mdb_env_open(env, envname, MDB_RDONLY, 0);
        if (rc) {
                printf("mdb_env_open failed, error %d\n", rc);
-               exit(1);
+               goto env_close;
        }
        rc = mdb_txn_begin(env, NULL, 1, &txn);
        if (rc) {
                printf("mdb_txn_begin failed, error %d\n", rc);
-               exit(1);
+               goto env_close;
        }
        rc = mdb_open(txn, NULL, 0, &dbi);
        if (rc) {
                printf("mdb_open failed, error %d\n", rc);
-               mdb_txn_abort(txn);
-               exit(1);
+               goto txn_abort;
        }
    
        rc = mdb_stat(txn, dbi, &mst);
@@ -76,8 +75,10 @@ int main(int argc,char * argv[])
        }
        mdb_cursor_close(cursor);
        mdb_close(env, dbi);
+txn_abort:
        mdb_txn_abort(txn);
+env_close:
        mdb_env_close(env);
 
-       return 0;
+       return rc ? EXIT_FAILURE : EXIT_SUCCESS;
 }