[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