fix hdf5 locked file by listvar_in_hdf5 and import_from_hdf5 functions
[scilab.git] / scilab / modules / hdf5 / sci_gateway / cpp / sci_listvar_in_hdf5.cpp
index 0b46f18..9c3bc90 100644 (file)
@@ -141,7 +141,6 @@ int sci_listvar_in_hdf5(char *fname, unsigned long fname_len)
             strcpy(pInfo[i].varName, pstVarNameList[i]);
             FREE(pstVarNameList[i]);
             b = read_data(iDataSetId, 0, NULL, &pInfo[i]) == false;
-            closeDataSet(iDataSetId);
             if (b)
             {
                 break;
@@ -319,6 +318,7 @@ static bool read_double(int _iDatasetId, int _iItemPos, int *_piAddress, VarInfo
     _pInfo->iSize = (2 + (iSize * (iComplex + 1))) * 8;
 
     generateInfo(_pInfo, "constant");
+    closeDataSet(_iDatasetId);
     return true;
 }
 
@@ -359,6 +359,7 @@ static bool read_boolean(int _iDatasetId, int _iItemPos, int *_piAddress, VarInf
     _pInfo->iSize = (3 + iSize) * 4;
 
     generateInfo(_pInfo, "boolean");
+    closeDataSet(_iDatasetId);
     return true;
 }
 
@@ -375,6 +376,7 @@ static bool read_integer(int _iDatasetId, int _iItemPos, int *_piAddress, VarInf
     _pInfo->iSize = 16 + iSize * (iPrec % 10);
 
     generateInfo(_pInfo, "integer");
+    closeDataSet(_iDatasetId);
     return true;
 }
 
@@ -400,6 +402,7 @@ static bool read_sparse(int _iDatasetId, int _iItemPos, int *_piAddress, VarInfo
     _pInfo->iSize = 20 + iRows * 4 + iNbItem * 4 + (iNbItem * (iComplex + 1) * 8);
 
     generateInfo(_pInfo, "sparse");
+    closeDataSet(_iDatasetId);
     return true;
 }
 
@@ -423,6 +426,7 @@ static bool read_boolean_sparse(int _iDatasetId, int _iItemPos, int *_piAddress,
     _pInfo->iSize = 20 + iRows * 4 + iNbItem * 4;
 
     generateInfo(_pInfo, "boolean sparse");
+    closeDataSet(_iDatasetId);
     return true;
 }
 
@@ -536,18 +540,27 @@ static bool read_list(int _iDatasetId, int _iVarType, int _iItemPos, int *_piAdd
         generateInfo(_pInfo, "mlist");
     }
 
+    iRet = deleteListItemReferences(_iDatasetId, piItemRef);
+    if (iRet)
+    {
+        return false;
+    }
+
+
     return true;
 }
 
 static bool read_void(int _iDatasetId, int _iItemPos, int *_piAddress, VarInfo* _pInfo)
 {
     _pInfo->iSize = 1;
+    closeDataSet(_iDatasetId);
     return true;
 }
 
 static bool read_undefined(int _iDatasetId, int _iItemPos, int *_piAddress, VarInfo* _pInfo)
 {
     _pInfo->iSize = 1;
+    closeDataSet(_iDatasetId);
     return true;
 }