diff src/ls-hdf5.cc @ 9892:ac69e6f4b33d

Add HDF5-1.8 compatibility while maintaining compatibility with HDF5-1.6 versions
author Kacper Kowalik <xarthisius.kk@gmail.com>
date Tue, 01 Dec 2009 00:49:07 +0100
parents b3089dba88bf
children cd96d29c5efa
line wrap: on
line diff
--- a/src/ls-hdf5.cc
+++ b/src/ls-hdf5.cc
@@ -142,8 +142,13 @@
   // turn off error reporting temporarily, but save the error
   // reporting function:
 
+#if HAVE_HDF5_18
+  H5Eget_auto (H5E_DEFAULT, &err_func, &err_func_data);
+  H5Eset_auto (H5E_DEFAULT, 0, 0);
+#else
   H5Eget_auto (&err_func, &err_func_data);
   H5Eset_auto (0, 0);
+#endif
 
   hid_t attr_id = H5Aopen_name (loc_id, attr_name);
 
@@ -155,8 +160,11 @@
     }
 
   // restore error reporting:
+#if HAVE_HDF5_18
+  H5Eset_auto (H5E_DEFAULT, err_func, err_func_data);
+#else
   H5Eset_auto (err_func, err_func_data);
-
+#endif
   return retval;
 }
 
@@ -216,7 +224,11 @@
 
   if (info.type == H5G_GROUP && ident_valid)
     {
+#if HAVE_HDF5_18
+      subgroup_id = H5Gopen (group_id, name, H5P_DEFAULT);
+#else
       subgroup_id = H5Gopen (group_id, name);
+#endif
 
       if (subgroup_id < 0)
 	{
@@ -226,7 +238,11 @@
 
       if (hdf5_check_attr (subgroup_id, "OCTAVE_NEW_FORMAT"))
 	{
+#if HAVE_HDF5_18
+	  data_id = H5Dopen (subgroup_id, "type", H5P_DEFAULT);
+#else
 	  data_id = H5Dopen (subgroup_id, "type");
+#endif
 
 	  if (data_id < 0)
 	    {
@@ -296,7 +312,11 @@
   else if (info.type == H5G_DATASET && ident_valid)
     {
       // For backwards compatiability.
+#if HAVE_HDF5_18
+      data_id = H5Dopen (group_id, name, H5P_DEFAULT);
+#else
       data_id = H5Dopen (group_id, name);
+#endif
 
       if (data_id < 0)
 	{
@@ -523,14 +543,17 @@
   herr_t H5Giterate_retval = -1;
 
   hsize_t num_obj = 0;
+#if HAVE_HDF5_18
+  hid_t group_id = H5Gopen (hs.file_id, "/", H5P_DEFAULT); 
+#else
   hid_t group_id = H5Gopen (hs.file_id, "/"); 
+#endif
   H5Gget_num_objs (group_id, &num_obj);
   H5Gclose (group_id);
   if (hs.current_item < static_cast<int> (num_obj))
     H5Giterate_retval = H5Giterate (hs.file_id, "/", &hs.current_item,
 				    hdf5_read_next_data, &d);
 
-
   if (H5Giterate_retval > 0)
     {
       global = d.global;
@@ -561,9 +584,13 @@
 
   if (as_id >= 0)
     {
+#if HAVE_HDF5_18
+      hid_t a_id = H5Acreate (loc_id, attr_name, H5T_NATIVE_UCHAR, 
+      			      as_id, H5P_DEFAULT, H5P_DEFAULT);
+#else
       hid_t a_id = H5Acreate (loc_id, attr_name,
 			      H5T_NATIVE_UCHAR, as_id, H5P_DEFAULT);
-
+#endif
       if (a_id >= 0)
 	{
 	  unsigned char attr_val = 1;
@@ -607,9 +634,13 @@
 
   space_hid = H5Screate_simple (1, &sz, 0);
   if (space_hid < 0) return space_hid;
-
+#if HAVE_HDF5_18
+  data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_IDX, space_hid, 
+			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_IDX, space_hid, 
 			H5P_DEFAULT);
+#endif
   if (data_hid < 0)
     {
       H5Sclose (space_hid);
@@ -639,7 +670,11 @@
     return 0;
 
   hsize_t hdims, maxdims;
+#if HAVE_HDF5_18
+  hid_t data_hid = H5Dopen (loc_id, name, H5P_DEFAULT);
+#else
   hid_t data_hid = H5Dopen (loc_id, name);
+#endif
   hid_t space_id = H5Dget_space (data_hid);
   H5Sget_simple_extent_dims (space_id, &hdims, &maxdims);
   int retval;
@@ -722,8 +757,11 @@
     val = val.full_value ();
 
   std::string t = val.type_name();
-
+#if HAVE_HDF5_18
+  data_id = H5Gcreate (loc_id, name.c_str (), H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_id = H5Gcreate (loc_id, name.c_str (), 0);
+#endif
   if (data_id < 0)
     goto error_cleanup;
 
@@ -736,8 +774,12 @@
   space_id = H5Screate_simple (0 , dims, 0);
   if (space_id < 0)
     goto error_cleanup;
-
+#if HAVE_HDF5_18
+  data_type_id = H5Dcreate (data_id, "type",  type_id, space_id,
+  			    H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+#else
   data_type_id = H5Dcreate (data_id, "type",  type_id, space_id, H5P_DEFAULT);
+#endif
   if (data_type_id < 0 || H5Dwrite (data_type_id, type_id, H5S_ALL, H5S_ALL, 
 				    H5P_DEFAULT, t.c_str ()) < 0)
     goto error_cleanup;