File permission rework
authorIngo Huerner <ingo.huerner@xse.de>
Wed, 18 Dec 2013 12:56:33 +0000 (13:56 +0100)
committerIngo Huerner <ingo.huerner@xse.de>
Wed, 18 Dec 2013 12:56:33 +0000 (13:56 +0100)
include_protected/persistence_client_library_rc_table.h
src/persistence_client_library_file.c
src/persistence_client_library_key.c
test/data/Data.tar.gz
test/persistence_client_library_test.c

index 77453f8..6cb0668 100644 (file)
@@ -81,9 +81,9 @@ typedef struct _PersistenceDbContext_s
 
 typedef enum PersistencePermission_e_
 {
-    PersistencePermission_ReadWrite = O_RDWR,
-    PersistencePermission_ReadOnly  = O_RDONLY,
-    PersistencePermission_WriteOnly = O_WRONLY,
+    PersistencePermission_ReadWrite = 0,
+    PersistencePermission_ReadOnly  = 1,
+    PersistencePermission_WriteOnly = 2,
 
    /** insert new entries here ... */
     PersistencePermission_LastEntry            /**< last entry */
index dada09e..fea9c68 100644 (file)
@@ -162,7 +162,7 @@ int pclFileOpen(unsigned int ldbid, const char* resource_id, unsigned int user_n
       {
          if(shared_DB >= 0)                                          // check valid database context
          {
-            int flags = dbContext.configKey.permission;
+            int flags = pclGetPosixPermission(dbContext.configKey.permission);
 
             // file will be opened writable, so check about data consistency
             if( (dbContext.configKey.permission != PersistencePermission_ReadOnly)
@@ -430,7 +430,7 @@ int pclFileCreatePath(unsigned int ldbid, const char* resource_id, unsigned int
       {
          if(shared_DB >= 0)                                             // check valid database context
          {
-            int flags = dbContext.configKey.permission;
+            int flags = pclGetPosixPermission(dbContext.configKey.permission);
 
             // file will be opened writable, so check about data consistency
             if(   dbContext.configKey.permission != PersistencePermission_ReadOnly
@@ -990,3 +990,27 @@ int pclCreateFileAndPath(const char* path)
 }
 
 
+
+int pclGetPosixPermission(PersistencePermission_e permission)
+{
+   int posixPerm = 0;
+
+   switch(permission)
+   {
+   case PersistencePermission_ReadWrite:
+      posixPerm = O_RDWR;
+      break;
+   case PersistencePermission_ReadOnly:
+      posixPerm = O_RDONLY;
+      break;
+   case PersistencePermission_WriteOnly:
+      posixPerm = O_WRONLY;
+      break;
+   default:
+      posixPerm = O_RDONLY;
+      break;
+   }
+
+   return posixPerm;
+}
+
index 94f03d5..6f42dcc 100644 (file)
@@ -292,7 +292,7 @@ int pclKeyHandleWriteData(int key_handle, unsigned char* buffer, int buffer_size
          {
             if(key_handle < MaxPersHandle)
             {
-               if(gKeyHandleArray[key_handle].info.configKey.permission != O_RDONLY)  // don't write to a read only resource
+               if(gKeyHandleArray[key_handle].info.configKey.permission != PersistencePermission_ReadOnly)  // don't write to a read only resource
                {
                   if(PersistenceStorage_custom ==  gKeyHandleArray[key_handle].info.configKey.storage)
                   {
@@ -533,7 +533,7 @@ int pclKeyWriteData(unsigned int ldbid, const char* resource_id, unsigned int us
             if(   (data_size >= 0)
                && (dbContext.configKey.type == PersistenceResourceType_key))
             {
-               if(dbContext.configKey.permission != O_RDONLY)  // don't write to a read only resource
+               if(dbContext.configKey.permission != PersistencePermission_ReadOnly)  // don't write to a read only resource
                {
                   // get hash value of data to verify storing
                   hash_val_data = pclCrc32(hash_val_data, buffer, buffer_size);
index 37a9f76..180fbc2 100644 (file)
Binary files a/test/data/Data.tar.gz and b/test/data/Data.tar.gz differ
index 412042e..56037cf 100644 (file)
@@ -1058,7 +1058,12 @@ static Suite * persistencyClientLib_suite()
 
 int main(int argc, char *argv[])
 {
-   int nr_failed = 0;
+   int nr_failed = 0,
+          nr_run = 0,
+            fail = 0,
+               i = 0;
+
+   TestResult** tResult;
 
    // assign application name
    strncpy(gTheAppId, "lt-persistence_client_library_test", MaxAppNameLen);
@@ -1070,8 +1075,19 @@ int main(int argc, char *argv[])
 #if 1
    Suite * s = persistencyClientLib_suite();
    SRunner * sr = srunner_create(s);
-   srunner_run_all(sr, CK_VERBOSE);
+   srunner_set_xml(sr, "/tmp/persistenceClientLibraryTest.xml");
+   srunner_set_log(sr, "/tmp/persistenceClientLibraryTest.log");
+   srunner_run_all(sr, /*CK_NORMAL*/ CK_VERBOSE);
+
    nr_failed = srunner_ntests_failed(sr);
+   nr_run = srunner_ntests_run(sr);
+
+   tResult = srunner_results(sr);
+   for(i = 0; i< nr_run; i++)
+   {
+      fail = tr_rtype(tResult[i]);  // get status of each test
+      //printf("[%d] Fail: %d \n", i, fail);
+   }
 
    srunner_free(sr);
 #endif