diff libtests/0001/prog1.c @ 392:78fed0d4c108 api-inversion

Include some necessary information in struct adb. Now the struct adb contains a database fd, the flags used to open that fd (so that we can later tell if it was for write or not) and a database header pointer. audiodb_open() is now responsible for filling in all of that information. To do that, it needs to take an open(2) flag; that's good, because it means that the call to open(2) is no longer invoking undefined behaviour. (Also, the previous version of audiodb_open() leaked an fd). Unfortunately, that means we have broken ABI and API compatibility. (Fortunately, we have fewer than 12 users). Use audiodb_open() in audioDB::initDBHeader(). We've temporarily(?) put acquire_lock(int, bool) in the API header; that means we need to include <stdbool.h> and compile C files with -std=c99. Do so. Make audiodb_close() free resources allocated by audiodb_open(). Include a struct adb * field in the audioDB C++ object... ... which lets us actually implement memory-correctness, by audiodb_close()ing the database in audioDB::cleanup(). [ The lock is, I think, correctly disposed of; man fcntl(2) on Linux says that the locks are released once any file descriptor relating to the file is closed, and we close the fd in audiodb_close(). ]
author mas01cr
date Mon, 24 Nov 2008 15:42:15 +0000
parents 94c18f128ce8
children e072aa1611f5
line wrap: on
line diff
--- a/libtests/0001/prog1.c	Mon Nov 24 12:50:38 2008 +0000
+++ b/libtests/0001/prog1.c	Mon Nov 24 15:42:15 2008 +0000
@@ -33,7 +33,7 @@
     /* create new db */
     //# creation
     //${AUDIODB} -N -d testdb
-    mydbp=audiodb_open(databasename);
+    mydbp=audiodb_open(databasename,O_RDWR);
 
 
     /* open should fail (return NULL), so create a new db */
@@ -69,7 +69,7 @@
 
 /* should pass now - db exists */ 
 //expect_clean_error_exit ${AUDIODB} -N -d testdb
-    mydbp2=audiodb_open(databasename);
+    mydbp2=audiodb_open(databasename, O_RDONLY);
     if (!mydbp2){
        returnval=-1;
     }