summaryrefslogtreecommitdiffstats
path: root/src/H5Z.c
diff options
context:
space:
mode:
authorRobb Matzke <matzke@llnl.gov>1998-08-06 19:39:22 (GMT)
committerRobb Matzke <matzke@llnl.gov>1998-08-06 19:39:22 (GMT)
commitde875442351b3ddd204b65d371536e63de6be8ff (patch)
tree70a5b576c5335e57b8ae210741c14f255a301c13 /src/H5Z.c
parent430b1a9c84257bac574fddd09d90cb8676d02cb7 (diff)
downloadhdf5-de875442351b3ddd204b65d371536e63de6be8ff.zip
hdf5-de875442351b3ddd204b65d371536e63de6be8ff.tar.gz
hdf5-de875442351b3ddd204b65d371536e63de6be8ff.tar.bz2
[svn-r578] Changes since 19980805
---------------------- ./MANIFEST Replaced Compression.html with Filters.html ./doc/html/Filters.html ./src/H5Ocomp.c ./src/H5P.c ./src/H5Ppublic.h ./src/H5Z.c ./src/H5Zprivate.h Added two extra arguments to H5Pget_filter() in order to retrieve the filter name. The name is the name registered for the filter with H5Zregister(), but if the dataset creation property originally came from an existing file then the name is that which is stored in the file. ./tools/h5ls.c The `-v' option now prints the names of the filters. ./src/H5B.c ./src/H5Fistore.c ./src/H5O.c ./src/H5Oefl.c ./src/H5Oprivate.h ./src/H5P.c Plugged a memory leak. ./src/H5MMprivate.h H5MM_malloc(0) and H5MM_calloc(0) actually allocate a single byte in order to be sure that we get a valid pointer. ./src/H5S.c ./src/H5Sselect.c Fixed pointer->integer conversions in error return values in three places.
Diffstat (limited to 'src/H5Z.c')
-rw-r--r--src/H5Z.c44
1 files changed, 16 insertions, 28 deletions
diff --git a/src/H5Z.c b/src/H5Z.c
index 9919023..e415790 100644
--- a/src/H5Z.c
+++ b/src/H5Z.c
@@ -24,30 +24,10 @@ static intn interface_initialize_g = FALSE;
static herr_t H5Z_init_interface (void);
static void H5Z_term_interface (void);
-/*
- * The filter table maps filter identification numbers to structs that
- * contain a pointers to the filter function and timing statistics.
- */
-typedef struct H5Z_class_t {
- H5Z_filter_t id; /*filter ID number */
- char *comment; /*comment for debugging */
- H5Z_func_t func; /*the filter function */
-
-#ifdef H5Z_DEBUG
- struct {
- hsize_t total; /*total number of bytes processed */
- hsize_t errors; /*bytes of total attributable to errors */
- H5_timer_t timer; /*execution time including errors */
- } stats[2]; /*0=output, 1=input */
-#endif
-} H5Z_class_t;
-
static size_t H5Z_table_alloc_g = 0;
static size_t H5Z_table_used_g = 0;
static H5Z_class_t *H5Z_table_g = NULL;
-static H5Z_class_t *H5Z_find(H5Z_filter_t id);
-
/* Predefined filters */
static size_t H5Z_filter_deflate(uintn flags, size_t cd_nelmts,
const uintn cd_values[], size_t nbytes,
@@ -123,7 +103,7 @@ H5Z_term_interface (void)
}
/* Truncate the comment to fit in the field */
- strncpy(comment, H5Z_table_g[i].comment, sizeof comment);
+ strncpy(comment, H5Z_table_g[i].name, sizeof comment);
comment[sizeof(comment)-1] = '\0';
/*
@@ -151,7 +131,7 @@ H5Z_term_interface (void)
/* Free the table */
for (i=0; i<H5Z_table_used_g; i++) {
- H5MM_xfree(H5Z_table_g[i].comment);
+ H5MM_xfree(H5Z_table_g[i].name);
}
H5Z_table_g = H5MM_xfree(H5Z_table_g);
H5Z_table_used_g = H5Z_table_alloc_g = 0;
@@ -252,12 +232,12 @@ H5Z_register (H5Z_filter_t id, const char *comment, H5Z_func_t func)
i = H5Z_table_used_g++;
HDmemset(H5Z_table_g+i, 0, sizeof(H5Z_class_t));
H5Z_table_g[i].id = id;
- H5Z_table_g[i].comment = H5MM_xstrdup(comment);
+ H5Z_table_g[i].name = H5MM_xstrdup(comment);
H5Z_table_g[i].func = func;
} else {
/* Replace old contents */
- H5MM_xfree(H5Z_table_g[i].comment);
- H5Z_table_g[i].comment = H5MM_xstrdup(comment);
+ H5MM_xfree(H5Z_table_g[i].name);
+ H5Z_table_g[i].name = H5MM_xstrdup(comment);
H5Z_table_g[i].func = func;
}
@@ -354,7 +334,7 @@ H5Z_append(H5O_pline_t *pline, H5Z_filter_t filter, uintn flags,
*
*-------------------------------------------------------------------------
*/
-static H5Z_class_t *
+H5Z_class_t *
H5Z_find(H5Z_filter_t id)
{
size_t i;
@@ -544,7 +524,10 @@ H5Z_filter_deflate (uintn flags, size_t cd_nelmts, const uintn cd_values[],
z_stream z_strm;
size_t nalloc = *buf_size;
- outbuf = H5MM_malloc(nalloc);
+ if (NULL==(outbuf = H5MM_malloc(nalloc))) {
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0,
+ "memory allocation failed for deflate uncompression");
+ }
HDmemset(&z_strm, 0, sizeof(z_strm));
z_strm.next_in = *buf;
z_strm.avail_in = nbytes;
@@ -562,7 +545,12 @@ H5Z_filter_deflate (uintn flags, size_t cd_nelmts, const uintn cd_values[],
}
if (Z_OK==status && 0==z_strm.avail_out) {
nalloc *= 2;
- outbuf = H5MM_realloc(outbuf, nalloc);
+ if (NULL==(outbuf = H5MM_realloc(outbuf, nalloc))) {
+ inflateEnd(&z_strm);
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0,
+ "memory allocation failed for deflate "
+ "uncompression");
+ }
z_strm.next_out = (char*)outbuf + z_strm.total_out;
z_strm.avail_out = nalloc - z_strm.total_out;
}