From 1b3f397c4c40f4ba3f251becef7ec833306165ae Mon Sep 17 00:00:00 2001 From: Ed Hartnett Date: Sun, 27 Jan 2019 11:29:49 -0700 Subject: [PATCH] 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); }