summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/H5FD.c1
-rw-r--r--src/H5T.c4
-rw-r--r--src/H5Tconv.c391
-rw-r--r--src/H5Tpkg.h6
4 files changed, 1 insertions, 401 deletions
diff --git a/src/H5FD.c b/src/H5FD.c
index 1abe23a..599f73c 100644
--- a/src/H5FD.c
+++ b/src/H5FD.c
@@ -2937,6 +2937,7 @@ H5FDset_eoa(H5FD_t *file, haddr_t addr)
/* Check args */
if (!file || !file->cls)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file pointer")
+
if (!H5F_addr_defined(addr) || addr>file->maxaddr)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid end-of-address value")
diff --git a/src/H5T.c b/src/H5T.c
index 73f1c4a..d4dd9f3 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -980,10 +980,6 @@ H5T_init_interface(void)
status |= H5T_register(H5T_PERS_SOFT, "array", array, array, H5T_conv_array, H5AC_dxpl_id);
status |= H5T_register(H5T_PERS_SOFT, "objref", objref, objref, H5T_conv_order_opt, H5AC_dxpl_id);
- /* Custom conversion for 32-bit ints to 64-bit floats (undocumented) */
- status |= H5T_register(H5T_PERS_HARD, "u32le_f64le", std_u32le, ieee_f64le, H5T_conv_i32le_f64le, H5AC_dxpl_id);
- status |= H5T_register(H5T_PERS_HARD, "i32le_f64le", std_i32le, ieee_f64le, H5T_conv_i32le_f64le, H5AC_dxpl_id);
-
/*
* Native conversions should be listed last since we can use hardware to
* perform the conversion. We list the odd types like `llong', `long',
diff --git a/src/H5Tconv.c b/src/H5Tconv.c
index 8dabcc8..0386b8c 100644
--- a/src/H5Tconv.c
+++ b/src/H5Tconv.c
@@ -9155,397 +9155,6 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5T_conv_i32le_f64le
- *
- * Purpose: Converts 4-byte little-endian integers (signed or unsigned)
- * to 8-byte litte-endian IEEE floating point.
- *
- * Return: Non-negative on success/Negative on failure
- *
- *
- * Programmer: Robb Matzke
- * Wednesday, June 10, 1998
- *
- * Modifications:
- * Robb Matzke, 1999-06-16
- * Added support for non-zero strides. If BUF_STRIDE is non-zero
- * then convert one value at each memory location advancing
- * BUF_STRIDE bytes each time; otherwise assume both source and
- * destination values are packed.
- *-------------------------------------------------------------------------
- */
-herr_t
-H5T_conv_i32le_f64le (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
- size_t nelmts, size_t buf_stride,
- size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dxpl_id)
-{
- uint8_t *s=NULL, *d=NULL; /*src and dst buf pointers */
- uint8_t tmp[8]; /*temporary destination buffer */
- H5T_t *src = NULL; /*source data type */
- size_t elmtno; /*element counter */
- unsigned sign; /*sign bit */
- unsigned cin, cout; /*carry in/out */
- unsigned mbits=0; /*mantissa bits */
- unsigned exponent; /*exponent */
- int i; /*counter */
- herr_t ret_value=SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5T_conv_i32le_f64le, FAIL);
-
- switch (cdata->command) {
- case H5T_CONV_INIT:
- assert (sizeof(int)>=4);
- cdata->need_bkg = H5T_BKG_NO;
- break;
-
- case H5T_CONV_FREE:
- /* Free private data */
- break;
-
- case H5T_CONV_CONV:
- /* The conversion */
- if (NULL==(src=H5I_object(src_id)) ||
- NULL==H5I_object(dst_id))
- HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
-
- s = (uint8_t*)buf + (buf_stride?buf_stride:4)*(nelmts-1);
- d = (uint8_t*)buf + (buf_stride?buf_stride:8)*(nelmts-1);
- for (elmtno=0; elmtno<nelmts; elmtno++) {
-
- /*
- * If this is the last element to convert (that is, the first
- * element of the buffer) then the source and destination areas
- * overlap so we need to use a temp buf for the destination.
- */
- if ((void*)s==buf)
- d = tmp;
-
- /* Convert the integer to a sign and magnitude */
- switch (src->shared->u.atomic.u.i.sign) {
- case H5T_SGN_NONE:
- sign = 0;
- break;
-
- case H5T_SGN_2:
- if (s[3] & 0x80) {
- sign = 1;
- for (i=0,cin=1; i<4; i++,cin=cout) {
- s[i] = ~s[i];
- cout = ((unsigned)(s[i])+cin > 0xff) ? 1 : 0;
- s[i] += cin;
- }
- } else {
- sign = 0;
- }
- break;
-
- default:
- HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported integer sign method");
- }
-
- /*
- * Where is the most significant bit that is set? We could do
- * this in a loop, but testing it this way might be faster.
- */
- if (s[3]) {
- if (s[3] & 0x80) mbits = 32;
- else if (s[3] & 0x40) mbits = 31;
- else if (s[3] & 0x20) mbits = 30;
- else if (s[3] & 0x10) mbits = 29;
- else if (s[3] & 0x08) mbits = 28;
- else if (s[3] & 0x04) mbits = 27;
- else if (s[3] & 0x02) mbits = 26;
- else if (s[3] & 0x01) mbits = 25;
- } else if (s[2]) {
- if (s[2] & 0x80) mbits = 24;
- else if (s[2] & 0x40) mbits = 23;
- else if (s[2] & 0x20) mbits = 22;
- else if (s[2] & 0x10) mbits = 21;
- else if (s[2] & 0x08) mbits = 20;
- else if (s[2] & 0x04) mbits = 19;
- else if (s[2] & 0x02) mbits = 18;
- else if (s[2] & 0x01) mbits = 17;
- } else if (s[1]) {
- if (s[1] & 0x80) mbits = 16;
- else if (s[1] & 0x40) mbits = 15;
- else if (s[1] & 0x20) mbits = 14;
- else if (s[1] & 0x10) mbits = 13;
- else if (s[1] & 0x08) mbits = 12;
- else if (s[1] & 0x04) mbits = 11;
- else if (s[1] & 0x02) mbits = 10;
- else if (s[1] & 0x01) mbits = 9;
- } else if (s[0]) {
- if (s[0] & 0x80) mbits = 8;
- else if (s[0] & 0x40) mbits = 7;
- else if (s[0] & 0x20) mbits = 6;
- else if (s[0] & 0x10) mbits = 5;
- else if (s[0] & 0x08) mbits = 4;
- else if (s[0] & 0x04) mbits = 3;
- else if (s[0] & 0x02) mbits = 2;
- else if (s[0] & 0x01) mbits = 1;
- } else {
- /*zero*/
- d[7] = d[6] = d[5] = d[4] = d[3] = d[2] = d[1] = d[0] = 0;
- continue;
- }
-
- /*
- * The sign and exponent.
- */
- exponent = (mbits - 1) + 1023;
- d[7] = (sign<<7) | ((exponent>>4) & 0x7f);
- d[6] = (exponent & 0x0f) << 4;
-
- /*
- * The mantissa.
- */
- switch (mbits) {
- case 32:
- d[5] = d[4] = d[3] = d[1] = d[0] = 0;
- break;
-
- case 31:
- d[6] |= 0x0f & (s[3]>>2);
- d[5] = (s[3]<<6) | (s[2]>>2);
- d[4] = (s[2]<<6) | (s[1]>>2);
- d[3] = (s[1]<<6) | (s[0]>>2);
- d[2] = (s[0]<<6);
- d[1] = d[0] = 0;
- break;
-
- case 30:
- d[6] |= 0x0f & (s[3]>>1);
- d[5] = (s[3]<<7) | (s[2]>>1);
- d[4] = (s[2]<<7) | (s[1]>>1);
- d[3] = (s[1]<<7) | (s[0]>>1);
- d[2] = (s[0]<<7);
- d[1] = d[0] = 0;
- break;
-
- case 29:
- d[6] |= 0x0f & s[3];
- d[5] = s[2];
- d[4] = s[1];
- d[3] = s[0];
- d[2] = d[1] = d[0] = 0;
- break;
-
- case 28:
- d[6] |= ((s[3]<<1) | (s[2]>>7)) & 0x0f;
- d[5] = (s[2]<<1) | (s[1]>>7);
- d[4] = (s[1]<<1) | (s[0]>>7);
- d[3] = (s[0]<<1);
- d[2] = d[1] = d[0] = 0;
- break;
-
- case 27:
- d[6] |= ((s[3]<<2) | (s[2]>>6)) & 0x0f;
- d[5] = (s[2]<<2) | (s[1]>>6);
- d[4] = (s[1]<<2) | (s[0]>>6);
- d[3] = (s[0]<<2);
- d[2] = d[1] = d[0] = 0;
- break;
-
- case 26:
- d[6] |= ((s[3]<<3) | (s[2]>>5)) & 0x0f;
- d[5] = (s[2]<<3) | (s[1]>>5);
- d[4] = (s[1]<<3) | (s[0]>>5);
- d[3] = (s[0]<<3);
- d[2] = d[1] = d[0] = 0;
- break;
-
- case 25:
- d[6] |= 0x0f & (s[2]>>4);
- d[5] = (s[2]<<4) | (s[1]>>4);
- d[4] = (s[1]<<4) | (s[0]>>4);
- d[3] = (s[0]<<4);
- d[2] = d[1] = d[0] = 0;
- break;
-
- case 24:
- d[6] |= 0x0f & (s[2]>>3);
- d[5] = (s[2]<<5) | (s[1]>>3);
- d[4] = (s[1]<<5) | (s[0]>>3);
- d[3] = (s[0]<<5);
- d[2] = d[1] = d[0] = 0;
- break;
-
- case 23:
- d[6] |= 0x0f & (s[2]>>2);
- d[5] = (s[2]<<6) | (s[1]>>2);
- d[4] = (s[1]<<6) | (s[0]>>2);
- d[3] = (s[0]<<6);
- d[2] = d[1] = d[0] = 0;
- break;
-
- case 22:
- d[6] |= 0x0f & (s[2]>>1);
- d[5] = (s[2]<<7) | (s[1]>>1);
- d[4] = (s[1]<<7) | (s[0]>>1);
- d[3] = (s[0]<<7);
- d[2] = d[1] = d[0] = 0;
- break;
-
- case 21:
- d[6] |= 0x0f & s[2];
- d[5] = s[1];
- d[4] = s[0];
- d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 20:
- d[6] |= ((s[2]<<1) | (s[1]>>7)) & 0x0f;
- d[5] = (s[1]<<1) | (s[0]>>7);
- d[4] = (s[0]<<1);
- d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 19:
- d[6] |= ((s[2]<<2) | (s[1]>>6)) & 0x0f;
- d[5] = (s[1]<<2) | (s[0]>>6);
- d[4] = (s[0]<<2);
- d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 18:
- d[6] |= ((s[2]<<3) | (s[1]>>5)) & 0x0f;
- d[5] = (s[1]<<3) | (s[0]>>5);
- d[4] = (s[0]<<3);
- d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 17:
- d[6] |= 0x0f & (s[1]>>4);
- d[5] = (s[1]<<4) | (s[0]>>4);
- d[4] = (s[0]<<4);
- d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 16:
- d[6] |= 0x0f & (s[1]>>3);
- d[5] = (s[1]<<5) | (s[0]>>3);
- d[4] = (s[0]<<5);
- d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 15:
- d[6] |= 0x0f & (s[1]>>2);
- d[5] = (s[1]<<6) | (s[0]>>2);
- d[4] = (s[0]<<6);
- d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 14:
- d[6] |= 0x0f & (s[1]>>1);
- d[5] = (s[1]<<7) | (s[0]>>1);
- d[4] = (s[0]<<7);
- d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 13:
- d[6] |= 0x0f & s[1];
- d[5] = s[0];
- d[4] = d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 12:
- d[6] |= ((s[1]<<1) | (s[0]>>7)) & 0x0f;
- d[5] = (s[0]<<1);
- d[4] = d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 11:
- d[6] |= ((s[1]<<2) | (s[0]>>6)) & 0x0f;
- d[5] = (s[0]<<2);
- d[4] = d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 10:
- d[6] |= ((s[1]<<3) | (s[0]>>5)) & 0x0f;
- d[5] = (s[0]<<3);
- d[4] = d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 9:
- d[6] |= 0x0f & (s[0]>>4);
- d[5] = (s[0]<<4);
- d[4] = d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 8:
- d[6] |= 0x0f & (s[0]>>3);
- d[5] = (s[0]<<5);
- d[4] = d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 7:
- d[6] |= 0x0f & (s[0]>>2);
- d[5] = (s[0]<<6);
- d[4] = d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 6:
- d[6] |= 0x0f & (s[0]>>1);
- d[5] = (s[0]<<7);
- d[4] = d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 5:
- d[6] |= 0x0f & s[0];
- d[5] = d[4] = d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 4:
- d[6] |= (s[0]<<1) & 0x0f;
- d[5] = d[4] = d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 3:
- d[6] |= (s[0]<<2) & 0x0f;
- d[5] = d[4] = d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 2:
- d[6] |= (s[0]<<3) & 0x0f;
- d[5] = d[4] = d[3] = d[2] = d[1] = d[0] = 0;
- break;
-
- case 1:
- d[5] = d[4] = d[3] = d[2] = d[1] = d[0] = 0;
- break;
- }
-
- /*
- * Copy temp buffer to the destination. This only happens for
- * the first value in the array, the last value processed. See
- * beginning of loop.
- */
- if (d==tmp)
- HDmemcpy (s, d, 8);
-
- /* Advance pointers */
- if (buf_stride) {
- s -= buf_stride;
- d -= buf_stride;
- } else {
- s -= 4;
- d -= 8;
- }
- }
- break;
-
- default:
- /* Some other command we don't know about yet.*/
- HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command");
- }
-
-done:
- FUNC_LEAVE_NOAPI(ret_value);
-}
-
-
-/*-------------------------------------------------------------------------
* Function: H5T_conv_f_i
*
* Purpose: Convert one floating-point type to an integer. This is
diff --git a/src/H5Tpkg.h b/src/H5Tpkg.h
index eb57d65..e562c66 100644
--- a/src/H5Tpkg.h
+++ b/src/H5Tpkg.h
@@ -1179,12 +1179,6 @@ H5_DLL herr_t H5T_conv_ldouble_ullong(hid_t src_id, hid_t dst_id,
void *buf, void *bkg,
hid_t dset_xfer_plist);
-H5_DLL herr_t H5T_conv_i32le_f64le(hid_t src_id, hid_t dst_id,
- H5T_cdata_t *cdata, size_t nelmts,
- size_t buf_stride, size_t bkg_stride,
- void *_buf, void *bkg,
- hid_t dset_xfer_plist);
-
/* Bit twiddling functions */
H5_DLL void H5T_bit_copy(uint8_t *dst, size_t dst_offset, const uint8_t *src,
size_t src_offset, size_t size);