Lines 60-70
Link Here
|
60 |
unsigned char *buffer, size_t *j, int *buf_len, unsigned size); |
60 |
unsigned char *buffer, size_t *j, int *buf_len, unsigned size); |
61 |
static void H5Z_nbit_decompress_one_atomic(unsigned char *data, size_t data_offset, |
61 |
static void H5Z_nbit_decompress_one_atomic(unsigned char *data, size_t data_offset, |
62 |
unsigned char *buffer, size_t *j, int *buf_len, parms_atomic p); |
62 |
unsigned char *buffer, size_t *j, int *buf_len, parms_atomic p); |
63 |
static void H5Z_nbit_decompress_one_array(unsigned char *data, size_t data_offset, |
63 |
static herr_t H5Z__nbit_decompress_one_array(unsigned char *data, size_t data_offset, |
64 |
unsigned char *buffer, size_t *j, int *buf_len, const unsigned parms[]); |
64 |
unsigned char *buffer, size_t *j, int *buf_len, const unsigned parms[]); |
65 |
static void H5Z_nbit_decompress_one_compound(unsigned char *data, size_t data_offset, |
65 |
static herr_t H5Z__nbit_decompress_one_compound(unsigned char *data, size_t data_offset, |
66 |
unsigned char *buffer, size_t *j, int *buf_len, const unsigned parms[]); |
66 |
unsigned char *buffer, size_t *j, int *buf_len, const unsigned parms[]); |
67 |
static void H5Z_nbit_decompress(unsigned char *data, unsigned d_nelmts, unsigned char *buffer, |
67 |
static herr_t H5Z__nbit_decompress(unsigned char *data, unsigned d_nelmts, unsigned char *buffer, |
68 |
const unsigned parms[]); |
68 |
const unsigned parms[]); |
69 |
static void H5Z_nbit_compress_one_nooptype(unsigned char *data, size_t data_offset, |
69 |
static void H5Z_nbit_compress_one_nooptype(unsigned char *data, size_t data_offset, |
70 |
unsigned char *buffer, size_t *j, int *buf_len, unsigned size); |
70 |
unsigned char *buffer, size_t *j, int *buf_len, unsigned size); |
Lines 897-903
Link Here
|
897 |
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "memory allocation failed for nbit decompression") |
897 |
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "memory allocation failed for nbit decompression") |
898 |
|
898 |
|
899 |
/* decompress the buffer */ |
899 |
/* decompress the buffer */ |
900 |
H5Z_nbit_decompress(outbuf, d_nelmts, (unsigned char *)*buf, cd_values); |
900 |
if(H5Z__nbit_decompress(outbuf, d_nelmts, (unsigned char *)*buf, cd_values) < 0) |
|
|
901 |
HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, 0, "can't decompress buffer") |
901 |
} /* end if */ |
902 |
} /* end if */ |
902 |
/* output; compress */ |
903 |
/* output; compress */ |
903 |
else { |
904 |
else { |
Lines 1046-1057
Link Here
|
1046 |
} |
1047 |
} |
1047 |
} |
1048 |
} |
1048 |
|
1049 |
|
1049 |
static void |
1050 |
static herr_t |
1050 |
H5Z_nbit_decompress_one_array(unsigned char *data, size_t data_offset, |
1051 |
H5Z__nbit_decompress_one_array(unsigned char *data, size_t data_offset, |
1051 |
unsigned char *buffer, size_t *j, int *buf_len, const unsigned parms[]) |
1052 |
unsigned char *buffer, size_t *j, int *buf_len, const unsigned parms[]) |
1052 |
{ |
1053 |
{ |
1053 |
unsigned i, total_size, base_class, base_size, n, begin_index; |
1054 |
unsigned i, total_size, base_class, base_size, n, begin_index; |
1054 |
parms_atomic p; |
1055 |
parms_atomic p; |
|
|
1056 |
herr_t ret_value = SUCCEED; /* Return value */ |
1057 |
|
1058 |
FUNC_ENTER_STATIC |
1055 |
|
1059 |
|
1056 |
total_size = parms[parms_index++]; |
1060 |
total_size = parms[parms_index++]; |
1057 |
base_class = parms[parms_index++]; |
1061 |
base_class = parms[parms_index++]; |
Lines 1062-1068
Link Here
|
1062 |
p.order = parms[parms_index++]; |
1066 |
p.order = parms[parms_index++]; |
1063 |
p.precision = parms[parms_index++]; |
1067 |
p.precision = parms[parms_index++]; |
1064 |
p.offset = parms[parms_index++]; |
1068 |
p.offset = parms[parms_index++]; |
1065 |
n = total_size/p.size; |
1069 |
|
|
|
1070 |
/* Check values of precision and offset */ |
1071 |
if(p.precision > p.size * 8 || (p.precision + p.offset) > p.size * 8) |
1072 |
HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "invalid datatype precision/offset") |
1073 |
|
1074 |
n = total_size / p.size; |
1066 |
for(i = 0; i < n; i++) |
1075 |
for(i = 0; i < n; i++) |
1067 |
H5Z_nbit_decompress_one_atomic(data, data_offset + i*p.size, |
1076 |
H5Z_nbit_decompress_one_atomic(data, data_offset + i*p.size, |
1068 |
buffer, j, buf_len, p); |
1077 |
buffer, j, buf_len, p); |
Lines 1072-1079
Link Here
|
1072 |
n = total_size/base_size; /* number of base_type elements inside the array datatype */ |
1081 |
n = total_size/base_size; /* number of base_type elements inside the array datatype */ |
1073 |
begin_index = parms_index; |
1082 |
begin_index = parms_index; |
1074 |
for(i = 0; i < n; i++) { |
1083 |
for(i = 0; i < n; i++) { |
1075 |
H5Z_nbit_decompress_one_array(data, data_offset + i*base_size, |
1084 |
if(H5Z__nbit_decompress_one_array(data, data_offset + i * base_size, |
1076 |
buffer, j, buf_len, parms); |
1085 |
buffer, j, buf_len, parms) < 0) |
|
|
1086 |
HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, FAIL, "can't decompress array") |
1077 |
parms_index = begin_index; |
1087 |
parms_index = begin_index; |
1078 |
} |
1088 |
} |
1079 |
break; |
1089 |
break; |
Lines 1082-1089
Link Here
|
1082 |
n = total_size/base_size; /* number of base_type elements inside the array datatype */ |
1092 |
n = total_size/base_size; /* number of base_type elements inside the array datatype */ |
1083 |
begin_index = parms_index; |
1093 |
begin_index = parms_index; |
1084 |
for(i = 0; i < n; i++) { |
1094 |
for(i = 0; i < n; i++) { |
1085 |
H5Z_nbit_decompress_one_compound(data, data_offset + i*base_size, |
1095 |
if(H5Z__nbit_decompress_one_compound(data, data_offset + i * base_size, |
1086 |
buffer, j, buf_len, parms); |
1096 |
buffer, j, buf_len, parms) < 0) |
|
|
1097 |
HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, FAIL, "can't decompress compound") |
1087 |
parms_index = begin_index; |
1098 |
parms_index = begin_index; |
1088 |
} |
1099 |
} |
1089 |
break; |
1100 |
break; |
Lines 1094-1144
Link Here
|
1094 |
default: |
1105 |
default: |
1095 |
HDassert(0 && "This Should never be executed!"); |
1106 |
HDassert(0 && "This Should never be executed!"); |
1096 |
} /* end switch */ |
1107 |
} /* end switch */ |
|
|
1108 |
|
1109 |
done: |
1110 |
FUNC_LEAVE_NOAPI(ret_value) |
1097 |
} |
1111 |
} |
1098 |
|
1112 |
|
1099 |
static void |
1113 |
static herr_t |
1100 |
H5Z_nbit_decompress_one_compound(unsigned char *data, size_t data_offset, |
1114 |
H5Z__nbit_decompress_one_compound(unsigned char *data, size_t data_offset, |
1101 |
unsigned char *buffer, size_t *j, int *buf_len, const unsigned parms[]) |
1115 |
unsigned char *buffer, size_t *j, int *buf_len, const unsigned parms[]) |
1102 |
{ |
1116 |
{ |
1103 |
unsigned i, nmembers, member_offset, member_class, size; |
1117 |
unsigned i, nmembers, member_offset, member_class, member_size, used_size = 0, size; |
1104 |
parms_atomic p; |
1118 |
parms_atomic p; |
|
|
1119 |
herr_t ret_value = SUCCEED; /* Return value */ |
1105 |
|
1120 |
|
1106 |
parms_index++; /* skip total size of compound datatype */ |
1121 |
FUNC_ENTER_STATIC |
|
|
1122 |
|
1123 |
size = parms[parms_index++]; |
1107 |
nmembers = parms[parms_index++]; |
1124 |
nmembers = parms[parms_index++]; |
1108 |
|
1125 |
|
1109 |
for(i = 0; i < nmembers; i++) { |
1126 |
for(i = 0; i < nmembers; i++) { |
1110 |
member_offset = parms[parms_index++]; |
1127 |
member_offset = parms[parms_index++]; |
1111 |
member_class = parms[parms_index++]; |
1128 |
member_class = parms[parms_index++]; |
|
|
1129 |
|
1130 |
/* Check for overflow */ |
1131 |
member_size = parms[parms_index]; |
1132 |
used_size += member_size; |
1133 |
if(used_size > size) |
1134 |
HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "compound member offset overflowed compound size") |
1112 |
switch(member_class) { |
1135 |
switch(member_class) { |
1113 |
case H5Z_NBIT_ATOMIC: |
1136 |
case H5Z_NBIT_ATOMIC: |
1114 |
p.size = parms[parms_index++]; |
1137 |
p.size = member_size; |
|
|
1138 |
/* Advance past member size */ |
1139 |
parms_index++; |
1115 |
p.order = parms[parms_index++]; |
1140 |
p.order = parms[parms_index++]; |
1116 |
p.precision = parms[parms_index++]; |
1141 |
p.precision = parms[parms_index++]; |
1117 |
p.offset = parms[parms_index++]; |
1142 |
p.offset = parms[parms_index++]; |
|
|
1143 |
|
1144 |
/* Check values of precision and offset */ |
1145 |
if(p.precision > p.size * 8 || (p.precision + p.offset) > p.size * 8) |
1146 |
HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "invalid datatype precision/offset") |
1147 |
|
1118 |
H5Z_nbit_decompress_one_atomic(data, data_offset + member_offset, |
1148 |
H5Z_nbit_decompress_one_atomic(data, data_offset + member_offset, |
1119 |
buffer, j, buf_len, p); |
1149 |
buffer, j, buf_len, p); |
1120 |
break; |
1150 |
break; |
1121 |
case H5Z_NBIT_ARRAY: |
1151 |
case H5Z_NBIT_ARRAY: |
1122 |
H5Z_nbit_decompress_one_array(data, data_offset + member_offset, |
1152 |
if(H5Z__nbit_decompress_one_array(data, data_offset + member_offset, |
1123 |
buffer, j, buf_len, parms); |
1153 |
buffer, j, buf_len, parms) < 0) |
|
|
1154 |
HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, FAIL, "can't decompress array") |
1124 |
break; |
1155 |
break; |
1125 |
case H5Z_NBIT_COMPOUND: |
1156 |
case H5Z_NBIT_COMPOUND: |
1126 |
H5Z_nbit_decompress_one_compound(data, data_offset+member_offset, |
1157 |
if(H5Z__nbit_decompress_one_compound(data, data_offset+member_offset, |
1127 |
buffer, j, buf_len, parms); |
1158 |
buffer, j, buf_len, parms) < 0) |
|
|
1159 |
HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, FAIL, "can't decompress compound") |
1128 |
break; |
1160 |
break; |
1129 |
case H5Z_NBIT_NOOPTYPE: |
1161 |
case H5Z_NBIT_NOOPTYPE: |
1130 |
size = parms[parms_index++]; |
1162 |
/* Advance past member size */ |
|
|
1163 |
parms_index++; |
1131 |
H5Z_nbit_decompress_one_nooptype(data, data_offset+member_offset, |
1164 |
H5Z_nbit_decompress_one_nooptype(data, data_offset+member_offset, |
1132 |
buffer, j, buf_len, size); |
1165 |
buffer, j, buf_len, member_size); |
1133 |
break; |
1166 |
break; |
1134 |
default: |
1167 |
default: |
1135 |
HDassert(0 && "This Should never be executed!"); |
1168 |
HDassert(0 && "This Should never be executed!"); |
1136 |
} /* end switch */ |
1169 |
} /* end switch */ |
1137 |
} |
1170 |
} |
|
|
1171 |
|
1172 |
done: |
1173 |
FUNC_LEAVE_NOAPI(ret_value) |
1138 |
} |
1174 |
} |
1139 |
|
1175 |
|
1140 |
static void |
1176 |
static herr_t |
1141 |
H5Z_nbit_decompress(unsigned char *data, unsigned d_nelmts, unsigned char *buffer, |
1177 |
H5Z__nbit_decompress(unsigned char *data, unsigned d_nelmts, unsigned char *buffer, |
1142 |
const unsigned parms[]) |
1178 |
const unsigned parms[]) |
1143 |
{ |
1179 |
{ |
1144 |
/* i: index of data, j: index of buffer, |
1180 |
/* i: index of data, j: index of buffer, |
Lines 1146-1151
Link Here
|
1146 |
size_t i, j, size; |
1182 |
size_t i, j, size; |
1147 |
int buf_len; |
1183 |
int buf_len; |
1148 |
parms_atomic p; |
1184 |
parms_atomic p; |
|
|
1185 |
herr_t ret_value = SUCCEED; /* Return value */ |
1186 |
|
1187 |
FUNC_ENTER_STATIC |
1149 |
|
1188 |
|
1150 |
/* may not have to initialize to zeros */ |
1189 |
/* may not have to initialize to zeros */ |
1151 |
for(i = 0; i < d_nelmts*parms[4]; i++) data[i] = 0; |
1190 |
for(i = 0; i < d_nelmts*parms[4]; i++) data[i] = 0; |
Lines 1161-1166
Link Here
|
1161 |
p.order = parms[5]; |
1200 |
p.order = parms[5]; |
1162 |
p.precision = parms[6]; |
1201 |
p.precision = parms[6]; |
1163 |
p.offset = parms[7]; |
1202 |
p.offset = parms[7]; |
|
|
1203 |
|
1204 |
/* Check values of precision and offset */ |
1205 |
if(p.precision > p.size * 8 || (p.precision + p.offset) > p.size * 8) |
1206 |
HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "invalid datatype precision/offset") |
1207 |
|
1164 |
for(i = 0; i < d_nelmts; i++) { |
1208 |
for(i = 0; i < d_nelmts; i++) { |
1165 |
H5Z_nbit_decompress_one_atomic(data, i*p.size, buffer, &j, &buf_len, p); |
1209 |
H5Z_nbit_decompress_one_atomic(data, i*p.size, buffer, &j, &buf_len, p); |
1166 |
} |
1210 |
} |
Lines 1169-1175
Link Here
|
1169 |
size = parms[4]; |
1213 |
size = parms[4]; |
1170 |
parms_index = 4; |
1214 |
parms_index = 4; |
1171 |
for(i = 0; i < d_nelmts; i++) { |
1215 |
for(i = 0; i < d_nelmts; i++) { |
1172 |
H5Z_nbit_decompress_one_array(data, i*size, buffer, &j, &buf_len, parms); |
1216 |
if(H5Z__nbit_decompress_one_array(data, i*size, buffer, &j, &buf_len, parms) < 0) |
|
|
1217 |
HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, FAIL, "can't decompress array") |
1173 |
parms_index = 4; |
1218 |
parms_index = 4; |
1174 |
} |
1219 |
} |
1175 |
break; |
1220 |
break; |
Lines 1177-1189
Link Here
|
1177 |
size = parms[4]; |
1222 |
size = parms[4]; |
1178 |
parms_index = 4; |
1223 |
parms_index = 4; |
1179 |
for(i = 0; i < d_nelmts; i++) { |
1224 |
for(i = 0; i < d_nelmts; i++) { |
1180 |
H5Z_nbit_decompress_one_compound(data, i*size, buffer, &j, &buf_len, parms); |
1225 |
if(H5Z__nbit_decompress_one_compound(data, i*size, buffer, &j, &buf_len, parms) < 0) |
|
|
1226 |
HGOTO_ERROR(H5E_PLINE, H5E_CANTFILTER, FAIL, "can't decompress compound") |
1181 |
parms_index = 4; |
1227 |
parms_index = 4; |
1182 |
} |
1228 |
} |
1183 |
break; |
1229 |
break; |
1184 |
default: |
1230 |
default: |
1185 |
HDassert(0 && "This Should never be executed!"); |
1231 |
HDassert(0 && "This Should never be executed!"); |
1186 |
} /* end switch */ |
1232 |
} /* end switch */ |
|
|
1233 |
|
1234 |
done: |
1235 |
FUNC_LEAVE_NOAPI(ret_value) |
1187 |
} |
1236 |
} |
1188 |
|
1237 |
|
1189 |
static void H5Z_nbit_compress_one_byte(unsigned char *data, size_t data_offset, int k, int begin_i, |
1238 |
static void H5Z_nbit_compress_one_byte(unsigned char *data, size_t data_offset, int k, int begin_i, |