From 42c64598dc63a44cbd2e0ca2b4e5d56bafb82f73 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Sun, 27 Jan 2019 10:51:25 -0700 Subject: [PATCH 01/11] created function create_dim_wo_var() --- libhdf5/nc4hdf.c | 153 +++++++++------- nc_test4/tst_rename2.c | 386 ++++++++++++++++++++++------------------- 2 files changed, 301 insertions(+), 238 deletions(-) diff --git a/libhdf5/nc4hdf.c b/libhdf5/nc4hdf.c index 679629451..3877ddeab 100644 --- a/libhdf5/nc4hdf.c +++ b/libhdf5/nc4hdf.c @@ -1707,6 +1707,92 @@ write_var(NC_VAR_INFO_T *var, NC_GRP_INFO_T *grp, nc_bool_t write_dimid) return NC_NOERR; } +/** + * @internal Write a HDF5 dataset which is a dimension without a + * coordinate variable. This is a special 1-D dataset. + * + * @param dim Pointer to dim info struct. + * @param grp Pointer to group info struct. + * @param write_dimid + * + * @returns ::NC_NOERR No error. + * @returns ::NC_EPERM Read-only file. + * @returns ::NC_EHDFERR HDF5 returned error. + * @author Ed Hartnett + */ +static int +create_dim_wo_var(NC_DIM_INFO_T *dim) +{ + NC_HDF5_DIM_INFO_T *hdf5_dim; + NC_HDF5_GRP_INFO_T *hdf5_grp; + hid_t spaceid = -1, create_propid = -1; + hsize_t dims[1], max_dims[1], chunk_dims[1] = {1}; + char dimscale_wo_var[NC_MAX_NAME]; + int retval; + + LOG((4, "%s: creating dim %s", __func__, dim->hdr.name)); + + /* Sanity check */ + assert(!dim->coord_var); + + /* Get HDF5-specific dim and group info. */ + hdf5_grp = (NC_HDF5_GRP_INFO_T *)dim->container->format_grp_info; + hdf5_dim = (NC_HDF5_DIM_INFO_T *)dim->format_dim_info; + + /* Create a property list. */ + if ((create_propid = H5Pcreate(H5P_DATASET_CREATE)) < 0) + BAIL(NC_EHDFERR); + + /* Turn off recording of times associated with this object. */ + if (H5Pset_obj_track_times(create_propid, 0) < 0) + BAIL(NC_EHDFERR); + + /* Set size of dataset to size of dimension. */ + dims[0] = dim->len; + max_dims[0] = dim->len; + + /* If this dimension scale is unlimited (i.e. it's an unlimited + * dimension), then set up chunking, with a chunksize of 1. */ + if (dim->unlimited) + { + max_dims[0] = H5S_UNLIMITED; + if (H5Pset_chunk(create_propid, 1, chunk_dims) < 0) + BAIL(NC_EHDFERR); + } + + /* Set up space. */ + if ((spaceid = H5Screate_simple(1, dims, max_dims)) < 0) + BAIL(NC_EHDFERR); + + /* Turn on creation-order tracking. */ + if (H5Pset_attr_creation_order(create_propid, H5P_CRT_ORDER_TRACKED| + H5P_CRT_ORDER_INDEXED) < 0) + BAIL(NC_EHDFERR); + + /* Create the dataset that will be the dimension scale. */ + LOG((4, "%s: about to H5Dcreate1 a dimscale dataset %s", __func__, + dim->hdr.name)); + if ((hdf5_dim->hdf_dimscaleid = H5Dcreate2(hdf5_grp->hdf_grpid, dim->hdr.name, + H5T_IEEE_F32BE, spaceid, + H5P_DEFAULT, create_propid, + H5P_DEFAULT)) < 0) + BAIL(NC_EHDFERR); + + /* Indicate that this is a scale. Also indicate that not + * be shown to the user as a variable. It is hidden. It is + * a DIM WITHOUT A VARIABLE! */ + sprintf(dimscale_wo_var, "%s%10d", DIM_WITHOUT_VARIABLE, (int)dim->len); + if (H5DSset_scale(hdf5_dim->hdf_dimscaleid, dimscale_wo_var) < 0) + BAIL(NC_EHDFERR); + +exit: + if (spaceid > 0 && H5Sclose(spaceid) < 0) + BAIL2(NC_EHDFERR); + if (create_propid > 0 && H5Pclose(create_propid) < 0) + BAIL2(NC_EHDFERR); + return NC_NOERR; +} + /** * @internal Write a dimension. * @@ -1722,76 +1808,21 @@ write_var(NC_VAR_INFO_T *var, NC_GRP_INFO_T *grp, nc_bool_t write_dimid) static int write_dim(NC_DIM_INFO_T *dim, NC_GRP_INFO_T *grp, nc_bool_t write_dimid) { - hid_t spaceid = -1, create_propid = -1; - NC_HDF5_GRP_INFO_T *hdf5_grp; NC_HDF5_DIM_INFO_T *hdf5_dim; - hsize_t *new_size = NULL; int retval = NC_NOERR; assert(dim && dim->format_dim_info && grp && grp->format_grp_info); /* Get HDF5-specific dim and group info. */ hdf5_dim = (NC_HDF5_DIM_INFO_T *)dim->format_dim_info; - hdf5_grp = (NC_HDF5_GRP_INFO_T *)grp->format_grp_info; /* If there's no dimscale dataset for this dim, create one, * and mark that it should be hidden from netCDF as a * variable. (That is, it should appear as a dimension * without an associated variable.) */ if (!hdf5_dim->hdf_dimscaleid) - { - hsize_t dims[1], max_dims[1], chunk_dims[1] = {1}; - char dimscale_wo_var[NC_MAX_NAME]; - - LOG((4, "%s: creating dim %s", __func__, dim->hdr.name)); - - /* Sanity check */ - assert(!dim->coord_var); - - /* Create a property list. If this dimension scale is - * unlimited (i.e. it's an unlimited dimension), then set - * up chunking, with a chunksize of 1. */ - if ((create_propid = H5Pcreate(H5P_DATASET_CREATE)) < 0) - BAIL(NC_EHDFERR); - - /* Turn off recording of times associated with this object. */ - if (H5Pset_obj_track_times(create_propid,0)<0) - BAIL(NC_EHDFERR); - - dims[0] = dim->len; - max_dims[0] = dim->len; - if (dim->unlimited) - { - max_dims[0] = H5S_UNLIMITED; - if (H5Pset_chunk(create_propid, 1, chunk_dims) < 0) - BAIL(NC_EHDFERR); - } - - /* Set up space. */ - if ((spaceid = H5Screate_simple(1, dims, max_dims)) < 0) - BAIL(NC_EHDFERR); - - /* Turn on creation-order tracking. */ - if (H5Pset_attr_creation_order(create_propid, H5P_CRT_ORDER_TRACKED| - H5P_CRT_ORDER_INDEXED) < 0) - BAIL(NC_EHDFERR); - - /* Create the dataset that will be the dimension scale. */ - LOG((4, "%s: about to H5Dcreate1 a dimscale dataset %s", __func__, - dim->hdr.name)); - if ((hdf5_dim->hdf_dimscaleid = H5Dcreate2(hdf5_grp->hdf_grpid, dim->hdr.name, - H5T_IEEE_F32BE, spaceid, - H5P_DEFAULT, create_propid, - H5P_DEFAULT)) < 0) - BAIL(NC_EHDFERR); - - /* Indicate that this is a scale. Also indicate that not - * be shown to the user as a variable. It is hidden. It is - * a DIM WITHOUT A VARIABLE! */ - sprintf(dimscale_wo_var, "%s%10d", DIM_WITHOUT_VARIABLE, (int)dim->len); - if (H5DSset_scale(hdf5_dim->hdf_dimscaleid, dimscale_wo_var) < 0) - BAIL(NC_EHDFERR); - } + if ((retval = create_dim_wo_var(dim))) + BAIL(retval); /* Did we extend an unlimited dimension? */ if (dim->extended) @@ -1806,6 +1837,7 @@ write_dim(NC_DIM_INFO_T *dim, NC_GRP_INFO_T *grp, nc_bool_t write_dimid) if (v1) { NC_HDF5_VAR_INFO_T *hdf5_v1; + hsize_t *new_size; int d1; hdf5_v1 = (NC_HDF5_VAR_INFO_T *)v1->format_var_info; @@ -1821,6 +1853,7 @@ write_dim(NC_DIM_INFO_T *dim, NC_GRP_INFO_T *grp, nc_bool_t write_dimid) } if (H5Dset_extent(hdf5_v1->hdf_datasetid, new_size) < 0) BAIL(NC_EHDFERR); + free(new_size); } } @@ -1833,12 +1866,6 @@ write_dim(NC_DIM_INFO_T *dim, NC_GRP_INFO_T *grp, nc_bool_t write_dimid) BAIL(retval); exit: - if (spaceid > 0 && H5Sclose(spaceid) < 0) - BAIL2(NC_EHDFERR); - if (create_propid > 0 && H5Pclose(create_propid) < 0) - BAIL2(NC_EHDFERR); - if (new_size) - free(new_size); return retval; } diff --git a/nc_test4/tst_rename2.c b/nc_test4/tst_rename2.c index b031fb209..583523fc2 100644 --- a/nc_test4/tst_rename2.c +++ b/nc_test4/tst_rename2.c @@ -34,6 +34,9 @@ See \ref copyright file for more info. #define NDIM1 1 #define NDIM3 3 #define NUM_ENDDEF_SETTINGS 2 +#define D1_NAME "d1" +#define D2_NAME "d2" +#define TMP_NAME "t1" int main(int argc, char **argv) @@ -44,195 +47,228 @@ main(int argc, char **argv) fprintf(stderr,"*** Testing more renames\n"); - for (format = 0; format < NUM_FORMATS; format++) +/* for (format = 0; format < NUM_FORMATS; format++) */ +/* { */ +/* fprintf(stderr,"*** test renaming 3 dimensions with format %d...", */ +/* formats[format]); */ +/* { */ +/* char filename[NC_MAX_NAME + 1]; */ +/* int ncid, dimid[NDIM3]; */ +/* int dimid_in; */ +/* int enddef_setting; */ + +/* if (nc_set_default_format(formats[format], NULL)) ERR; */ + +/* for (enddef_setting = 0; enddef_setting < NUM_ENDDEF_SETTINGS; */ +/* enddef_setting++) */ +/* { */ +/* sprintf(filename, "%s_%d_%d.nc", TEST_NAME, formats[format], */ +/* enddef_setting); */ + +/* /\* Create file with three dims. *\/ */ +/* if (nc_create(filename, 0, &ncid)) ERR; */ +/* if (nc_def_dim(ncid, LAT, DIM1_LEN, &dimid[0])) ERR; */ +/* if (nc_def_dim(ncid, LON, DIM1_LEN, &dimid[1])) ERR; */ +/* if (nc_def_dim(ncid, LEV, DIM1_LEN, &dimid[2])) ERR; */ + +/* if (enddef_setting) */ +/* { */ +/* if (nc_enddef(ncid)) ERR; */ +/* if (nc_redef(ncid)) ERR; */ +/* } */ + +/* /\* Rename the dimensions. *\/ */ +/* if (nc_rename_dim(ncid, 0, DIM_X)) ERR; */ +/* if (nc_rename_dim(ncid, 1, DIM_Y)) ERR; */ +/* if (nc_rename_dim(ncid, 2, DIM_Z)) ERR; */ + +/* /\* Close the file. *\/ */ +/* if (nc_close(ncid)) ERR; */ + +/* /\* Reopen the file and check. *\/ */ +/* if (nc_open(filename, NC_NOWRITE, &ncid)) ERR; */ +/* if (nc_inq_dimid(ncid, DIM_X, &dimid_in)) ERR; */ +/* if (dimid_in != 0) ERR; */ +/* if (nc_inq_dimid(ncid, DIM_Y, &dimid_in)) ERR; */ +/* if (dimid_in != 1) ERR; */ +/* if (nc_inq_dimid(ncid, DIM_Z, &dimid_in)) ERR; */ +/* if (dimid_in != 2) ERR; */ +/* if (nc_close(ncid)) ERR; */ +/* } /\* next enddef setting *\/ */ +/* } */ +/* SUMMARIZE_ERR; */ + +/* fprintf(stderr,"*** test renaming 3 dims with coord data format %d...", */ +/* formats[format]); */ +/* { */ +/* char filename[NC_MAX_NAME + 1]; */ +/* int ncid, dimid[NDIM3], varid[NDIM3]; */ +/* int dimid_in; */ +/* int lat_data[DIM1_LEN] = {0, 1, 2, 3}; */ +/* int lon_data[DIM1_LEN] = {0, 10, 20, 30}; */ +/* int lev_data[DIM1_LEN] = {0, 100, 200, 300}; */ + +/* if (nc_set_default_format(formats[format], NULL)) ERR; */ + +/* sprintf(filename, "%s_data_%d.nc", TEST_NAME, formats[format]); */ + +/* /\* Create file with three dims. *\/ */ +/* if (nc_create(filename, 0, &ncid)) ERR; */ +/* if (nc_def_dim(ncid, LAT, DIM1_LEN, &dimid[0])) ERR; */ +/* if (nc_def_dim(ncid, LON, DIM1_LEN, &dimid[1])) ERR; */ +/* if (nc_def_dim(ncid, LEV, DIM1_LEN, &dimid[2])) ERR; */ + +/* /\* Define coordinate data vars. *\/ */ +/* if (nc_def_var(ncid, LAT, NC_INT, NDIM1, &dimid[0], &varid[0])) ERR; */ +/* if (nc_def_var(ncid, LON, NC_INT, NDIM1, &dimid[1], &varid[1])) ERR; */ +/* if (nc_def_var(ncid, LEV, NC_INT, NDIM1, &dimid[2], &varid[2])) ERR; */ + +/* if (nc_enddef(ncid)) ERR; */ + +/* if (nc_put_var(ncid, 0, lat_data)) ERR; */ +/* if (nc_put_var(ncid, 1, lon_data)) ERR; */ +/* if (nc_put_var(ncid, 2, lev_data)) ERR; */ + +/* if (nc_close(ncid)) ERR; */ +/* if (nc_open(filename, NC_WRITE, &ncid)) ERR; */ +/* if (nc_redef(ncid)) ERR; */ + +/* /\* Rename the dimensions. *\/ */ +/* if (nc_rename_dim(ncid, 0, DIM_X)) ERR; */ +/* if (nc_rename_dim(ncid, 1, DIM_Y)) ERR; */ +/* if (nc_rename_dim(ncid, 2, DIM_Z)) ERR; */ + +/* /\* Close the file. *\/ */ +/* if (nc_close(ncid)) ERR; */ + +/* /\* Reopen the file and check. *\/ */ +/* if (nc_open(filename, NC_NOWRITE, &ncid)) ERR; */ +/* if (nc_inq_dimid(ncid, DIM_X, &dimid_in)) ERR; */ +/* if (dimid_in != 0) ERR; */ +/* if (nc_inq_dimid(ncid, DIM_Y, &dimid_in)) ERR; */ +/* if (dimid_in != 1) ERR; */ +/* if (nc_inq_dimid(ncid, DIM_Z, &dimid_in)) ERR; */ +/* if (dimid_in != 2) ERR; */ +/* if (nc_close(ncid)) ERR; */ +/* } */ +/* SUMMARIZE_ERR; */ + +/* } /\* next format *\/ */ + +/* #define FILE_NAME1 "tst_dims_foo1.nc" */ +/* #define DIM_NAME "lat_T42" */ +/* #define VAR_NAME DIM_NAME */ +/* #define DIM_NAME2 "lat" */ +/* #define VAR_NAME2 DIM_NAME2 */ +/* #define RANK_lat_T42 1 */ +/* fprintf(stderr,"*** test renaming with sync..."); */ +/* { */ +/* int ncid, dimid, varid; */ +/* char file_name[NC_MAX_NAME + 1]; */ +/* char name[NC_MAX_NAME + 1]; */ + +/* /\* Create file with dim and associated coordinate var. *\/ */ +/* sprintf(file_name, "%s_sync.nc", TEST_NAME); */ +/* nc_set_log_level(4); */ +/* if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; */ +/* if (nc_def_dim(ncid, DIM_NAME_END, DIM1_LEN, &dimid)) ERR; */ +/* if (nc_def_var(ncid, DIM_NAME_END, NC_INT, NDIM1, &dimid, &varid)) ERR; */ +/* if (nc_close(ncid)) ERR; */ + +/* if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; */ +/* if (nc_def_dim(ncid, DIM_NAME_START, DIM1_LEN, &dimid)) ERR; */ +/* if (nc_def_var(ncid, DIM_NAME_END, NC_INT, NDIM1, &dimid, &varid)) ERR; */ +/* if (nc_close(ncid)) ERR; */ + +/* if (nc_open(file_name, NC_WRITE, &ncid)) ERR; */ +/* if (nc_rename_dim(ncid, dimid, DIM_NAME_END)) ERR; */ +/* if (nc_close(ncid)) ERR; */ + +/* /\* Reopen file and check, *\/ */ +/* if (nc_open(file_name, NC_WRITE, &ncid)) ERR; */ +/* if (nc_inq_dimid(ncid, DIM_NAME_END, &dimid)) ERR; */ +/* if (nc_inq_varid(ncid, DIM_NAME_END, &varid)) ERR; */ +/* if (nc_inq_dimname(ncid, dimid, name)) ERR; */ +/* if (strcmp(name, DIM_NAME_END)) ERR; */ +/* if (nc_inq_varname(ncid, varid, name)) ERR; */ +/* if (strcmp(name, DIM_NAME_END)) ERR; */ +/* if (nc_close(ncid)) ERR; */ +/* } */ +/* SUMMARIZE_ERR; */ +/* fprintf(stderr,"*** test renaming with sync..."); */ +/* { */ +/* int ncid, dimid, varid; */ +/* char file_name[NC_MAX_NAME + 1]; */ +/* char name[NC_MAX_NAME + 1]; */ + +/* /\* Create file with dim and associated coordinate var. *\/ */ +/* sprintf(file_name, "%s_sync.nc", TEST_NAME); */ +/* if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; */ +/* if (nc_def_dim(ncid, DIM_NAME_START, DIM1_LEN, &dimid)) ERR; */ +/* if (nc_def_var(ncid, VAR_NAME_START, NC_INT, NDIM1, &dimid, &varid)) ERR; */ +/* if (nc_close(ncid)) ERR; */ + +/* nc_set_log_level(4); */ +/* /\* Open the file and rename the var. *\/ */ +/* if (nc_open(file_name, NC_WRITE, &ncid)) ERR; */ +/* if (nc_inq_dimid(ncid, DIM_NAME_START, &dimid)) ERR; */ +/* if (nc_inq_varid(ncid, VAR_NAME_START, &varid)) ERR; */ +/* if (nc_rename_var(ncid, varid, VAR_NAME_END)) ERR; */ + +/* /\* Sync to disk. Now the file has one dim and one var. The dim */ +/* * is a dimscale only dataset, and the var is a dataset with a */ +/* * dimscale attached pointing to the dim. *\/ */ +/* /\* if (nc_sync(ncid)) ERR; *\/ */ +/* if (nc_close(ncid)) ERR; */ +/* if (nc_open(file_name, NC_WRITE, &ncid)) ERR; */ +/* /\* Now rename the dim to the same name as the var. After this */ +/* * there will be one dataset, called DIM_NAME_END, which will be */ +/* * a dimscale. *\/ */ +/* if (nc_rename_dim(ncid, dimid, DIM_NAME_END)) ERR; */ +/* if (nc_close(ncid)) ERR; */ + +/* /\* Reopen file and check, *\/ */ +/* if (nc_open(file_name, NC_WRITE, &ncid)) ERR; */ +/* if (nc_inq_dimid(ncid, DIM_NAME_END, &dimid)) ERR; */ +/* if (nc_inq_varid(ncid, VAR_NAME_END, &varid)) ERR; */ +/* if (nc_inq_dimname(ncid, dimid, name)) ERR; */ +/* if (strcmp(name, DIM_NAME_END)) ERR; */ +/* if (nc_inq_varname(ncid, varid, name)) ERR; */ +/* if (strcmp(name, VAR_NAME_END)) ERR; */ +/* if (nc_close(ncid)) ERR; */ +/* } */ +/* SUMMARIZE_ERR; */ + fprintf(stderr,"*** test renaming two coord vars..."); { - fprintf(stderr,"*** test renaming 3 dimensions with format %d...", - formats[format]); - { - char filename[NC_MAX_NAME + 1]; - int ncid, dimid[NDIM3]; - int dimid_in; - int enddef_setting; - - if (nc_set_default_format(formats[format], NULL)) ERR; - - for (enddef_setting = 0; enddef_setting < NUM_ENDDEF_SETTINGS; - enddef_setting++) - { - sprintf(filename, "%s_%d_%d.nc", TEST_NAME, formats[format], - enddef_setting); - - /* Create file with three dims. */ - if (nc_create(filename, 0, &ncid)) ERR; - if (nc_def_dim(ncid, LAT, DIM1_LEN, &dimid[0])) ERR; - if (nc_def_dim(ncid, LON, DIM1_LEN, &dimid[1])) ERR; - if (nc_def_dim(ncid, LEV, DIM1_LEN, &dimid[2])) ERR; - - if (enddef_setting) - { - if (nc_enddef(ncid)) ERR; - if (nc_redef(ncid)) ERR; - } - - /* Rename the dimensions. */ - if (nc_rename_dim(ncid, 0, DIM_X)) ERR; - if (nc_rename_dim(ncid, 1, DIM_Y)) ERR; - if (nc_rename_dim(ncid, 2, DIM_Z)) ERR; - - /* Close the file. */ - if (nc_close(ncid)) ERR; - - /* Reopen the file and check. */ - if (nc_open(filename, NC_NOWRITE, &ncid)) ERR; - if (nc_inq_dimid(ncid, DIM_X, &dimid_in)) ERR; - if (dimid_in != 0) ERR; - if (nc_inq_dimid(ncid, DIM_Y, &dimid_in)) ERR; - if (dimid_in != 1) ERR; - if (nc_inq_dimid(ncid, DIM_Z, &dimid_in)) ERR; - if (dimid_in != 2) ERR; - if (nc_close(ncid)) ERR; - } /* next enddef setting */ - } - SUMMARIZE_ERR; - - fprintf(stderr,"*** test renaming 3 dims with coord data format %d...", - formats[format]); - { - char filename[NC_MAX_NAME + 1]; - int ncid, dimid[NDIM3], varid[NDIM3]; - int dimid_in; - int lat_data[DIM1_LEN] = {0, 1, 2, 3}; - int lon_data[DIM1_LEN] = {0, 10, 20, 30}; - int lev_data[DIM1_LEN] = {0, 100, 200, 300}; - - if (nc_set_default_format(formats[format], NULL)) ERR; - - sprintf(filename, "%s_data_%d.nc", TEST_NAME, formats[format]); - - /* Create file with three dims. */ - if (nc_create(filename, 0, &ncid)) ERR; - if (nc_def_dim(ncid, LAT, DIM1_LEN, &dimid[0])) ERR; - if (nc_def_dim(ncid, LON, DIM1_LEN, &dimid[1])) ERR; - if (nc_def_dim(ncid, LEV, DIM1_LEN, &dimid[2])) ERR; - - /* Define coordinate data vars. */ - if (nc_def_var(ncid, LAT, NC_INT, NDIM1, &dimid[0], &varid[0])) ERR; - if (nc_def_var(ncid, LON, NC_INT, NDIM1, &dimid[1], &varid[1])) ERR; - if (nc_def_var(ncid, LEV, NC_INT, NDIM1, &dimid[2], &varid[2])) ERR; - - if (nc_enddef(ncid)) ERR; - - if (nc_put_var(ncid, 0, lat_data)) ERR; - if (nc_put_var(ncid, 1, lon_data)) ERR; - if (nc_put_var(ncid, 2, lev_data)) ERR; - - if (nc_close(ncid)) ERR; - if (nc_open(filename, NC_WRITE, &ncid)) ERR; - if (nc_redef(ncid)) ERR; - - /* Rename the dimensions. */ - if (nc_rename_dim(ncid, 0, DIM_X)) ERR; - if (nc_rename_dim(ncid, 1, DIM_Y)) ERR; - if (nc_rename_dim(ncid, 2, DIM_Z)) ERR; - - /* Close the file. */ - if (nc_close(ncid)) ERR; - - /* Reopen the file and check. */ - if (nc_open(filename, NC_NOWRITE, &ncid)) ERR; - if (nc_inq_dimid(ncid, DIM_X, &dimid_in)) ERR; - if (dimid_in != 0) ERR; - if (nc_inq_dimid(ncid, DIM_Y, &dimid_in)) ERR; - if (dimid_in != 1) ERR; - if (nc_inq_dimid(ncid, DIM_Z, &dimid_in)) ERR; - if (dimid_in != 2) ERR; - if (nc_close(ncid)) ERR; - } - SUMMARIZE_ERR; - - } /* next format */ - -#define FILE_NAME1 "tst_dims_foo1.nc" -#define DIM_NAME "lat_T42" -#define VAR_NAME DIM_NAME -#define DIM_NAME2 "lat" -#define VAR_NAME2 DIM_NAME2 -#define RANK_lat_T42 1 - fprintf(stderr,"*** test renaming with sync..."); - { - int ncid, dimid, varid; - char file_name[NC_MAX_NAME + 1]; - char name[NC_MAX_NAME + 1]; - - /* Create file with dim and associated coordinate var. */ - sprintf(file_name, "%s_sync.nc", TEST_NAME); - nc_set_log_level(4); - if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; - if (nc_def_dim(ncid, DIM_NAME_END, DIM1_LEN, &dimid)) ERR; - if (nc_def_var(ncid, DIM_NAME_END, NC_INT, NDIM1, &dimid, &varid)) ERR; - if (nc_close(ncid)) ERR; - - if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; - if (nc_def_dim(ncid, DIM_NAME_START, DIM1_LEN, &dimid)) ERR; - if (nc_def_var(ncid, DIM_NAME_END, NC_INT, NDIM1, &dimid, &varid)) ERR; - if (nc_close(ncid)) ERR; - - if (nc_open(file_name, NC_WRITE, &ncid)) ERR; - if (nc_rename_dim(ncid, dimid, DIM_NAME_END)) ERR; - if (nc_close(ncid)) ERR; - - /* Reopen file and check, */ - if (nc_open(file_name, NC_WRITE, &ncid)) ERR; - if (nc_inq_dimid(ncid, DIM_NAME_END, &dimid)) ERR; - if (nc_inq_varid(ncid, DIM_NAME_END, &varid)) ERR; - if (nc_inq_dimname(ncid, dimid, name)) ERR; - if (strcmp(name, DIM_NAME_END)) ERR; - if (nc_inq_varname(ncid, varid, name)) ERR; - if (strcmp(name, DIM_NAME_END)) ERR; - if (nc_close(ncid)) ERR; - } - SUMMARIZE_ERR; - fprintf(stderr,"*** test renaming with sync..."); - { - int ncid, dimid, varid; + int ncid, dimid1, dimid2, varid1, varid2; char file_name[NC_MAX_NAME + 1]; char name[NC_MAX_NAME + 1]; /* Create file with dim and associated coordinate var. */ sprintf(file_name, "%s_sync.nc", TEST_NAME); if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; - if (nc_def_dim(ncid, DIM_NAME_START, DIM1_LEN, &dimid)) ERR; - if (nc_def_var(ncid, VAR_NAME_START, NC_INT, NDIM1, &dimid, &varid)) ERR; + if (nc_def_dim(ncid, D1_NAME, DIM1_LEN, &dimid1)) ERR; + if (nc_def_dim(ncid, D2_NAME, DIM1_LEN, &dimid2)) ERR; + if (nc_def_var(ncid, D1_NAME, NC_INT, NDIM1, &dimid1, &varid1)) ERR; + if (nc_def_var(ncid, D2_NAME, NC_INT, NDIM1, &dimid2, &varid2)) ERR; if (nc_close(ncid)) ERR; + /* Open the file and rename the vars. */ nc_set_log_level(4); - /* Open the file and rename the var. */ if (nc_open(file_name, NC_WRITE, &ncid)) ERR; - if (nc_inq_dimid(ncid, DIM_NAME_START, &dimid)) ERR; - if (nc_inq_varid(ncid, VAR_NAME_START, &varid)) ERR; - if (nc_rename_var(ncid, varid, VAR_NAME_END)) ERR; - - /* Sync to disk. Now the file has one dim and one var. The dim - * is a dimscale only dataset, and the var is a dataset with a - * dimscale attached pointing to the dim. */ - /* if (nc_sync(ncid)) ERR; */ - if (nc_close(ncid)) ERR; - if (nc_open(file_name, NC_WRITE, &ncid)) ERR; - /* Now rename the dim to the same name as the var. After this - * there will be one dataset, called DIM_NAME_END, which will be - * a dimscale. */ - if (nc_rename_dim(ncid, dimid, DIM_NAME_END)) ERR; + if (nc_rename_var(ncid, varid1, TMP_NAME)) ERR; + /* if (nc_rename_var(ncid, varid2, D1_NAME)) ERR; */ if (nc_close(ncid)) ERR; /* Reopen file and check, */ - if (nc_open(file_name, NC_WRITE, &ncid)) ERR; - if (nc_inq_dimid(ncid, DIM_NAME_END, &dimid)) ERR; - if (nc_inq_varid(ncid, VAR_NAME_END, &varid)) ERR; - if (nc_inq_dimname(ncid, dimid, name)) ERR; - if (strcmp(name, DIM_NAME_END)) ERR; - if (nc_inq_varname(ncid, varid, name)) ERR; - if (strcmp(name, VAR_NAME_END)) ERR; - if (nc_close(ncid)) ERR; + /* if (nc_open(file_name, NC_WRITE, &ncid)) ERR; */ + /* /\* if (nc_inq_dimid(ncid, DIM_NAME_END, &dimid)) ERR; *\/ */ + /* /\* if (nc_inq_varid(ncid, VAR_NAME_END, &varid)) ERR; *\/ */ + /* /\* if (nc_inq_dimname(ncid, dimid, name)) ERR; *\/ */ + /* /\* if (strcmp(name, DIM_NAME_END)) ERR; *\/ */ + /* /\* if (nc_inq_varname(ncid, varid, name)) ERR; *\/ */ + /* /\* if (strcmp(name, VAR_NAME_END)) ERR; *\/ */ + /* if (nc_close(ncid)) ERR; */ } SUMMARIZE_ERR; FINAL_RESULTS; From 627a55cf78db120af5c0f2bca6da581ae2c8e5a7 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Sun, 27 Jan 2019 11:06:02 -0700 Subject: [PATCH 02/11] added function give_var_secret_name() --- include/hdf5internal.h | 5 +++- libhdf5/hdf5var.c | 54 +++++++++++++++++++++++++++++++++--------- libhdf5/nc4hdf.c | 6 ++--- 3 files changed, 50 insertions(+), 15 deletions(-) diff --git a/include/hdf5internal.h b/include/hdf5internal.h index 764e06e59..9f563f41a 100644 --- a/include/hdf5internal.h +++ b/include/hdf5internal.h @@ -135,7 +135,10 @@ int nc4_reform_coord_var(NC_GRP_INFO_T *grp, NC_VAR_INFO_T *coord_var, NC_DIM_IN extern hid_t NC4_image_init(NC_FILE_INFO_T* h5); extern void NC4_image_finalize(void*); -/* These functions are internal to the libhdf5 directory. */ +/* Create HDF5 dataset for dim without a coord var. */ +extern int nc4_create_dim_wo_var(NC_DIM_INFO_T *dim); + +/* Get the fill value for a var. */ int nc4_get_fill_value(NC_FILE_INFO_T *h5, NC_VAR_INFO_T *var, void **fillp); diff --git a/libhdf5/hdf5var.c b/libhdf5/hdf5var.c index cf32c1398..cf59a4295 100644 --- a/libhdf5/hdf5var.c +++ b/libhdf5/hdf5var.c @@ -220,6 +220,36 @@ nc4_find_default_chunksizes2(NC_GRP_INFO_T *grp, NC_VAR_INFO_T *var) return NC_NOERR; } +/** + * @internal Give a var a secret HDF5 name. This is needed when a var + * is defined with the same name as a dim, but it is not a coord var + * of that dim. In that case, the var uses a secret name inside the + * HDF5 file. + * + * @param var Pointer to var info. + * @param name Non-secret name. Should already be UTF8 normalized. + * + * @returns ::NC_NOERR No error. + * @returns ::NC_EMAXNAME Name too long to fit secret prefix. + * @returns ::NC_ENOMEM Out of memory. + * @author Ed Hartnett + */ +static int +give_var_secret_name(NC_VAR_INFO_T *var, const char *name) +{ + /* Set a different hdf5 name for this variable to avoid name + * clash. */ + if (strlen(name) + strlen(NON_COORD_PREPEND) > NC_MAX_NAME) + return NC_EMAXNAME; + if (!(var->hdf5_name = malloc((strlen(NON_COORD_PREPEND) + + strlen(name) + 1) * sizeof(char)))) + return NC_ENOMEM; + + sprintf(var->hdf5_name, "%s%s", NON_COORD_PREPEND, name); + + return NC_NOERR; +} + /** * @internal This is called when a new netCDF-4 variable is defined * with nc_def_var(). @@ -502,17 +532,8 @@ NC4_def_var(int ncid, const char *name, nc_type xtype, * and this var has the same name. */ dim = (NC_DIM_INFO_T*)ncindexlookup(grp->dim,norm_name); if (dim && (!var->ndims || dimidsp[0] != dim->hdr.id)) - { - /* Set a different hdf5 name for this variable to avoid name - * clash. */ - if (strlen(norm_name) + strlen(NON_COORD_PREPEND) > NC_MAX_NAME) - BAIL(NC_EMAXNAME); - if (!(var->hdf5_name = malloc((strlen(NON_COORD_PREPEND) + - strlen(norm_name) + 1) * sizeof(char)))) - BAIL(NC_ENOMEM); - - sprintf(var->hdf5_name, "%s%s", NON_COORD_PREPEND, norm_name); - } + if ((retval = give_var_secret_name(var, norm_name))) + BAIL(retval); /* If this is a coordinate var, it is marked as a HDF5 dimension * scale. (We found dim above.) Otherwise, allocate space to @@ -1039,6 +1060,7 @@ NC4_rename_var(int ncid, int varid, const char *name) NC_HDF5_GRP_INFO_T *hdf5_grp; NC_FILE_INFO_T *h5; NC_VAR_INFO_T *var; + NC_DIM_INFO_T *other_dim; int retval = NC_NOERR; if (!name) @@ -1082,6 +1104,16 @@ NC4_rename_var(int ncid, int varid, const char *name) (h5->cmode & NC_CLASSIC_MODEL)) return NC_ENOTINDEFINE; + /* Is there another dim with this name, for which this var will not + * be a coord var? If so, we have to create a dim without a + * variable for the old name. */ + if ((other_dim = (NC_DIM_INFO_T *)ncindexlookup(grp->dim, name)) && + strcmp(name, var->dim[0]->hdr.name)) + { + if ((retval = nc4_create_dim_wo_var(other_dim))) + return retval; + } + /* Change the HDF5 file, if this var has already been created there. */ if (var->created) diff --git a/libhdf5/nc4hdf.c b/libhdf5/nc4hdf.c index 3877ddeab..c3b79d2b4 100644 --- a/libhdf5/nc4hdf.c +++ b/libhdf5/nc4hdf.c @@ -1720,8 +1720,8 @@ write_var(NC_VAR_INFO_T *var, NC_GRP_INFO_T *grp, nc_bool_t write_dimid) * @returns ::NC_EHDFERR HDF5 returned error. * @author Ed Hartnett */ -static int -create_dim_wo_var(NC_DIM_INFO_T *dim) +int +nc4_create_dim_wo_var(NC_DIM_INFO_T *dim) { NC_HDF5_DIM_INFO_T *hdf5_dim; NC_HDF5_GRP_INFO_T *hdf5_grp; @@ -1821,7 +1821,7 @@ write_dim(NC_DIM_INFO_T *dim, NC_GRP_INFO_T *grp, nc_bool_t write_dimid) * variable. (That is, it should appear as a dimension * without an associated variable.) */ if (!hdf5_dim->hdf_dimscaleid) - if ((retval = create_dim_wo_var(dim))) + if ((retval = nc4_create_dim_wo_var(dim))) BAIL(retval); /* Did we extend an unlimited dimension? */ From c95887cc53c7fbe098fc84d9db0920b955f6c8fe Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Sun, 27 Jan 2019 11:07:57 -0700 Subject: [PATCH 03/11] removed name param from function give_var_secret_name() --- libhdf5/hdf5var.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/libhdf5/hdf5var.c b/libhdf5/hdf5var.c index cf59a4295..f7cb7468c 100644 --- a/libhdf5/hdf5var.c +++ b/libhdf5/hdf5var.c @@ -227,7 +227,6 @@ nc4_find_default_chunksizes2(NC_GRP_INFO_T *grp, NC_VAR_INFO_T *var) * HDF5 file. * * @param var Pointer to var info. - * @param name Non-secret name. Should already be UTF8 normalized. * * @returns ::NC_NOERR No error. * @returns ::NC_EMAXNAME Name too long to fit secret prefix. @@ -235,17 +234,17 @@ nc4_find_default_chunksizes2(NC_GRP_INFO_T *grp, NC_VAR_INFO_T *var) * @author Ed Hartnett */ static int -give_var_secret_name(NC_VAR_INFO_T *var, const char *name) +give_var_secret_name(NC_VAR_INFO_T *var) { /* Set a different hdf5 name for this variable to avoid name * clash. */ - if (strlen(name) + strlen(NON_COORD_PREPEND) > NC_MAX_NAME) + if (strlen(var->hdr.name) + strlen(NON_COORD_PREPEND) > NC_MAX_NAME) return NC_EMAXNAME; if (!(var->hdf5_name = malloc((strlen(NON_COORD_PREPEND) + - strlen(name) + 1) * sizeof(char)))) + strlen(var->hdr.name) + 1) * sizeof(char)))) return NC_ENOMEM; - sprintf(var->hdf5_name, "%s%s", NON_COORD_PREPEND, name); + sprintf(var->hdf5_name, "%s%s", NON_COORD_PREPEND, var->hdr.name); return NC_NOERR; } @@ -532,7 +531,7 @@ NC4_def_var(int ncid, const char *name, nc_type xtype, * and this var has the same name. */ dim = (NC_DIM_INFO_T*)ncindexlookup(grp->dim,norm_name); if (dim && (!var->ndims || dimidsp[0] != dim->hdr.id)) - if ((retval = give_var_secret_name(var, norm_name))) + if ((retval = give_var_secret_name(var))) BAIL(retval); /* If this is a coordinate var, it is marked as a HDF5 dimension From e74ec6f2a087b24cdacaf534d3650ce1dab688d3 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Sun, 27 Jan 2019 11:10:41 -0700 Subject: [PATCH 04/11] made function give_var_secret_name() not static, fixed warning --- include/hdf5internal.h | 4 ++++ libhdf5/hdf5var.c | 6 +++--- libhdf5/nc4hdf.c | 4 ++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/include/hdf5internal.h b/include/hdf5internal.h index 9f563f41a..0d8435c74 100644 --- a/include/hdf5internal.h +++ b/include/hdf5internal.h @@ -138,6 +138,10 @@ extern void NC4_image_finalize(void*); /* Create HDF5 dataset for dim without a coord var. */ extern int nc4_create_dim_wo_var(NC_DIM_INFO_T *dim); +/* Give a var a secret HDF5 name, for use when there is a dim of this + * name, but the var is not a coord var of that dim. */ +extern int nc4_give_var_secret_name(NC_VAR_INFO_T *var); + /* Get the fill value for a var. */ int nc4_get_fill_value(NC_FILE_INFO_T *h5, NC_VAR_INFO_T *var, void **fillp); diff --git a/libhdf5/hdf5var.c b/libhdf5/hdf5var.c index f7cb7468c..c45d22092 100644 --- a/libhdf5/hdf5var.c +++ b/libhdf5/hdf5var.c @@ -233,8 +233,8 @@ nc4_find_default_chunksizes2(NC_GRP_INFO_T *grp, NC_VAR_INFO_T *var) * @returns ::NC_ENOMEM Out of memory. * @author Ed Hartnett */ -static int -give_var_secret_name(NC_VAR_INFO_T *var) +int +nc4_give_var_secret_name(NC_VAR_INFO_T *var) { /* Set a different hdf5 name for this variable to avoid name * clash. */ @@ -531,7 +531,7 @@ NC4_def_var(int ncid, const char *name, nc_type xtype, * and this var has the same name. */ dim = (NC_DIM_INFO_T*)ncindexlookup(grp->dim,norm_name); if (dim && (!var->ndims || dimidsp[0] != dim->hdr.id)) - if ((retval = give_var_secret_name(var))) + if ((retval = nc4_give_var_secret_name(var))) BAIL(retval); /* If this is a coordinate var, it is marked as a HDF5 dimension diff --git a/libhdf5/nc4hdf.c b/libhdf5/nc4hdf.c index c3b79d2b4..9b68ff399 100644 --- a/libhdf5/nc4hdf.c +++ b/libhdf5/nc4hdf.c @@ -1728,7 +1728,7 @@ nc4_create_dim_wo_var(NC_DIM_INFO_T *dim) hid_t spaceid = -1, create_propid = -1; hsize_t dims[1], max_dims[1], chunk_dims[1] = {1}; char dimscale_wo_var[NC_MAX_NAME]; - int retval; + int retval = NC_NOERR; LOG((4, "%s: creating dim %s", __func__, dim->hdr.name)); @@ -1790,7 +1790,7 @@ exit: BAIL2(NC_EHDFERR); if (create_propid > 0 && H5Pclose(create_propid) < 0) BAIL2(NC_EHDFERR); - return NC_NOERR; + return retval; } /** From 660bda1be342a3a072f5a263e274b988d83b2ac8 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Sun, 27 Jan 2019 11:14:29 -0700 Subject: [PATCH 05/11] made function give_var_secret_name() static again --- libhdf5/hdf5var.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libhdf5/hdf5var.c b/libhdf5/hdf5var.c index c45d22092..605d71291 100644 --- a/libhdf5/hdf5var.c +++ b/libhdf5/hdf5var.c @@ -233,8 +233,8 @@ nc4_find_default_chunksizes2(NC_GRP_INFO_T *grp, NC_VAR_INFO_T *var) * @returns ::NC_ENOMEM Out of memory. * @author Ed Hartnett */ -int -nc4_give_var_secret_name(NC_VAR_INFO_T *var) +static int +give_var_secret_name(NC_VAR_INFO_T *var) { /* Set a different hdf5 name for this variable to avoid name * clash. */ @@ -531,7 +531,7 @@ NC4_def_var(int ncid, const char *name, nc_type xtype, * and this var has the same name. */ dim = (NC_DIM_INFO_T*)ncindexlookup(grp->dim,norm_name); if (dim && (!var->ndims || dimidsp[0] != dim->hdr.id)) - if ((retval = nc4_give_var_secret_name(var))) + if ((retval = give_var_secret_name(var))) BAIL(retval); /* If this is a coordinate var, it is marked as a HDF5 dimension @@ -1160,6 +1160,8 @@ NC4_rename_var(int ncid, int varid, const char *name) /* Break up the coordinate variable */ if ((retval = nc4_break_coord_var(grp, var, var->dim[0]))) return retval; + /* if ((retval = give_var_secret_name(var))) */ + /* return retval; */ } /* Check if this should become a coordinate variable. */ From 784dc0e0aded3df81062e0786907aa509232c764 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Sun, 27 Jan 2019 11:17:57 -0700 Subject: [PATCH 06/11] now creating secret hdf5 name on var rename, if needed --- libhdf5/hdf5var.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libhdf5/hdf5var.c b/libhdf5/hdf5var.c index 605d71291..55a7e02ad 100644 --- a/libhdf5/hdf5var.c +++ b/libhdf5/hdf5var.c @@ -1109,8 +1109,14 @@ NC4_rename_var(int ncid, int varid, const char *name) if ((other_dim = (NC_DIM_INFO_T *)ncindexlookup(grp->dim, name)) && strcmp(name, var->dim[0]->hdr.name)) { + /* Create a dim without var dataset for old dim. */ if ((retval = nc4_create_dim_wo_var(other_dim))) return retval; + + /* Give this var a secret HDF5 name so it can co-exist in file + * with dim wp var dataset. */ + if ((retval = give_var_secret_name(var))) + return retval; } /* Change the HDF5 file, if this var has already been created @@ -1160,8 +1166,6 @@ NC4_rename_var(int ncid, int varid, const char *name) /* Break up the coordinate variable */ if ((retval = nc4_break_coord_var(grp, var, var->dim[0]))) return retval; - /* if ((retval = give_var_secret_name(var))) */ - /* return retval; */ } /* Check if this should become a coordinate variable. */ From 1b3f397c4c40f4ba3f251becef7ec833306165ae Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Sun, 27 Jan 2019 11:29:49 -0700 Subject: [PATCH 07/11] added name parameter to give_var_secret_name to base secret name on --- libhdf5/hdf5var.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/libhdf5/hdf5var.c b/libhdf5/hdf5var.c index 55a7e02ad..8362da1b8 100644 --- a/libhdf5/hdf5var.c +++ b/libhdf5/hdf5var.c @@ -227,6 +227,7 @@ nc4_find_default_chunksizes2(NC_GRP_INFO_T *grp, NC_VAR_INFO_T *var) * HDF5 file. * * @param var Pointer to var info. + * @param name Name to use for base of secret name. * * @returns ::NC_NOERR No error. * @returns ::NC_EMAXNAME Name too long to fit secret prefix. @@ -234,17 +235,17 @@ nc4_find_default_chunksizes2(NC_GRP_INFO_T *grp, NC_VAR_INFO_T *var) * @author Ed Hartnett */ static int -give_var_secret_name(NC_VAR_INFO_T *var) +give_var_secret_name(NC_VAR_INFO_T *var, const char *name) { /* Set a different hdf5 name for this variable to avoid name * clash. */ - if (strlen(var->hdr.name) + strlen(NON_COORD_PREPEND) > NC_MAX_NAME) + if (strlen(name) + strlen(NON_COORD_PREPEND) > NC_MAX_NAME) return NC_EMAXNAME; if (!(var->hdf5_name = malloc((strlen(NON_COORD_PREPEND) + - strlen(var->hdr.name) + 1) * sizeof(char)))) + strlen(name) + 1) * sizeof(char)))) return NC_ENOMEM; - sprintf(var->hdf5_name, "%s%s", NON_COORD_PREPEND, var->hdr.name); + sprintf(var->hdf5_name, "%s%s", NON_COORD_PREPEND, name); return NC_NOERR; } @@ -531,7 +532,7 @@ NC4_def_var(int ncid, const char *name, nc_type xtype, * and this var has the same name. */ dim = (NC_DIM_INFO_T*)ncindexlookup(grp->dim,norm_name); if (dim && (!var->ndims || dimidsp[0] != dim->hdr.id)) - if ((retval = give_var_secret_name(var))) + if ((retval = give_var_secret_name(var, var->hdr.name))) BAIL(retval); /* If this is a coordinate var, it is marked as a HDF5 dimension @@ -1114,8 +1115,9 @@ NC4_rename_var(int ncid, int varid, const char *name) return retval; /* Give this var a secret HDF5 name so it can co-exist in file - * with dim wp var dataset. */ - if ((retval = give_var_secret_name(var))) + * with dim wp var dataset. Base the secret name on the new var + * name. */ + if ((retval = give_var_secret_name(var, name))) return retval; } @@ -1123,6 +1125,9 @@ NC4_rename_var(int ncid, int varid, const char *name) there. */ if (var->created) { + char *hdf5_name; + hdf5_name = name; + /* Do we need to read var metadata? */ if (!var->meta_read) if ((retval = nc4_get_var_meta(var))) @@ -1144,7 +1149,7 @@ NC4_rename_var(int ncid, int varid, const char *name) } LOG((3, "Moving dataset %s to %s", var->hdr.name, name)); - if (H5Gmove(hdf5_grp->hdf_grpid, var->hdr.name, name) < 0) + if (H5Gmove(hdf5_grp->hdf_grpid, var->hdr.name, hdf5_name) < 0) BAIL(NC_EHDFERR); } From 828304ed41f77dc4bc5fdef48fbb74686597edb2 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Sun, 27 Jan 2019 11:33:06 -0700 Subject: [PATCH 08/11] now using secret hdf5 var name during renames if needed --- libhdf5/hdf5var.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libhdf5/hdf5var.c b/libhdf5/hdf5var.c index 8362da1b8..dc3176d70 100644 --- a/libhdf5/hdf5var.c +++ b/libhdf5/hdf5var.c @@ -1061,6 +1061,7 @@ NC4_rename_var(int ncid, int varid, const char *name) NC_FILE_INFO_T *h5; NC_VAR_INFO_T *var; NC_DIM_INFO_T *other_dim; + int use_secret_name = 0; int retval = NC_NOERR; if (!name) @@ -1119,6 +1120,7 @@ NC4_rename_var(int ncid, int varid, const char *name) * name. */ if ((retval = give_var_secret_name(var, name))) return retval; + use_secret_name++; } /* Change the HDF5 file, if this var has already been created @@ -1126,7 +1128,7 @@ NC4_rename_var(int ncid, int varid, const char *name) if (var->created) { char *hdf5_name; - hdf5_name = name; + hdf5_name = use_secret_name ? var->hdf5_name: (char *)name; /* Do we need to read var metadata? */ if (!var->meta_read) From e859be9a1ded77dd0af3efdc55c49e7ac0a28a63 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Sun, 27 Jan 2019 11:38:39 -0700 Subject: [PATCH 09/11] more testing --- nc_test4/tst_rename2.c | 345 +++++++++++++++++++++-------------------- 1 file changed, 173 insertions(+), 172 deletions(-) diff --git a/nc_test4/tst_rename2.c b/nc_test4/tst_rename2.c index 583523fc2..fbe3958d8 100644 --- a/nc_test4/tst_rename2.c +++ b/nc_test4/tst_rename2.c @@ -47,200 +47,201 @@ main(int argc, char **argv) fprintf(stderr,"*** Testing more renames\n"); -/* for (format = 0; format < NUM_FORMATS; format++) */ -/* { */ -/* fprintf(stderr,"*** test renaming 3 dimensions with format %d...", */ -/* formats[format]); */ -/* { */ -/* char filename[NC_MAX_NAME + 1]; */ -/* int ncid, dimid[NDIM3]; */ -/* int dimid_in; */ -/* int enddef_setting; */ + for (format = 0; format < NUM_FORMATS; format++) + { + fprintf(stderr,"*** test renaming 3 dimensions with format %d...", + formats[format]); + { + char filename[NC_MAX_NAME + 1]; + int ncid, dimid[NDIM3]; + int dimid_in; + int enddef_setting; -/* if (nc_set_default_format(formats[format], NULL)) ERR; */ + if (nc_set_default_format(formats[format], NULL)) ERR; -/* for (enddef_setting = 0; enddef_setting < NUM_ENDDEF_SETTINGS; */ -/* enddef_setting++) */ -/* { */ -/* sprintf(filename, "%s_%d_%d.nc", TEST_NAME, formats[format], */ -/* enddef_setting); */ + for (enddef_setting = 0; enddef_setting < NUM_ENDDEF_SETTINGS; + enddef_setting++) + { + sprintf(filename, "%s_%d_%d.nc", TEST_NAME, formats[format], + enddef_setting); -/* /\* Create file with three dims. *\/ */ -/* if (nc_create(filename, 0, &ncid)) ERR; */ -/* if (nc_def_dim(ncid, LAT, DIM1_LEN, &dimid[0])) ERR; */ -/* if (nc_def_dim(ncid, LON, DIM1_LEN, &dimid[1])) ERR; */ -/* if (nc_def_dim(ncid, LEV, DIM1_LEN, &dimid[2])) ERR; */ + /* Create file with three dims. */ + if (nc_create(filename, 0, &ncid)) ERR; + if (nc_def_dim(ncid, LAT, DIM1_LEN, &dimid[0])) ERR; + if (nc_def_dim(ncid, LON, DIM1_LEN, &dimid[1])) ERR; + if (nc_def_dim(ncid, LEV, DIM1_LEN, &dimid[2])) ERR; -/* if (enddef_setting) */ -/* { */ -/* if (nc_enddef(ncid)) ERR; */ -/* if (nc_redef(ncid)) ERR; */ -/* } */ + if (enddef_setting) + { + if (nc_enddef(ncid)) ERR; + if (nc_redef(ncid)) ERR; + } -/* /\* Rename the dimensions. *\/ */ -/* if (nc_rename_dim(ncid, 0, DIM_X)) ERR; */ -/* if (nc_rename_dim(ncid, 1, DIM_Y)) ERR; */ -/* if (nc_rename_dim(ncid, 2, DIM_Z)) ERR; */ + /* Rename the dimensions. */ + if (nc_rename_dim(ncid, 0, DIM_X)) ERR; + if (nc_rename_dim(ncid, 1, DIM_Y)) ERR; + if (nc_rename_dim(ncid, 2, DIM_Z)) ERR; -/* /\* Close the file. *\/ */ -/* if (nc_close(ncid)) ERR; */ + /* Close the file. */ + if (nc_close(ncid)) ERR; -/* /\* Reopen the file and check. *\/ */ -/* if (nc_open(filename, NC_NOWRITE, &ncid)) ERR; */ -/* if (nc_inq_dimid(ncid, DIM_X, &dimid_in)) ERR; */ -/* if (dimid_in != 0) ERR; */ -/* if (nc_inq_dimid(ncid, DIM_Y, &dimid_in)) ERR; */ -/* if (dimid_in != 1) ERR; */ -/* if (nc_inq_dimid(ncid, DIM_Z, &dimid_in)) ERR; */ -/* if (dimid_in != 2) ERR; */ -/* if (nc_close(ncid)) ERR; */ -/* } /\* next enddef setting *\/ */ -/* } */ -/* SUMMARIZE_ERR; */ + /* Reopen the file and check. */ + if (nc_open(filename, NC_NOWRITE, &ncid)) ERR; + if (nc_inq_dimid(ncid, DIM_X, &dimid_in)) ERR; + if (dimid_in != 0) ERR; + if (nc_inq_dimid(ncid, DIM_Y, &dimid_in)) ERR; + if (dimid_in != 1) ERR; + if (nc_inq_dimid(ncid, DIM_Z, &dimid_in)) ERR; + if (dimid_in != 2) ERR; + if (nc_close(ncid)) ERR; + } /* next enddef setting */ + } + SUMMARIZE_ERR; -/* fprintf(stderr,"*** test renaming 3 dims with coord data format %d...", */ -/* formats[format]); */ -/* { */ -/* char filename[NC_MAX_NAME + 1]; */ -/* int ncid, dimid[NDIM3], varid[NDIM3]; */ -/* int dimid_in; */ -/* int lat_data[DIM1_LEN] = {0, 1, 2, 3}; */ -/* int lon_data[DIM1_LEN] = {0, 10, 20, 30}; */ -/* int lev_data[DIM1_LEN] = {0, 100, 200, 300}; */ + fprintf(stderr,"*** test renaming 3 dims with coord data format %d...", + formats[format]); + { + char filename[NC_MAX_NAME + 1]; + int ncid, dimid[NDIM3], varid[NDIM3]; + int dimid_in; + int lat_data[DIM1_LEN] = {0, 1, 2, 3}; + int lon_data[DIM1_LEN] = {0, 10, 20, 30}; + int lev_data[DIM1_LEN] = {0, 100, 200, 300}; -/* if (nc_set_default_format(formats[format], NULL)) ERR; */ + if (nc_set_default_format(formats[format], NULL)) ERR; -/* sprintf(filename, "%s_data_%d.nc", TEST_NAME, formats[format]); */ + sprintf(filename, "%s_data_%d.nc", TEST_NAME, formats[format]); -/* /\* Create file with three dims. *\/ */ -/* if (nc_create(filename, 0, &ncid)) ERR; */ -/* if (nc_def_dim(ncid, LAT, DIM1_LEN, &dimid[0])) ERR; */ -/* if (nc_def_dim(ncid, LON, DIM1_LEN, &dimid[1])) ERR; */ -/* if (nc_def_dim(ncid, LEV, DIM1_LEN, &dimid[2])) ERR; */ + /* Create file with three dims. */ + if (nc_create(filename, 0, &ncid)) ERR; + if (nc_def_dim(ncid, LAT, DIM1_LEN, &dimid[0])) ERR; + if (nc_def_dim(ncid, LON, DIM1_LEN, &dimid[1])) ERR; + if (nc_def_dim(ncid, LEV, DIM1_LEN, &dimid[2])) ERR; -/* /\* Define coordinate data vars. *\/ */ -/* if (nc_def_var(ncid, LAT, NC_INT, NDIM1, &dimid[0], &varid[0])) ERR; */ -/* if (nc_def_var(ncid, LON, NC_INT, NDIM1, &dimid[1], &varid[1])) ERR; */ -/* if (nc_def_var(ncid, LEV, NC_INT, NDIM1, &dimid[2], &varid[2])) ERR; */ + /* Define coordinate data vars. */ + if (nc_def_var(ncid, LAT, NC_INT, NDIM1, &dimid[0], &varid[0])) ERR; + if (nc_def_var(ncid, LON, NC_INT, NDIM1, &dimid[1], &varid[1])) ERR; + if (nc_def_var(ncid, LEV, NC_INT, NDIM1, &dimid[2], &varid[2])) ERR; -/* if (nc_enddef(ncid)) ERR; */ + if (nc_enddef(ncid)) ERR; -/* if (nc_put_var(ncid, 0, lat_data)) ERR; */ -/* if (nc_put_var(ncid, 1, lon_data)) ERR; */ -/* if (nc_put_var(ncid, 2, lev_data)) ERR; */ + if (nc_put_var(ncid, 0, lat_data)) ERR; + if (nc_put_var(ncid, 1, lon_data)) ERR; + if (nc_put_var(ncid, 2, lev_data)) ERR; -/* if (nc_close(ncid)) ERR; */ -/* if (nc_open(filename, NC_WRITE, &ncid)) ERR; */ -/* if (nc_redef(ncid)) ERR; */ + if (nc_close(ncid)) ERR; + if (nc_open(filename, NC_WRITE, &ncid)) ERR; + if (nc_redef(ncid)) ERR; -/* /\* Rename the dimensions. *\/ */ -/* if (nc_rename_dim(ncid, 0, DIM_X)) ERR; */ -/* if (nc_rename_dim(ncid, 1, DIM_Y)) ERR; */ -/* if (nc_rename_dim(ncid, 2, DIM_Z)) ERR; */ + /* Rename the dimensions. */ + if (nc_rename_dim(ncid, 0, DIM_X)) ERR; + if (nc_rename_dim(ncid, 1, DIM_Y)) ERR; + if (nc_rename_dim(ncid, 2, DIM_Z)) ERR; -/* /\* Close the file. *\/ */ -/* if (nc_close(ncid)) ERR; */ + /* Close the file. */ + if (nc_close(ncid)) ERR; -/* /\* Reopen the file and check. *\/ */ -/* if (nc_open(filename, NC_NOWRITE, &ncid)) ERR; */ -/* if (nc_inq_dimid(ncid, DIM_X, &dimid_in)) ERR; */ -/* if (dimid_in != 0) ERR; */ -/* if (nc_inq_dimid(ncid, DIM_Y, &dimid_in)) ERR; */ -/* if (dimid_in != 1) ERR; */ -/* if (nc_inq_dimid(ncid, DIM_Z, &dimid_in)) ERR; */ -/* if (dimid_in != 2) ERR; */ -/* if (nc_close(ncid)) ERR; */ -/* } */ -/* SUMMARIZE_ERR; */ + /* Reopen the file and check. */ + if (nc_open(filename, NC_NOWRITE, &ncid)) ERR; + if (nc_inq_dimid(ncid, DIM_X, &dimid_in)) ERR; + if (dimid_in != 0) ERR; + if (nc_inq_dimid(ncid, DIM_Y, &dimid_in)) ERR; + if (dimid_in != 1) ERR; + if (nc_inq_dimid(ncid, DIM_Z, &dimid_in)) ERR; + if (dimid_in != 2) ERR; + if (nc_close(ncid)) ERR; + } + SUMMARIZE_ERR; -/* } /\* next format *\/ */ + } /* next format */ -/* #define FILE_NAME1 "tst_dims_foo1.nc" */ -/* #define DIM_NAME "lat_T42" */ -/* #define VAR_NAME DIM_NAME */ -/* #define DIM_NAME2 "lat" */ -/* #define VAR_NAME2 DIM_NAME2 */ -/* #define RANK_lat_T42 1 */ -/* fprintf(stderr,"*** test renaming with sync..."); */ -/* { */ -/* int ncid, dimid, varid; */ -/* char file_name[NC_MAX_NAME + 1]; */ -/* char name[NC_MAX_NAME + 1]; */ +#define FILE_NAME1 "tst_dims_foo1.nc" +#define DIM_NAME "lat_T42" +#define VAR_NAME DIM_NAME +#define DIM_NAME2 "lat" +#define VAR_NAME2 DIM_NAME2 +#define RANK_lat_T42 1 + fprintf(stderr,"*** test renaming with sync..."); + { + int ncid, dimid, varid; + char file_name[NC_MAX_NAME + 1]; + char name[NC_MAX_NAME + 1]; -/* /\* Create file with dim and associated coordinate var. *\/ */ -/* sprintf(file_name, "%s_sync.nc", TEST_NAME); */ -/* nc_set_log_level(4); */ -/* if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; */ -/* if (nc_def_dim(ncid, DIM_NAME_END, DIM1_LEN, &dimid)) ERR; */ -/* if (nc_def_var(ncid, DIM_NAME_END, NC_INT, NDIM1, &dimid, &varid)) ERR; */ -/* if (nc_close(ncid)) ERR; */ + /* Create file with dim and associated coordinate var. */ + sprintf(file_name, "%s_sync.nc", TEST_NAME); + nc_set_log_level(4); + if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; + if (nc_def_dim(ncid, DIM_NAME_END, DIM1_LEN, &dimid)) ERR; + if (nc_def_var(ncid, DIM_NAME_END, NC_INT, NDIM1, &dimid, &varid)) ERR; + if (nc_close(ncid)) ERR; -/* if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; */ -/* if (nc_def_dim(ncid, DIM_NAME_START, DIM1_LEN, &dimid)) ERR; */ -/* if (nc_def_var(ncid, DIM_NAME_END, NC_INT, NDIM1, &dimid, &varid)) ERR; */ -/* if (nc_close(ncid)) ERR; */ + if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; + if (nc_def_dim(ncid, DIM_NAME_START, DIM1_LEN, &dimid)) ERR; + if (nc_def_var(ncid, DIM_NAME_END, NC_INT, NDIM1, &dimid, &varid)) ERR; + if (nc_close(ncid)) ERR; -/* if (nc_open(file_name, NC_WRITE, &ncid)) ERR; */ -/* if (nc_rename_dim(ncid, dimid, DIM_NAME_END)) ERR; */ -/* if (nc_close(ncid)) ERR; */ + if (nc_open(file_name, NC_WRITE, &ncid)) ERR; + if (nc_rename_dim(ncid, dimid, DIM_NAME_END)) ERR; + if (nc_close(ncid)) ERR; -/* /\* Reopen file and check, *\/ */ -/* if (nc_open(file_name, NC_WRITE, &ncid)) ERR; */ -/* if (nc_inq_dimid(ncid, DIM_NAME_END, &dimid)) ERR; */ -/* if (nc_inq_varid(ncid, DIM_NAME_END, &varid)) ERR; */ -/* if (nc_inq_dimname(ncid, dimid, name)) ERR; */ -/* if (strcmp(name, DIM_NAME_END)) ERR; */ -/* if (nc_inq_varname(ncid, varid, name)) ERR; */ -/* if (strcmp(name, DIM_NAME_END)) ERR; */ -/* if (nc_close(ncid)) ERR; */ -/* } */ -/* SUMMARIZE_ERR; */ -/* fprintf(stderr,"*** test renaming with sync..."); */ -/* { */ -/* int ncid, dimid, varid; */ -/* char file_name[NC_MAX_NAME + 1]; */ -/* char name[NC_MAX_NAME + 1]; */ + /* Reopen file and check, */ + if (nc_open(file_name, NC_WRITE, &ncid)) ERR; + if (nc_inq_dimid(ncid, DIM_NAME_END, &dimid)) ERR; + if (nc_inq_varid(ncid, DIM_NAME_END, &varid)) ERR; + if (nc_inq_dimname(ncid, dimid, name)) ERR; + if (strcmp(name, DIM_NAME_END)) ERR; + if (nc_inq_varname(ncid, varid, name)) ERR; + if (strcmp(name, DIM_NAME_END)) ERR; + if (nc_close(ncid)) ERR; + } + SUMMARIZE_ERR; + fprintf(stderr,"*** test renaming with sync..."); + { + int ncid, dimid, varid; + char file_name[NC_MAX_NAME + 1]; + char name[NC_MAX_NAME + 1]; -/* /\* Create file with dim and associated coordinate var. *\/ */ -/* sprintf(file_name, "%s_sync.nc", TEST_NAME); */ -/* if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; */ -/* if (nc_def_dim(ncid, DIM_NAME_START, DIM1_LEN, &dimid)) ERR; */ -/* if (nc_def_var(ncid, VAR_NAME_START, NC_INT, NDIM1, &dimid, &varid)) ERR; */ -/* if (nc_close(ncid)) ERR; */ + /* Create file with dim and associated coordinate var. */ + sprintf(file_name, "%s_sync.nc", TEST_NAME); + if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; + if (nc_def_dim(ncid, DIM_NAME_START, DIM1_LEN, &dimid)) ERR; + if (nc_def_var(ncid, VAR_NAME_START, NC_INT, NDIM1, &dimid, &varid)) ERR; + if (nc_close(ncid)) ERR; -/* nc_set_log_level(4); */ -/* /\* Open the file and rename the var. *\/ */ -/* if (nc_open(file_name, NC_WRITE, &ncid)) ERR; */ -/* if (nc_inq_dimid(ncid, DIM_NAME_START, &dimid)) ERR; */ -/* if (nc_inq_varid(ncid, VAR_NAME_START, &varid)) ERR; */ -/* if (nc_rename_var(ncid, varid, VAR_NAME_END)) ERR; */ + nc_set_log_level(4); + /* Open the file and rename the var. */ + if (nc_open(file_name, NC_WRITE, &ncid)) ERR; + if (nc_inq_dimid(ncid, DIM_NAME_START, &dimid)) ERR; + if (nc_inq_varid(ncid, VAR_NAME_START, &varid)) ERR; + if (nc_rename_var(ncid, varid, VAR_NAME_END)) ERR; -/* /\* Sync to disk. Now the file has one dim and one var. The dim */ -/* * is a dimscale only dataset, and the var is a dataset with a */ -/* * dimscale attached pointing to the dim. *\/ */ -/* /\* if (nc_sync(ncid)) ERR; *\/ */ -/* if (nc_close(ncid)) ERR; */ -/* if (nc_open(file_name, NC_WRITE, &ncid)) ERR; */ -/* /\* Now rename the dim to the same name as the var. After this */ -/* * there will be one dataset, called DIM_NAME_END, which will be */ -/* * a dimscale. *\/ */ -/* if (nc_rename_dim(ncid, dimid, DIM_NAME_END)) ERR; */ -/* if (nc_close(ncid)) ERR; */ + /* Sync to disk. Now the file has one dim and one var. The dim + * is a dimscale only dataset, and the var is a dataset with a + * dimscale attached pointing to the dim. */ + /* if (nc_sync(ncid)) ERR; */ + if (nc_close(ncid)) ERR; + if (nc_open(file_name, NC_WRITE, &ncid)) ERR; + /* Now rename the dim to the same name as the var. After this + * there will be one dataset, called DIM_NAME_END, which will be + * a dimscale. */ + if (nc_rename_dim(ncid, dimid, DIM_NAME_END)) ERR; + if (nc_close(ncid)) ERR; -/* /\* Reopen file and check, *\/ */ -/* if (nc_open(file_name, NC_WRITE, &ncid)) ERR; */ -/* if (nc_inq_dimid(ncid, DIM_NAME_END, &dimid)) ERR; */ -/* if (nc_inq_varid(ncid, VAR_NAME_END, &varid)) ERR; */ -/* if (nc_inq_dimname(ncid, dimid, name)) ERR; */ -/* if (strcmp(name, DIM_NAME_END)) ERR; */ -/* if (nc_inq_varname(ncid, varid, name)) ERR; */ -/* if (strcmp(name, VAR_NAME_END)) ERR; */ -/* if (nc_close(ncid)) ERR; */ -/* } */ -/* SUMMARIZE_ERR; */ + /* Reopen file and check, */ + if (nc_open(file_name, NC_WRITE, &ncid)) ERR; + if (nc_inq_dimid(ncid, DIM_NAME_END, &dimid)) ERR; + if (nc_inq_varid(ncid, VAR_NAME_END, &varid)) ERR; + if (nc_inq_dimname(ncid, dimid, name)) ERR; + if (strcmp(name, DIM_NAME_END)) ERR; + if (nc_inq_varname(ncid, varid, name)) ERR; + if (strcmp(name, VAR_NAME_END)) ERR; + if (nc_close(ncid)) ERR; + } + SUMMARIZE_ERR; fprintf(stderr,"*** test renaming two coord vars..."); { int ncid, dimid1, dimid2, varid1, varid2; + int dimid_in, varid_in; char file_name[NC_MAX_NAME + 1]; char name[NC_MAX_NAME + 1]; @@ -257,18 +258,18 @@ main(int argc, char **argv) nc_set_log_level(4); if (nc_open(file_name, NC_WRITE, &ncid)) ERR; if (nc_rename_var(ncid, varid1, TMP_NAME)) ERR; - /* if (nc_rename_var(ncid, varid2, D1_NAME)) ERR; */ + if (nc_rename_var(ncid, varid2, D1_NAME)) ERR; if (nc_close(ncid)) ERR; /* Reopen file and check, */ - /* if (nc_open(file_name, NC_WRITE, &ncid)) ERR; */ - /* /\* if (nc_inq_dimid(ncid, DIM_NAME_END, &dimid)) ERR; *\/ */ - /* /\* if (nc_inq_varid(ncid, VAR_NAME_END, &varid)) ERR; *\/ */ - /* /\* if (nc_inq_dimname(ncid, dimid, name)) ERR; *\/ */ - /* /\* if (strcmp(name, DIM_NAME_END)) ERR; *\/ */ - /* /\* if (nc_inq_varname(ncid, varid, name)) ERR; *\/ */ - /* /\* if (strcmp(name, VAR_NAME_END)) ERR; *\/ */ - /* if (nc_close(ncid)) ERR; */ + if (nc_open(file_name, NC_WRITE, &ncid)) ERR; + if (nc_inq_dimid(ncid, D1_NAME, &dimid_in)) ERR; + if (dimid_in != dimid1) ERR; + if (nc_inq_dimid(ncid, D2_NAME, &dimid_in)) ERR; + if (dimid_in != dimid2) ERR; + if (nc_inq_dimid(ncid, TMP_NAME, &dimid_in) != NC_EBADDIM) ERR; + if (nc_inq_varid(ncid, TMP_NAME, &varid_in)) ERR; + if (nc_close(ncid)) ERR; } SUMMARIZE_ERR; FINAL_RESULTS; From b3796633e70555c02304273c9475a881b4953ef2 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Sun, 27 Jan 2019 11:40:18 -0700 Subject: [PATCH 10/11] more testing --- nc_test4/tst_rename2.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/nc_test4/tst_rename2.c b/nc_test4/tst_rename2.c index fbe3958d8..ca88659d3 100644 --- a/nc_test4/tst_rename2.c +++ b/nc_test4/tst_rename2.c @@ -169,7 +169,6 @@ main(int argc, char **argv) /* Create file with dim and associated coordinate var. */ sprintf(file_name, "%s_sync.nc", TEST_NAME); - nc_set_log_level(4); if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; if (nc_def_dim(ncid, DIM_NAME_END, DIM1_LEN, &dimid)) ERR; if (nc_def_var(ncid, DIM_NAME_END, NC_INT, NDIM1, &dimid, &varid)) ERR; @@ -208,7 +207,7 @@ main(int argc, char **argv) if (nc_def_var(ncid, VAR_NAME_START, NC_INT, NDIM1, &dimid, &varid)) ERR; if (nc_close(ncid)) ERR; - nc_set_log_level(4); + /* nc_set_log_level(4); */ /* Open the file and rename the var. */ if (nc_open(file_name, NC_WRITE, &ncid)) ERR; if (nc_inq_dimid(ncid, DIM_NAME_START, &dimid)) ERR; @@ -238,15 +237,14 @@ main(int argc, char **argv) if (nc_close(ncid)) ERR; } SUMMARIZE_ERR; - fprintf(stderr,"*** test renaming two coord vars..."); + fprintf(stderr,"*** test renaming non-coord var to same name as dim..."); { int ncid, dimid1, dimid2, varid1, varid2; int dimid_in, varid_in; char file_name[NC_MAX_NAME + 1]; - char name[NC_MAX_NAME + 1]; /* Create file with dim and associated coordinate var. */ - sprintf(file_name, "%s_sync.nc", TEST_NAME); + sprintf(file_name, "%s_non_coord_to_dim.nc", TEST_NAME); if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; if (nc_def_dim(ncid, D1_NAME, DIM1_LEN, &dimid1)) ERR; if (nc_def_dim(ncid, D2_NAME, DIM1_LEN, &dimid2)) ERR; @@ -255,7 +253,7 @@ main(int argc, char **argv) if (nc_close(ncid)) ERR; /* Open the file and rename the vars. */ - nc_set_log_level(4); + /* nc_set_log_level(4); */ if (nc_open(file_name, NC_WRITE, &ncid)) ERR; if (nc_rename_var(ncid, varid1, TMP_NAME)) ERR; if (nc_rename_var(ncid, varid2, D1_NAME)) ERR; From fcae21bb9ef335c1338b6de7c91103d57b184542 Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Sun, 27 Jan 2019 11:48:28 -0700 Subject: [PATCH 11/11] more testing --- nc_test4/tst_rename2.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nc_test4/tst_rename2.c b/nc_test4/tst_rename2.c index ca88659d3..e50ff29e5 100644 --- a/nc_test4/tst_rename2.c +++ b/nc_test4/tst_rename2.c @@ -267,6 +267,9 @@ main(int argc, char **argv) if (dimid_in != dimid2) ERR; if (nc_inq_dimid(ncid, TMP_NAME, &dimid_in) != NC_EBADDIM) ERR; if (nc_inq_varid(ncid, TMP_NAME, &varid_in)) ERR; + if (varid_in != varid1) ERR; + if (nc_inq_varid(ncid, D1_NAME, &varid_in)) ERR; + if (varid_in != varid2) ERR; if (nc_close(ncid)) ERR; } SUMMARIZE_ERR;