[med-svn] r20504 - in trunk/packages/minc/libminc/trunk/debian: . patches

Steven Michael Robbins smr at moszumanska.debian.org
Sun Nov 15 13:34:43 UTC 2015


Author: smr
Date: 2015-11-15 13:34:43 +0000 (Sun, 15 Nov 2015)
New Revision: 20504

Added:
   trunk/packages/minc/libminc/trunk/debian/patches/fix-endian-issues-label-data.patch
Modified:
   trunk/packages/minc/libminc/trunk/debian/changelog
   trunk/packages/minc/libminc/trunk/debian/patches/series
Log:
Cherry-pick endianness fix from upstream develop branch.

Modified: trunk/packages/minc/libminc/trunk/debian/changelog
===================================================================
--- trunk/packages/minc/libminc/trunk/debian/changelog	2015-11-14 22:20:07 UTC (rev 20503)
+++ trunk/packages/minc/libminc/trunk/debian/changelog	2015-11-15 13:34:43 UTC (rev 20504)
@@ -1,3 +1,10 @@
+libminc (2.3.00-2) unstable; urgency=medium
+
+  * patches/fix-endian-issues-label-data.patch: New.  Upstream fix for
+    endianness problem.  Closes: #802072.
+
+ -- Steve M. Robbins <smr at debian.org>  Sun, 15 Nov 2015 07:34:14 -0600
+
 libminc (2.3.00-1) unstable; urgency=medium
 
   * New upstream.  Contains library source only.  New minc-tools source

Added: trunk/packages/minc/libminc/trunk/debian/patches/fix-endian-issues-label-data.patch
===================================================================
--- trunk/packages/minc/libminc/trunk/debian/patches/fix-endian-issues-label-data.patch	                        (rev 0)
+++ trunk/packages/minc/libminc/trunk/debian/patches/fix-endian-issues-label-data.patch	2015-11-15 13:34:43 UTC (rev 20504)
@@ -0,0 +1,140 @@
+From 166aca9f4c33bc5642047ceafd5c6bae0d888187 Mon Sep 17 00:00:00 2001
+From: "Robert D. Vincent" <robert.d.vincent at mcgill.ca>
+Date: Wed, 7 Oct 2015 22:06:38 +0000
+Subject: [PATCH] Fix endian issues with label data.
+
+---
+ libsrc2/m2util.c | 83 ++++++++++++++++++++++++++++++++++++++++++++------------
+ libsrc2/volume.c |  4 +--
+ 2 files changed, 66 insertions(+), 21 deletions(-)
+
+diff --git a/libsrc2/m2util.c b/libsrc2/m2util.c
+index a9367dc..5711208 100644
+--- a/libsrc2/m2util.c
++++ b/libsrc2/m2util.c
+@@ -1343,33 +1343,80 @@ void miinit ( void )
+                 mi2_dbl_to_int ),"H5Tregister")
+ }
+ 
+-/** HDF5 type conversion function for converting an arbitrary integer type to
+-* an arbitrary enumerated type.  The beauty part of this is that it is
+-* not necessary to actually perform any real conversion!
+-*/
+-static herr_t mi2_null_conv ( hid_t src_id,
+-                              hid_t dst_id,
+-                              H5T_cdata_t *cdata,
+-                              size_t nelements,
+-                              size_t buf_stride,
+-                              size_t bkg_stride,
+-                              void *buf_ptr,
+-                              void *bkg_ptr,
+-                              hid_t dset_xfer_plist )
++/** HDF5 type conversion function for converting among integer types.
++ * This handles byte-swapping for enumerated types where needed.
++ */
++static herr_t mi2_int_to_int ( hid_t src_id,
++			       hid_t dst_id,
++			       H5T_cdata_t *cdata,
++			       size_t nelements,
++			       size_t buf_stride,
++			       size_t bkg_stride,
++			       void *buf_ptr,
++			       void *bkg_ptr,
++			       hid_t dset_xfer_plist )
+ {
++  unsigned char *dst_ptr;
++  size_t dst_cnt;
++  size_t dst_sz;
++
+   switch ( cdata->command ) {
+   case H5T_CONV_INIT:
+     break;
+   case H5T_CONV_CONV:
++    dst_ptr = ( unsigned char * ) buf_ptr;
++    dst_sz = H5Tget_size( dst_id );
++
++    if (dst_sz != H5Tget_size( src_id )) {
++      return -1;		/* Can't change size for now. */
++    }
++    if ( H5Tget_order ( dst_id ) == H5Tget_order ( src_id ) ) {
++      return 0;			/* Nothing to do. */
++    }
++
++    /* The logic of HDF5 seems to be that if a stride is specified,
++    * both the source and destination pointers should advance by that
++    * amount.  This seems wrong to me, but I've examined the HDF5 sources
++    * and that's what their own type converters do.
++    */
++    if ( buf_stride == 0 ) {
++      dst_cnt = dst_sz;
++    } else {
++      dst_cnt = buf_stride;
++    }
++
++    switch ( dst_sz ) {
++    case 8:
++      while ( nelements-- > 0 ) {
++	miswap8 ( dst_ptr );
++	dst_ptr += dst_cnt;
++      }
++      break;
++    case 4:
++      while ( nelements-- > 0 ) {
++	miswap4 ( dst_ptr );
++	dst_ptr += dst_cnt;
++      }
++      break;
++    case 2:
++      while ( nelements-- > 0 ) {
++	miswap2 ( dst_ptr );
++	dst_ptr += dst_cnt;
++      }
++      break;
++    case 1:
++      break;
++    default:
++      return (-1);
++    }
+     break;
++
+   case H5T_CONV_FREE:
+     break;
+ 
+   default:
+-    /* Unknown command */
+-    return ( -1 );
++    return (-1);                /* Unknown command. */
+   }
+-
+   return ( 0 );
+ }
+ 
+@@ -1380,9 +1427,9 @@ in order to facilitate conversions from the integer to the enumerated type.
+ void miinit_enum ( hid_t type_id )
+ {
+   H5Tregister ( H5T_PERS_SOFT, "i2e", H5T_NATIVE_INT, type_id,
+-                mi2_null_conv );
++                mi2_int_to_int );
+   H5Tregister ( H5T_PERS_SOFT, "e2i", type_id, H5T_NATIVE_INT,
+-                mi2_null_conv );
++                mi2_int_to_int );
+   H5Tregister ( H5T_PERS_SOFT, "d2e", H5T_NATIVE_DOUBLE, type_id,
+                 mi2_dbl_to_int );
+   H5Tregister ( H5T_PERS_SOFT, "e2d", type_id, H5T_NATIVE_DOUBLE,
+diff --git a/libsrc2/volume.c b/libsrc2/volume.c
+index b951d14..be8b7d1 100644
+--- a/libsrc2/volume.c
++++ b/libsrc2/volume.c
+@@ -1449,11 +1449,9 @@ int miopen_volume(const char *filename, int mode, mihandle_t *volume)
+     break;
+ 
+   case H5T_ENUM:
+-    handle->mtype_id = H5Tcopy(handle->ftype_id);
++    handle->mtype_id = H5Tget_native_type(handle->ftype_id, H5T_DIR_ASCEND);
+     miinit_enum(handle->ftype_id);
+     miinit_enum(handle->mtype_id);
+-    /* Set native order ---> is not allowed after order is set */
+-    //H5Tset_order(handle->mtype_id, H5Tget_order(H5T_NATIVE_INT));
+     break;
+ 
+   default:

Modified: trunk/packages/minc/libminc/trunk/debian/patches/series
===================================================================
--- trunk/packages/minc/libminc/trunk/debian/patches/series	2015-11-14 22:20:07 UTC (rev 20503)
+++ trunk/packages/minc/libminc/trunk/debian/patches/series	2015-11-15 13:34:43 UTC (rev 20504)
@@ -1,3 +1,4 @@
 build-using-system-find-dot-cmake
 fix-uselibminc-cmake
 use-system-nifti
+fix-endian-issues-label-data.patch




More information about the debian-med-commit mailing list