This commit is contained in:
dmh 2014-04-21 10:14:26 -06:00
commit fd2d8e71de
6 changed files with 55 additions and 20 deletions

1
cf
View File

@ -24,7 +24,6 @@ CFLAGS=""
PREFIX=/usr/local PREFIX=/usr/local
stddir="/usr/local" stddir="/usr/local"
if test "x$cmds" = x ; then if test "x$cmds" = x ; then
cmds="" cmds=""
#cmds="all" #cmds="all"

View File

@ -130,6 +130,8 @@ ncaux_add_field(void* tag, const char *name, nc_type field_type,
cmpd->nfields++; cmpd->nfields++;
done: done:
if(newfields)
free(newfields);
return status; return status;
} }

View File

@ -1161,6 +1161,10 @@ read_type(NC_GRP_INFO_T *grp, hid_t hdf_typeid, char *type_name)
{ {
int nmembers; int nmembers;
unsigned int m; unsigned int m;
char* member_name = NULL;
#ifdef JNA
char jna[1001];
#endif
type->nc_type_class = NC_COMPOUND; type->nc_type_class = NC_COMPOUND;
@ -1171,22 +1175,32 @@ read_type(NC_GRP_INFO_T *grp, hid_t hdf_typeid, char *type_name)
{ {
hid_t member_hdf_typeid; hid_t member_hdf_typeid;
hid_t member_native_typeid; hid_t member_native_typeid;
char *member_name;
size_t member_offset; size_t member_offset;
H5T_class_t mem_class; H5T_class_t mem_class;
nc_type member_xtype; nc_type member_xtype;
retval = NC_NOERR;
/* Get the typeid and native typeid of this member of the /* Get the typeid and native typeid of this member of the
* compound type. */ * compound type. */
if ((member_hdf_typeid = H5Tget_member_type(type->native_hdf_typeid, m)) < 0) if ((member_hdf_typeid = H5Tget_member_type(type->native_hdf_typeid, m)) < 0)
return NC_EHDFERR; return NC_EHDFERR;
if ((member_native_typeid = H5Tget_native_type(member_hdf_typeid, H5T_DIR_DEFAULT)) < 0) if ((member_native_typeid = H5Tget_native_type(member_hdf_typeid, H5T_DIR_DEFAULT)) < 0)
return NC_EHDFERR; return NC_EHDFERR;
/* Get the name of the member.*/ /* Get the name of the member.*/
member_name = H5Tget_member_name(type->native_hdf_typeid, m); member_name = H5Tget_member_name(type->native_hdf_typeid, m);
if (!member_name || strlen(member_name) > NC_MAX_NAME) if (!member_name || strlen(member_name) > NC_MAX_NAME) {
return NC_EBADNAME; retval = NC_EBADNAME;
break;
}
#ifdef JNA
else {
strncpy(jna,member_name,1000);
member_name = jna;
}
#endif
/* Offset in bytes on *this* platform. */ /* Offset in bytes on *this* platform. */
member_offset = H5Tget_member_offset(type->native_hdf_typeid, m); member_offset = H5Tget_member_offset(type->native_hdf_typeid, m);
@ -1200,42 +1214,55 @@ read_type(NC_GRP_INFO_T *grp, hid_t hdf_typeid, char *type_name)
hsize_t dims[NC_MAX_VAR_DIMS]; hsize_t dims[NC_MAX_VAR_DIMS];
int d; int d;
if ((ndims = H5Tget_array_ndims(member_hdf_typeid)) < 0) if ((ndims = H5Tget_array_ndims(member_hdf_typeid)) < 0) {
return NC_EHDFERR; retval = NC_EHDFERR;
if (H5Tget_array_dims(member_hdf_typeid, dims, NULL) != ndims) break;
return NC_EHDFERR; }
if (H5Tget_array_dims(member_hdf_typeid, dims, NULL) != ndims) {
retval = NC_EHDFERR;
break;
}
for (d = 0; d < ndims; d++) for (d = 0; d < ndims; d++)
dim_size[d] = dims[d]; dim_size[d] = dims[d];
/* What is the netCDF typeid of this member? */ /* What is the netCDF typeid of this member? */
if ((retval = get_netcdf_type(grp->nc4_info, H5Tget_super(member_hdf_typeid), if ((retval = get_netcdf_type(grp->nc4_info, H5Tget_super(member_hdf_typeid),
&member_xtype))) &member_xtype)))
return retval; break;
/* Add this member to our list of fields in this compound type. */ /* Add this member to our list of fields in this compound type. */
if ((retval = nc4_field_list_add(&type->u.c.field, type->u.c.num_fields++, member_name, if ((retval = nc4_field_list_add(&type->u.c.field, type->u.c.num_fields++, member_name,
member_offset, H5Tget_super(member_hdf_typeid), member_offset, H5Tget_super(member_hdf_typeid),
H5Tget_super(member_native_typeid), H5Tget_super(member_native_typeid),
member_xtype, ndims, dim_size))) member_xtype, ndims, dim_size)))
return retval; break;
} }
else else
{ {
/* What is the netCDF typeid of this member? */ /* What is the netCDF typeid of this member? */
if ((retval = get_netcdf_type(grp->nc4_info, member_native_typeid, if ((retval = get_netcdf_type(grp->nc4_info, member_native_typeid,
&member_xtype))) &member_xtype)))
return retval; break;
/* Add this member to our list of fields in this compound type. */ /* Add this member to our list of fields in this compound type. */
if ((retval = nc4_field_list_add(&type->u.c.field, type->u.c.num_fields++, member_name, if ((retval = nc4_field_list_add(&type->u.c.field, type->u.c.num_fields++, member_name,
member_offset, member_hdf_typeid, member_native_typeid, member_offset, member_hdf_typeid, member_native_typeid,
member_xtype, 0, NULL))) member_xtype, 0, NULL)))
return retval; break;
} }
/* HDF5 allocated this for us. */ #ifndef JNA
free(member_name); /* Free the member name (which HDF5 allocated for us). */
if(member_name != NULL) free(member_name);
#endif
member_name = NULL;
} }
#ifndef JNA
if(member_name != NULL)
free(member_name);
#endif
if(retval) /* error exit from loop */
return retval;
} }
break; break;
@ -1363,6 +1390,7 @@ read_type(NC_GRP_INFO_T *grp, hid_t hdf_typeid, char *type_name)
#endif #endif
member_name = NULL; member_name = NULL;
} }
#ifndef JNA #ifndef JNA
if(member_name != NULL) if(member_name != NULL)
free(member_name); free(member_name);

View File

@ -2320,7 +2320,7 @@ write_dim(NC_DIM_INFO_T *dim, NC_GRP_INFO_T *grp, int write_dimid)
if (v1) if (v1)
{ {
hsize_t *new_size; hsize_t *new_size = NULL;
NC_GRP_INFO_T *g; NC_GRP_INFO_T *g;
NC_DIM_INFO_T *dim1; NC_DIM_INFO_T *dim1;
int d1; int d1;
@ -2347,8 +2347,10 @@ write_dim(NC_DIM_INFO_T *dim, NC_GRP_INFO_T *grp, int write_dimid)
} }
} }
} }
if (H5Dset_extent(v1->hdf_datasetid, new_size) < 0) if (H5Dset_extent(v1->hdf_datasetid, new_size) < 0) {
BAIL(NC_EHDFERR); free(new_size);
BAIL(NC_EHDFERR);
}
free(new_size); free(new_size);
} }
} }
@ -2363,6 +2365,7 @@ write_dim(NC_DIM_INFO_T *dim, NC_GRP_INFO_T *grp, int write_dimid)
return NC_NOERR; return NC_NOERR;
exit: exit:
return retval; return retval;
} }

View File

@ -412,7 +412,10 @@ main(
cdlname = (char*)emalloc(NC_MAX_NAME); cdlname = (char*)emalloc(NC_MAX_NAME);
cdlname = nulldup(argv[0]); cdlname = nulldup(argv[0]);
if(strlen(cdlname) > NC_MAX_NAME) cdlname[NC_MAX_NAME] = '\0'; if(cdlname != NULL) {
if(strlen(cdlname) > NC_MAX_NAME)
cdlname[NC_MAX_NAME] = '\0';
}
} }
/* Standard Unidata java interface => usingclassic */ /* Standard Unidata java interface => usingclassic */

4
wjna
View File

@ -2,8 +2,8 @@
REBUILD=1 REBUILD=1
VS=12 #VS=12
#VS=10 VS=10
JNADIR="c:/opt/jna" JNADIR="c:/opt/jna"