From 1bdf8fa8eeafcf9ed43fa4b11ca90b0e9325f5e6 Mon Sep 17 00:00:00 2001 From: Greg Sjaardema Date: Tue, 7 Jun 2022 07:48:17 -0600 Subject: [PATCH 01/35] Enable compilation with C89 compiler Initializing and declaring variable in for loop statement requires C99 mode. NetCDF is compiled in C89 mode. --- nc_test4/tst_virtual_datasets.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/nc_test4/tst_virtual_datasets.c b/nc_test4/tst_virtual_datasets.c index c27455713..be23deedd 100644 --- a/nc_test4/tst_virtual_datasets.c +++ b/nc_test4/tst_virtual_datasets.c @@ -12,7 +12,8 @@ static void create_dataset_a() { hsize_t dims[1] = {VARIABLE_SIZE}; float data[VARIABLE_SIZE]; - for(size_t i = 0; i < VARIABLE_SIZE; ++i) { + size_t i; + for(i = 0; i < VARIABLE_SIZE; ++i) { data[i] = (float)i; } @@ -52,6 +53,7 @@ create_dataset_b() { int read_back_contents(const char* filename) { int ncid, varid, ndims; float data[VARIABLE_SIZE]; + size_t i; char var_name[NC_MAX_NAME+1]; int dimids_var[1], var_type, natts; @@ -63,7 +65,7 @@ int read_back_contents(const char* filename) { if (nc_inq_var(ncid, varid, var_name, &var_type, &ndims, dimids_var, &natts)) ERR; if (nc_get_var_float(ncid, varid, data)) ERR; printf("\t %s: ", var_name); - for (size_t i = 0; i < VARIABLE_SIZE; ++i) { + for (i = 0; i < VARIABLE_SIZE; ++i) { printf("%f, ", data[i]); } printf("\n"); From 87102fc7542ab06bb203f3d040bfe5d14dbf806e Mon Sep 17 00:00:00 2001 From: Rostislav Kouznetsov Date: Fri, 10 Jun 2022 09:14:33 +0300 Subject: [PATCH 02/35] Add clarification for the meaning of NSB Also "bitgroom" replaced by more suitable precision-trimming: only one of three is BitGroom. --- docs/filters.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/filters.md b/docs/filters.md index 23667ce49..07172006e 100644 --- a/docs/filters.md +++ b/docs/filters.md @@ -633,7 +633,7 @@ its precision throughout the whole floating point range [https://doi.org/10.5194/gmd-9-3199-2016]. ```` The generic term "quantize" is used to refer collectively to the various -bitgroom algorithms. The key thing to note about quantization is that +precision-trimming algorithms. The key thing to note about quantization is that it occurs at the point of writing of data only. Since its output is legal data, it does not need to be "de-quantized" when the data is read. Because of this, quantization is not part of the standard filter @@ -660,7 +660,13 @@ or _QuantizeBitRoundNumberOfSignificantBits = ```` The value NSD is the number of significant (decimal) digits to keep. -The value NSB is the number of significant bits to keep. +The value NSB is the number of bits to keep in the fraction part of an +IEEE754 floating-point number. Note that NSB of QuantizeBitRound is the same as +"number of explicit mantissa bits" (https://doi.org/10.5194/gmd-9-3199-2016) and same as +the number of "keep-bits" (https://doi.org/10.5194/gmd-14-377-2021), but is not +one less than the number of significant bunary figures: +`_QuantizeBitRoundNumberOfSignificantBits = 0` means one significant binary figure, +`_QuantizeBitRoundNumberOfSignificantBits = 1` means two significant binary figures etc. ## Distortions introduced by lossy filters From 64d3f2b3263456c922add87633572dccc024cc6c Mon Sep 17 00:00:00 2001 From: wkliao Date: Wed, 20 Apr 2022 00:10:24 -0500 Subject: [PATCH 03/35] count argument in H5Sselect_hyperslab Argument 'count' in NetCDF is not exactly the same as the 'count' in H5Sselect_hyperslabs(space_id, op, start, stride, count, block). When the argument 'stride' is NULL, NetCDF's 'count' should be used in argument 'block', for example, H5Sselect_hyperslabs(space_id, op, start, NULL, ones, count); where 'one' is an array of all 1s. Although using NULL 'block' below H5Sselect_hyperslabs(space_id, op, start, NULL, count, NULL); has the same effect, HDF5 internally stores the space of a subarray as a list of single elements, instead of a "block", which can affect the performance. --- h5_test/tst_h_dimscales2.c | 5 +++-- h5_test/tst_h_enums.c | 4 ++-- h5_test/tst_h_files.c | 10 ++++++---- h5_test/tst_h_par.c | 8 +++++--- h5_test/tst_h_par_compress.c | 8 +++++--- h5_test/tst_h_strings2.c | 7 ++++--- h5_test/tst_h_vars.c | 5 +++-- libhdf5/hdf5var.c | 37 ++++++++++++++++++++++++++++-------- libnczarr/zvar.c | 13 +++++++++---- nc_perf/tst_files3.c | 3 ++- 10 files changed, 68 insertions(+), 32 deletions(-) diff --git a/h5_test/tst_h_dimscales2.c b/h5_test/tst_h_dimscales2.c index 07592e206..eb7b2dfb5 100644 --- a/h5_test/tst_h_dimscales2.c +++ b/h5_test/tst_h_dimscales2.c @@ -633,6 +633,7 @@ main() hsize_t h5dimlen[DIMS2], h5dimlenmax[DIMS2], xtend_size[DIMS2] = {1, NUM_VALS}; hsize_t start[DIMS2] = {0, 0}; hsize_t count[DIMS2] = {1, NUM_VALS}; + hsize_t ones[DIMS2] = {1, 1}; double value[NUM_VALS]; int dataset_ndims; int i; @@ -661,7 +662,7 @@ main() /* Set up the file and memory spaces. */ if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; if ((mem_spaceid = H5Screate_simple(DIMS2, count, NULL)) < 0) ERR; /* Write a slice of data. */ @@ -683,7 +684,7 @@ main() /* Set up the file and memory spaces for a second slice. */ start[0]++; if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; if ((mem_spaceid = H5Screate_simple(DIMS2, count, NULL)) < 0) ERR; /* Write a second slice of data. */ diff --git a/h5_test/tst_h_enums.c b/h5_test/tst_h_enums.c index 352b4dce3..a107023a4 100644 --- a/h5_test/tst_h_enums.c +++ b/h5_test/tst_h_enums.c @@ -154,7 +154,7 @@ main() char lang[NUM_LANG][STR_LEN + 1] = {"C", "Fortran", "C++", "MISSING"}; enum langs {CLANG=0, Fortran=1, CPP=2, MISSING=255}; short the_value, fill_value = MISSING, data_point = CLANG; - hsize_t start[1] = {1}, count[1] = {1}; + hsize_t start[1] = {1}, count[1] = {1}, one[1] = {1}; int num_members; size_t size; hid_t base_hdf_typeid; @@ -197,7 +197,7 @@ main() if ((mem_spaceid = H5Screate(H5S_SCALAR)) < 0) ERR; if ((file_spaceid = H5Screate_simple(1, dims, NULL)) < 0) ERR; if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, one, count) < 0) ERR; if (H5Dwrite(datasetid, typeid, mem_spaceid, file_spaceid, H5P_DEFAULT, &data_point) < 0) ERR; diff --git a/h5_test/tst_h_files.c b/h5_test/tst_h_files.c index f4bc617f0..ca795f6e0 100644 --- a/h5_test/tst_h_files.c +++ b/h5_test/tst_h_files.c @@ -174,7 +174,7 @@ main() #define MILLION 1000000 hid_t fileid, write_spaceid, datasetid, mem_spaceid; - hsize_t start[NDIMS], count[NDIMS]; + hsize_t start[NDIMS], count[NDIMS], ones[NDIMS]; hsize_t dims[1]; int *data; int num_steps; @@ -210,8 +210,9 @@ main() { /* Select hyperslab for write of one slice. */ start[0] = s * SC; + ones[0] = 1; if (H5Sselect_hyperslab(write_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; if (H5Dwrite(datasetid, H5T_NATIVE_INT, mem_spaceid, write_spaceid, H5P_DEFAULT, data) < 0) ERR; @@ -242,7 +243,7 @@ main() hid_t mem_spaceid, xfer_plistid, native_typeid; hsize_t *chunksize, dims[1], maxdims[1], *dimsize, *maxdimsize; hsize_t fdims[MAX_DIMS], fmaxdims[MAX_DIMS]; - hsize_t start[MAX_DIMS], count[MAX_DIMS]; + hsize_t start[MAX_DIMS], count[MAX_DIMS], ones[MAX_DIMS]; char file_name[STR_LEN + 1]; char dimscale_wo_var[STR_LEN]; void *bufr; @@ -342,7 +343,8 @@ main() start[1] = 0; count[0] = 1; count[1] = 2097153; - if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, start, NULL, count, NULL) < 0) ERR; + ones[0] = ones[1] = 1; + if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, start, NULL, ones, count) < 0) ERR; if ((mem_spaceid = H5Screate_simple(NDIMS2, count, NULL)) < 0) ERR; if ((xfer_plistid = H5Pcreate(H5P_DATASET_XFER)) < 0) ERR; if ((native_typeid = H5Tget_native_type(H5T_NATIVE_SCHAR, H5T_DIR_DEFAULT)) < 0) ERR; diff --git a/h5_test/tst_h_par.c b/h5_test/tst_h_par.c index 2d350a453..e8c9c2291 100644 --- a/h5_test/tst_h_par.c +++ b/h5_test/tst_h_par.c @@ -66,7 +66,7 @@ main(int argc, char **argv) printf("*** Creating file for parallel I/O read, and rereading it..."); { hid_t fapl_id, fileid, whole_spaceid, dsid, slice_spaceid, whole_spaceid1, xferid; - hsize_t start[NDIMS], count[NDIMS]; + hsize_t start[NDIMS], count[NDIMS], ones[NDIMS]; hsize_t dims[1]; int data[SC1], data_in[SC1]; int num_steps; @@ -126,8 +126,9 @@ main(int argc, char **argv) /* Select hyperslab for write of one slice. */ start[0] = s * SC1 * p + my_rank * SC1; count[0] = SC1; + ones[0] = 1; if (H5Sselect_hyperslab(whole_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; if (H5Dwrite(dsid, H5T_NATIVE_INT, slice_spaceid, whole_spaceid, xferid, data) < 0) ERR; @@ -185,8 +186,9 @@ main(int argc, char **argv) /* Select hyperslab for read of one slice. */ start[0] = s * SC1 * p + my_rank * SC1; count[0] = SC1; + ones[0] = 1; if (H5Sselect_hyperslab(whole_spaceid1, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) + start, NULL, ones, count) < 0) { ERR; return 2; diff --git a/h5_test/tst_h_par_compress.c b/h5_test/tst_h_par_compress.c index 6a15e6a81..e63475803 100644 --- a/h5_test/tst_h_par_compress.c +++ b/h5_test/tst_h_par_compress.c @@ -51,7 +51,7 @@ main(int argc, char **argv) { hid_t fapl_id, fileid, whole_spaceid, dsid, slice_spaceid, whole_spaceid1, xferid; hid_t plistid; - hsize_t start[NDIMS], count[NDIMS]; + hsize_t start[NDIMS], count[NDIMS], ones[NDIMS]; hsize_t dims[1], chunksize = SC1; int data[SC1], data_in[SC1]; int num_steps; @@ -120,8 +120,9 @@ main(int argc, char **argv) /* Select hyperslab for write of one slice. */ start[0] = s * SC1 * p + my_rank * SC1; count[0] = SC1; + ones[0] = 1; if (H5Sselect_hyperslab(whole_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; if (H5Dwrite(dsid, H5T_NATIVE_INT, slice_spaceid, whole_spaceid, xferid, data) < 0) ERR; @@ -160,8 +161,9 @@ main(int argc, char **argv) /* Select hyperslab for read of one slice. */ start[0] = s * SC1 * p + my_rank * SC1; count[0] = SC1; + ones[0] = 1; if (H5Sselect_hyperslab(whole_spaceid1, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) + start, NULL, ones, count) < 0) { ERR; return 2; diff --git a/h5_test/tst_h_strings2.c b/h5_test/tst_h_strings2.c index 1d03a983c..a451a6ac6 100644 --- a/h5_test/tst_h_strings2.c +++ b/h5_test/tst_h_strings2.c @@ -30,6 +30,7 @@ main() hid_t file_spaceid, mem_spaceid; hsize_t dims[1] = {0}, max_dims[1] = {H5S_UNLIMITED}, chunk_dims[1] = {1}; hsize_t xtend_size[NDIMS] = {2}, start[NDIMS] = {1}, count[NDIMS] = {1}; + hsize_t ones[NDIMS] = {1}; /* void *fillp;*/ char *data = "A man who carries a cat by the tail learns " "something he can learn in no other way."; @@ -91,7 +92,7 @@ main() /* Select space in file to write a record. */ if ((file_spaceid = H5Dget_space(datasetid)) < 0) ERR; if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; /* Select space in memory to read from. */ if ((mem_spaceid = H5Screate_simple(NDIMS, count, NULL)) < 0) ERR; @@ -126,7 +127,7 @@ main() hid_t typeid, datasetid, plistid; hid_t file_spaceid, mem_spaceid; hsize_t dims[1] = {2}, chunk_dims[1] = {1}; - hsize_t start[NDIMS] = {1}, count[NDIMS] = {1}; + hsize_t start[NDIMS] = {1}, count[NDIMS] = {1}, ones[NDIMS] = {1}; /* void *fillp;*/ char *data = "A man who carries a cat by the tail learns " "something he can learn in no other way."; @@ -179,7 +180,7 @@ To be good is noble; but to show others how to be good is nobler and no trouble. /* Select space in file to write a record. */ if ((file_spaceid = H5Dget_space(datasetid)) < 0) ERR; if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; /* Select space in memory to read from. */ if ((mem_spaceid = H5Screate_simple(NDIMS, count, NULL)) < 0) diff --git a/h5_test/tst_h_vars.c b/h5_test/tst_h_vars.c index b6e2294d8..58ea5c36e 100644 --- a/h5_test/tst_h_vars.c +++ b/h5_test/tst_h_vars.c @@ -69,7 +69,7 @@ main() float float_data_out[LAT_LEN][LON_LEN]; hsize_t dims[NDIMS], max_dims[NDIMS]; hsize_t dims_in[NDIMS], max_dims_in[NDIMS]; - hsize_t start[MAX_DIMS], count[MAX_DIMS]; + hsize_t start[MAX_DIMS], count[MAX_DIMS], ones[MAX_DIMS]; int lat, lon; /* Set up some phoney data, 1 record's worth. In C, first @@ -153,8 +153,9 @@ main() start[0] = 1; start[1] = 0; start[2] = 0; + ones[0] = ones[1] = ones[2] = 1; if (H5Sselect_hyperslab(write_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; /* Write second record of data to each dataset. */ if (H5Dwrite(pres_dsid, H5T_IEEE_F32LE, mem_spaceid, write_spaceid, diff --git a/libhdf5/hdf5var.c b/libhdf5/hdf5var.c index 0dfd9ef80..5daaac532 100644 --- a/libhdf5/hdf5var.c +++ b/libhdf5/hdf5var.c @@ -1541,11 +1541,12 @@ NC4_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, NC_VAR_INFO_T *var; NC_DIM_INFO_T *dim; NC_HDF5_VAR_INFO_T *hdf5_var; + herr_t herr; hid_t file_spaceid = 0, mem_spaceid = 0, xfer_plistid = 0; long long unsigned xtend_size[NC_MAX_VAR_DIMS]; hsize_t fdims[NC_MAX_VAR_DIMS], fmaxdims[NC_MAX_VAR_DIMS]; hsize_t start[NC_MAX_VAR_DIMS], count[NC_MAX_VAR_DIMS]; - hsize_t stride[NC_MAX_VAR_DIMS]; + hsize_t stride[NC_MAX_VAR_DIMS], ones[NC_MAX_VAR_DIMS]; int need_to_extend = 0; #ifdef USE_PARALLEL4 int extend_possible = 0; @@ -1596,6 +1597,7 @@ NC4_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, start[i] = startp[i]; count[i] = countp ? countp[i] : var->dim[i]->len; stride[i] = stridep ? stridep[i] : 1; + ones[i] = 1; LOG((4, "start[%d] %ld count[%d] %ld stride[%d] %ld", i, start[i], i, count[i], i, stride[i])); /* Check to see if any counts are zero. */ @@ -1646,8 +1648,13 @@ NC4_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, } else { - if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, start, stride, - count, NULL) < 0) + if (stridep == NULL) + herr = H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, start, + NULL, ones, count); + else + herr = H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, start, + stride, count, NULL); + if (herr < 0) BAIL(NC_EHDFERR); /* Create a space for the memory, just big enough to hold the slab @@ -1772,8 +1779,14 @@ NC4_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, BAIL2(NC_EHDFERR); if ((file_spaceid = H5Dget_space(hdf5_var->hdf_datasetid)) < 0) BAIL(NC_EHDFERR); - if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, stride, count, NULL) < 0) + + if (stridep == NULL) + herr = H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, + start, NULL, ones, count); + else + herr = H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, + start, stride, count, NULL); + if (herr < 0) BAIL(NC_EHDFERR); } } @@ -1872,7 +1885,7 @@ NC4_get_vars(int ncid, int varid, const size_t *startp, const size_t *countp, hsize_t count[NC_MAX_VAR_DIMS]; hsize_t fdims[NC_MAX_VAR_DIMS], fmaxdims[NC_MAX_VAR_DIMS]; hsize_t start[NC_MAX_VAR_DIMS]; - hsize_t stride[NC_MAX_VAR_DIMS]; + hsize_t stride[NC_MAX_VAR_DIMS], ones[NC_MAX_VAR_DIMS]; void *fillvalue = NULL; int no_read = 0, provide_fill = 0; hssize_t fill_value_size[NC_MAX_VAR_DIMS]; @@ -1920,6 +1933,7 @@ NC4_get_vars(int ncid, int varid, const size_t *startp, const size_t *countp, start[i] = startp[i]; count[i] = countp[i]; stride[i] = stridep ? stridep[i] : 1; + ones[i] = 1; /* if any of the count values are zero don't actually read. */ if (count[i] == 0) @@ -2049,9 +2063,16 @@ NC4_get_vars(int ncid, int varid, const size_t *startp, const size_t *countp, } else { - if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, stride, count, NULL) < 0) + herr_t herr; + if (stridep == NULL) + herr = H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, + start, NULL, ones, count); + else + herr = H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, + start, stride, count, NULL); + if (herr < 0) BAIL(NC_EHDFERR); + /* Create a space for the memory, just big enough to hold the slab we want. */ if ((mem_spaceid = H5Screate_simple(var->ndims, count, NULL)) < 0) diff --git a/libnczarr/zvar.c b/libnczarr/zvar.c index da4ebba6f..90ff0c0c9 100644 --- a/libnczarr/zvar.c +++ b/libnczarr/zvar.c @@ -1542,7 +1542,7 @@ NCZ_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, #endif size64_t fdims[NC_MAX_VAR_DIMS]; size64_t start[NC_MAX_VAR_DIMS], count[NC_MAX_VAR_DIMS]; - size64_t stride[NC_MAX_VAR_DIMS]; + size64_t stride[NC_MAX_VAR_DIMS], ones[NC_MAX_VAR_DIMS]; int retval, range_error = 0, i, d2; void *bufr = NULL; int bufrd = 0; /* 1 => we allocated bufr */ @@ -1584,6 +1584,7 @@ NCZ_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, start[0] = 0; count[0] = 1; stride[0] = 1; + ones[0] = 1; } else { for (i = 0; i < var->ndims; i++) { @@ -1594,6 +1595,7 @@ NCZ_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, start[i] = startp[i]; count[i] = countp ? countp[i] : var->dim[i]->len; stride[i] = stridep ? stridep[i] : 1; + ones[i] = 1; /* Check to see if any counts are zero. */ if (!count[i]) @@ -1649,7 +1651,7 @@ NCZ_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, else { if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, start, stride, - count, NULL) < 0) + ones, count) < 0) BAIL(NC_EHDFERR); /* Create a space for the memory, just big enough to hold the slab @@ -1757,7 +1759,7 @@ NCZ_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, if ((file_spaceid = H5Dget_space(ncz_var->hdf_datasetid)) < 0) BAIL(NC_EHDFERR); if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, stride, count, NULL) < 0) + start, stride, ones, count) < 0) BAIL(NC_EHDFERR); } #endif @@ -1864,6 +1866,7 @@ NCZ_get_vars(int ncid, int varid, const size_t *startp, const size_t *countp, size64_t fmaxdims[NC_MAX_VAR_DIMS]; size64_t start[NC_MAX_VAR_DIMS]; size64_t stride[NC_MAX_VAR_DIMS]; + size64_t ones[NC_MAX_VAR_DIMS]; int no_read = 0, provide_fill = 0; int fill_value_size[NC_MAX_VAR_DIMS]; int retval, range_error = 0, i, d2; @@ -1898,6 +1901,7 @@ NCZ_get_vars(int ncid, int varid, const size_t *startp, const size_t *countp, start[0] = 0; count[0] = 1; stride[0] = 1; + ones[0] = 1; } else { for (i = 0; i < var->ndims; i++) { @@ -1907,6 +1911,7 @@ NCZ_get_vars(int ncid, int varid, const size_t *startp, const size_t *countp, start[i] = startp[i]; count[i] = countp[i]; stride[i] = stridep ? stridep[i] : 1; + ones[i] = 1; /* if any of the count values are zero don't actually read. */ if (count[i] == 0) no_read++; @@ -2040,7 +2045,7 @@ NCZ_get_vars(int ncid, int varid, const size_t *startp, const size_t *countp, else { if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, stride, count, NULL) < 0) + start, stride, ones, count) < 0) BAIL(NC_EHDFERR); /* Create a space for the memory, just big enough to hold the slab we want. */ diff --git a/nc_perf/tst_files3.c b/nc_perf/tst_files3.c index ab04f7ec0..f4404e053 100644 --- a/nc_perf/tst_files3.c +++ b/nc_perf/tst_files3.c @@ -100,6 +100,7 @@ int dump_hdf_file(const float *data, int docompression) hsize_t dims[NDIMS] = {X_LEN, Y_LEN, Z_LEN}; hsize_t start[NDIMS] = {0, 0, 0}; hsize_t count[NDIMS] = {1, 1, Z_LEN}; + hsize_t ones[NDIMS] = {1, 1, 1}; /* create file */ file_id = H5Fcreate(FILE_NAME, H5F_ACC_TRUNC, @@ -138,7 +139,7 @@ int dump_hdf_file(const float *data, int docompression) for (start[1] = 0; start[1] < Y_LEN; start[1]++) { if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, start, NULL, - count, NULL) < 0) ERR_RET; + ones, count) < 0) ERR_RET; if (H5Dwrite(dataset_id, H5T_NATIVE_FLOAT, mem_spaceid, file_spaceid, xfer_plistid, data) < 0) ERR_RET; } From 4fde0d829ac3dde0d9dd2e3cd8ef610d29d7497e Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 23 Jun 2022 21:10:24 +0200 Subject: [PATCH 04/35] Avoid segfault if opening file failed It looks like on some platforms (e.g., MinGW) errno isn't set when opening a file failed. That combination of a file id <0 and errno still 0 leads to a segmentation fault later on. A possible solution to avoid that segfault is to set the status to ENOENT if errno is unexpectedly 0. That leads to the error ("No such file or directory") that was reportedly emitted before version 4.9.0. See also this report downstream: https://github.com/msys2/MINGW-packages/issues/11918 --- libsrc/posixio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/posixio.c b/libsrc/posixio.c index 0e1c18500..5e541faac 100644 --- a/libsrc/posixio.c +++ b/libsrc/posixio.c @@ -1634,7 +1634,7 @@ posixio_create(const char *path, int ioflags, #endif if(fd < 0) { - status = errno; + status = errno ? errno : ENOENT; goto unwind_new; } *((int *)&nciop->fd) = fd; /* cast away const */ From 66dba3f3e85dfe02db7ba07d7adb1fd4c5001d2d Mon Sep 17 00:00:00 2001 From: Greg Sjaardema Date: Wed, 6 Jul 2022 10:37:02 -0600 Subject: [PATCH 05/35] Minor fix to doxygen documentation --- libdispatch/dparallel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libdispatch/dparallel.c b/libdispatch/dparallel.c index 6a9aba720..f13031e56 100644 --- a/libdispatch/dparallel.c +++ b/libdispatch/dparallel.c @@ -331,7 +331,7 @@ nc_open_par_fortran(const char *path, int omode, int comm, @return ::NC_NOERR No error. @return ::NC_EBADID Invalid ncid passed. @return ::NC_ENOTVAR Invalid varid passed. - @return ::NC_ENOPAR File was not opened with nc_open_par/nc_create_var. + @return ::NC_ENOPAR File was not opened with nc_open_par/nc_create_par. @return ::NC_EINVAL Invalid par_access specified, or attempt to set filtered variable to independent access. From fe3cc6fc449589ca76cf5e723aa6b31d3d4e1c3b Mon Sep 17 00:00:00 2001 From: John Parent Date: Tue, 24 Jan 2023 15:07:39 -0500 Subject: [PATCH 06/35] Find MPI during CMake package import When MPI::MPI_C is included in link interface of exported netcdf::netcdf target the config module is responsible for locating that target and providing it to the consuming project via find_dependency --- CMakeLists.txt | 2 ++ netCDFConfig.cmake.in | 2 ++ 2 files changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b0573111..f3a526232 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1471,6 +1471,7 @@ ENDIF() # Enable Parallel IO with netCDF-4/HDF5 files using HDF5 parallel I/O. SET(STATUS_PARALLEL "OFF") +set(IMPORT_MPI "") OPTION(ENABLE_PARALLEL4 "Build netCDF-4 with parallel IO" "${HDF5_PARALLEL}") IF(ENABLE_PARALLEL4 AND ENABLE_HDF5) IF(NOT HDF5_PARALLEL) @@ -1492,6 +1493,7 @@ IF(ENABLE_PARALLEL4 AND ENABLE_HDF5) FILE(COPY "${netCDF_BINARY_DIR}/tmp/run_par_tests.sh" DESTINATION ${netCDF_BINARY_DIR}/h5_test FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + set(IMPORT_MPI "include(CMakeFindDependencyMacro)\nfind_dependency(MPI COMPONENTS C)") ENDIF() ENDIF() diff --git a/netCDFConfig.cmake.in b/netCDFConfig.cmake.in index 9d68eec5a..dae2429e4 100644 --- a/netCDFConfig.cmake.in +++ b/netCDFConfig.cmake.in @@ -14,6 +14,8 @@ set(netCDF_LIBRARIES netCDF::netcdf) # include target information include("${CMAKE_CURRENT_LIST_DIR}/netCDFTargets.cmake") +@IMPORT_MPI@ + # Compiling Options # set(netCDF_C_COMPILER "@CC_VERSION@") From ce3bb54d555afcaef48c51687c9f65e37d899bea Mon Sep 17 00:00:00 2001 From: John Parent Date: Tue, 24 Jan 2023 15:16:55 -0500 Subject: [PATCH 07/35] If using MPI, should link against MPI target Failing to do this results in unresolved symbols during link time. --- liblib/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index e3eddc0fb..3df791867 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -52,6 +52,10 @@ IF(MPI_C_INCLUDE_PATH) target_include_directories(netcdf PUBLIC ${MPI_C_INCLUDE_PATH}) ENDIF(MPI_C_INCLUDE_PATH) +IF(TARGET MPI::MPI_C) + target_link_libraries(netcdf PUBLIC MPI::MPI_C) +ENDIF(TARGET MPI::MPI_C) + IF(MOD_NETCDF_NAME) SET_TARGET_PROPERTIES(netcdf PROPERTIES LIBRARY_OUTPUT_NAME ${NETCDF_LIB_NAME}) SET_TARGET_PROPERTIES(netcdf PROPERTIES ARCHIVE_OUTPUT_NAME ${NETCDF_LIB_NAME}) From 96c7d58f04f7cea9d9c8bd95127f66a99a73b3c4 Mon Sep 17 00:00:00 2001 From: John Parent Date: Tue, 24 Jan 2023 15:18:11 -0500 Subject: [PATCH 08/35] Plug dependencies should include MPI Plugin deps should include MPI if MPI is being used in the build. This is at least the case of HDF5 --- plugins/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 65891d82e..15567c8f6 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -62,6 +62,9 @@ MACRO(buildplugin TARGET TARGETLIB) set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "/INCREMENTAL:NO /DEBUG /OPT:REF /OPT:ICF") # Set file name & location set_target_properties(${TARGET} PROPERTIES COMPILE_PDB_NAME ${TARGET} COMPILE_PDB_OUTPUT_DIR ${CMAKE_BINARY_DIR}) + IF(MPI_C_INCLUDE_PATH) + target_include_directories(${TARGET} PRIVATE ${MPI_C_INCLUDE_PATH}) + ENDIF(MPI_C_INCLUDE_PATH) ENDIF() ENDMACRO() From f8a34e930b714d2c535fba9b8f8395c84b54fb1d Mon Sep 17 00:00:00 2001 From: John Parent Date: Wed, 25 Jan 2023 16:41:27 -0500 Subject: [PATCH 09/35] Linux: consistent use of blank link vis --- liblib/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index 3df791867..8fdfd7561 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -53,7 +53,7 @@ IF(MPI_C_INCLUDE_PATH) ENDIF(MPI_C_INCLUDE_PATH) IF(TARGET MPI::MPI_C) - target_link_libraries(netcdf PUBLIC MPI::MPI_C) + target_link_libraries(netcdf MPI::MPI_C) ENDIF(TARGET MPI::MPI_C) IF(MOD_NETCDF_NAME) From d755c4ff32cabe2b1862c6ad66f45bb32341ef28 Mon Sep 17 00:00:00 2001 From: Eisuke Kawashima Date: Wed, 23 Aug 2023 13:28:53 +0900 Subject: [PATCH 10/35] chore: unset executable flag --- cmake/modules/FindBlosc.cmake | 0 cmake/modules/FindZip.cmake | 0 docs/testserver.dox | 0 libdispatch/dcrc32.h | 0 libncpoco/CMakeLists.txt | 0 libncpoco/COPYRIGHT | 0 libncpoco/Makefile.am | 0 libncpoco/cp_test.c | 0 libncpoco/cp_unix.c | 0 libncpoco/cp_win32.c | 0 libncpoco/cptestlib.c | 0 libncpoco/ncpoco.c | 0 libncpoco/ncpoco.h | 0 libnczarr/zmap_file.c | 0 libnczarr/zmap_zip.c | 0 nc_test4/h5testszip.c | 0 nc_test4/ref_fixedstring.h5 | Bin nc_test4/tst_charvlenbug.c | 0 nc_test4/tst_fillonly.c | 0 ncdap_test/manyurls.h | 0 ncdump/ncpathcvt.c | 0 ncdump/ocprint.c | 0 ncdump/tst_rcapi.c | 0 nczarr_test/ncdumpchunks.c | 0 nczarr_test/ref_groups.h5 | Bin nczarr_test/ut_chunking.c | 0 nczarr_test/ut_projtest.h | 0 nczarr_test/ut_test.c | 0 plugins/H5Zblosc.c | 0 plugins/H5Zblosc.h | 0 plugins/H5Zszip.h | 0 31 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 cmake/modules/FindBlosc.cmake mode change 100755 => 100644 cmake/modules/FindZip.cmake mode change 100755 => 100644 docs/testserver.dox mode change 100755 => 100644 libdispatch/dcrc32.h mode change 100755 => 100644 libncpoco/CMakeLists.txt mode change 100755 => 100644 libncpoco/COPYRIGHT mode change 100755 => 100644 libncpoco/Makefile.am mode change 100755 => 100644 libncpoco/cp_test.c mode change 100755 => 100644 libncpoco/cp_unix.c mode change 100755 => 100644 libncpoco/cp_win32.c mode change 100755 => 100644 libncpoco/cptestlib.c mode change 100755 => 100644 libncpoco/ncpoco.c mode change 100755 => 100644 libncpoco/ncpoco.h mode change 100755 => 100644 libnczarr/zmap_file.c mode change 100755 => 100644 libnczarr/zmap_zip.c mode change 100755 => 100644 nc_test4/h5testszip.c mode change 100755 => 100644 nc_test4/ref_fixedstring.h5 mode change 100755 => 100644 nc_test4/tst_charvlenbug.c mode change 100755 => 100644 nc_test4/tst_fillonly.c mode change 100755 => 100644 ncdap_test/manyurls.h mode change 100755 => 100644 ncdump/ncpathcvt.c mode change 100755 => 100644 ncdump/ocprint.c mode change 100755 => 100644 ncdump/tst_rcapi.c mode change 100755 => 100644 nczarr_test/ncdumpchunks.c mode change 100755 => 100644 nczarr_test/ref_groups.h5 mode change 100755 => 100644 nczarr_test/ut_chunking.c mode change 100755 => 100644 nczarr_test/ut_projtest.h mode change 100755 => 100644 nczarr_test/ut_test.c mode change 100755 => 100644 plugins/H5Zblosc.c mode change 100755 => 100644 plugins/H5Zblosc.h mode change 100755 => 100644 plugins/H5Zszip.h diff --git a/cmake/modules/FindBlosc.cmake b/cmake/modules/FindBlosc.cmake old mode 100755 new mode 100644 diff --git a/cmake/modules/FindZip.cmake b/cmake/modules/FindZip.cmake old mode 100755 new mode 100644 diff --git a/docs/testserver.dox b/docs/testserver.dox old mode 100755 new mode 100644 diff --git a/libdispatch/dcrc32.h b/libdispatch/dcrc32.h old mode 100755 new mode 100644 diff --git a/libncpoco/CMakeLists.txt b/libncpoco/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/libncpoco/COPYRIGHT b/libncpoco/COPYRIGHT old mode 100755 new mode 100644 diff --git a/libncpoco/Makefile.am b/libncpoco/Makefile.am old mode 100755 new mode 100644 diff --git a/libncpoco/cp_test.c b/libncpoco/cp_test.c old mode 100755 new mode 100644 diff --git a/libncpoco/cp_unix.c b/libncpoco/cp_unix.c old mode 100755 new mode 100644 diff --git a/libncpoco/cp_win32.c b/libncpoco/cp_win32.c old mode 100755 new mode 100644 diff --git a/libncpoco/cptestlib.c b/libncpoco/cptestlib.c old mode 100755 new mode 100644 diff --git a/libncpoco/ncpoco.c b/libncpoco/ncpoco.c old mode 100755 new mode 100644 diff --git a/libncpoco/ncpoco.h b/libncpoco/ncpoco.h old mode 100755 new mode 100644 diff --git a/libnczarr/zmap_file.c b/libnczarr/zmap_file.c old mode 100755 new mode 100644 diff --git a/libnczarr/zmap_zip.c b/libnczarr/zmap_zip.c old mode 100755 new mode 100644 diff --git a/nc_test4/h5testszip.c b/nc_test4/h5testszip.c old mode 100755 new mode 100644 diff --git a/nc_test4/ref_fixedstring.h5 b/nc_test4/ref_fixedstring.h5 old mode 100755 new mode 100644 diff --git a/nc_test4/tst_charvlenbug.c b/nc_test4/tst_charvlenbug.c old mode 100755 new mode 100644 diff --git a/nc_test4/tst_fillonly.c b/nc_test4/tst_fillonly.c old mode 100755 new mode 100644 diff --git a/ncdap_test/manyurls.h b/ncdap_test/manyurls.h old mode 100755 new mode 100644 diff --git a/ncdump/ncpathcvt.c b/ncdump/ncpathcvt.c old mode 100755 new mode 100644 diff --git a/ncdump/ocprint.c b/ncdump/ocprint.c old mode 100755 new mode 100644 diff --git a/ncdump/tst_rcapi.c b/ncdump/tst_rcapi.c old mode 100755 new mode 100644 diff --git a/nczarr_test/ncdumpchunks.c b/nczarr_test/ncdumpchunks.c old mode 100755 new mode 100644 diff --git a/nczarr_test/ref_groups.h5 b/nczarr_test/ref_groups.h5 old mode 100755 new mode 100644 diff --git a/nczarr_test/ut_chunking.c b/nczarr_test/ut_chunking.c old mode 100755 new mode 100644 diff --git a/nczarr_test/ut_projtest.h b/nczarr_test/ut_projtest.h old mode 100755 new mode 100644 diff --git a/nczarr_test/ut_test.c b/nczarr_test/ut_test.c old mode 100755 new mode 100644 diff --git a/plugins/H5Zblosc.c b/plugins/H5Zblosc.c old mode 100755 new mode 100644 diff --git a/plugins/H5Zblosc.h b/plugins/H5Zblosc.h old mode 100755 new mode 100644 diff --git a/plugins/H5Zszip.h b/plugins/H5Zszip.h old mode 100755 new mode 100644 From ed53598aac70543f32c8e3b6ab458ac942d88b40 Mon Sep 17 00:00:00 2001 From: Magnus Ulimoen Date: Fri, 6 Oct 2023 13:48:00 +0200 Subject: [PATCH 11/35] Do not run test unless required --- libdispatch/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libdispatch/CMakeLists.txt b/libdispatch/CMakeLists.txt index 98b90bc96..1d867369b 100644 --- a/libdispatch/CMakeLists.txt +++ b/libdispatch/CMakeLists.txt @@ -51,7 +51,9 @@ IF(ENABLE_S3) ENDIF() ENDIF() -BUILD_BIN_TEST(ncrandom) +IF(ENABLE_TESTS) + BUILD_BIN_TEST(ncrandom) +ENDIF() FILE(GLOB CUR_EXTRA_DIST RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.c) SET(CUR_EXTRA_DIST ${CUR_EXTRA_DIST} CMakeLists.txt Makefile.am) From bef8cf0460e692115d3d0b6bbaa7b089721730a4 Mon Sep 17 00:00:00 2001 From: Dennis Heimbigner Date: Wed, 25 Oct 2023 15:14:29 -0600 Subject: [PATCH 12/35] Reduce warning by changing type of NC_OBJ.id. re: https://github.com/Unidata/netcdf-c/issues/2780 As noted in the above issue, changing the NC_OBJ.id field type from size_t to int reduces irrelevant warning. There is no semantic effect since the number of distinct ids will never approach the max positive integer value. Note that this could change in the future if the id becomes more than a simple counter. --- RELEASE_NOTES.md | 1 + include/nc4internal.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 50c0ea53b..ba82c156e 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -7,6 +7,7 @@ This file contains a high-level description of this package's evolution. Release ## 4.9.3 - TBD +* Obviate a number of irrelevant warning. See [Github #????](https://github.com/Unidata/netcdf-c/pull/????). * Mitigate the problem of remote/nczarr-related test interference. See [Github #2755](https://github.com/Unidata/netcdf-c/pull/2755). * Extend NCZarr to support unlimited dimensions. See [Github #2755](https://github.com/Unidata/netcdf-c/pull/2755). * Fix significant bug in the NCZarr cache management. See [Github #2737](https://github.com/Unidata/netcdf-c/pull/2737). diff --git a/include/nc4internal.h b/include/nc4internal.h index f9925b1de..9182c6980 100644 --- a/include/nc4internal.h +++ b/include/nc4internal.h @@ -131,7 +131,7 @@ typedef struct NC_OBJ { NC_SORT sort; /**< Type of object. */ char* name; /**< Name, assumed to be null terminated. */ - size_t id; /**< This objects ID. */ + int id; /**< This objects ID. */ } NC_OBJ; /** From 9df7f8d14b2b8d408887a51ce44dd674dd767f98 Mon Sep 17 00:00:00 2001 From: Dennis Heimbigner Date: Wed, 25 Oct 2023 15:26:46 -0600 Subject: [PATCH 13/35] Update release notes --- RELEASE_NOTES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index ba82c156e..1cebf9766 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -7,7 +7,7 @@ This file contains a high-level description of this package's evolution. Release ## 4.9.3 - TBD -* Obviate a number of irrelevant warning. See [Github #????](https://github.com/Unidata/netcdf-c/pull/????). +* Obviate a number of irrelevant warnings. See [Github #2781](https://github.com/Unidata/netcdf-c/pull/2781). * Mitigate the problem of remote/nczarr-related test interference. See [Github #2755](https://github.com/Unidata/netcdf-c/pull/2755). * Extend NCZarr to support unlimited dimensions. See [Github #2755](https://github.com/Unidata/netcdf-c/pull/2755). * Fix significant bug in the NCZarr cache management. See [Github #2737](https://github.com/Unidata/netcdf-c/pull/2737). From ce33d888a11d1bd38b2c03904e3891988e590ce6 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Tue, 14 Nov 2023 15:43:58 -0700 Subject: [PATCH 14/35] Add missing ERANGE_FILL to cmake-generated config.h. Include config.h in ncx.c. --- config.h.cmake.in | 6 ++++++ libsrc/ncx.m4 | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/config.h.cmake.in b/config.h.cmake.in index 04d876ff1..941240390 100644 --- a/config.h.cmake.in +++ b/config.h.cmake.in @@ -118,6 +118,12 @@ are set when opening a binary file on Windows. */ /* if true, build byte-range Client */ #cmakedefine ENABLE_BYTERANGE 1 +/* if true, enable ERANGE fill */ +#cmakedefine ENABLE_ERANGE_FILL 1 +#ifdef ENABLE_ERANGE_FILL +#define ERANGE_FILL 1 +#endif + /* if true, use hdf5 S3 virtual file reader */ #cmakedefine ENABLE_HDF5_ROS3 1 diff --git a/libsrc/ncx.m4 b/libsrc/ncx.m4 index c8ea6df41..48b8cf4ad 100644 --- a/libsrc/ncx.m4 +++ b/libsrc/ncx.m4 @@ -39,7 +39,7 @@ ifdef(`PNETCDF',` `#'if HAVE_CONFIG_H `#'include `#'endif') - +#include #include #include #include From d07dac918ca4e42233a7b73eaa2c67fbcfa0a93a Mon Sep 17 00:00:00 2001 From: Peter Hill Date: Fri, 24 Nov 2023 18:20:52 +0000 Subject: [PATCH 15/35] Silence conversion warnings from `malloc` arguments Mostly just add an explicit cast when calling `malloc` and its variants. Sometimes instead change the type of a local variable if this would silence multiple warnings. --- h5_test/tst_h_vl.c | 3 ++- include/nctestserver.h | 2 +- libdap2/dapdump.c | 8 +++--- libdap2/daputil.c | 3 ++- libdap4/d4file.c | 3 ++- libdap4/d4meta.c | 7 ++--- libdispatch/dinfermodel.c | 8 +++--- libdispatch/dutil.c | 4 +-- libdispatch/dv2i.c | 4 +-- libdispatch/dvar.c | 6 ++--- libdispatch/ncexhash.c | 4 +-- libdispatch/ncjson.c | 4 +-- libdispatch/utf8proc.c | 2 +- libhdf5/hdf5internal.c | 4 +-- libhdf5/hdf5open.c | 12 ++++----- libhdf5/hdf5var.c | 2 +- libncxml/ncxml_xml2.c | 4 ++- libnczarr/zmap.c | 10 +++---- libnczarr/zodom.c | 10 +++---- libnczarr/zsync.c | 4 +-- libnczarr/zutil.c | 8 +++--- libnczarr/zwalk.c | 2 +- libnczarr/zxcache.c | 3 ++- libsrc4/nc4attr.c | 2 +- libsrc4/nc4grp.c | 4 +-- libsrc4/nc4internal.c | 9 ++++--- nc_test/tst_formats.c | 3 ++- nc_test/tst_global_fillval.c | 5 ++-- nc_test/tst_nofill.c | 2 +- nc_test4/tst_chunks2.c | 2 +- nc_test4/tst_h_strbug.c | 3 ++- nc_test4/tst_vl.c | 13 ++++----- nc_test4/tst_vlenstr.c | 7 ++--- ncdap_test/test_nstride_cached.c | 2 +- ncdap_test/test_vara.c | 8 +++--- ncdump/chunkspec.c | 2 +- ncdump/dumplib.c | 26 +++++++++--------- ncdump/nc4printer.c | 12 ++++----- ncdump/nccopy.c | 46 ++++++++++++++++---------------- ncdump/ncdump.c | 29 ++++++++++---------- ncdump/nciter.c | 7 ++--- ncdump/ncvalidator.c | 6 ++--- ncdump/tst_create_files.c | 3 ++- ncdump/tst_fillbug.c | 2 +- ncdump/tst_vlen_data.c | 2 +- ncdump/utils.c | 14 +++++----- ncdump/vardata.c | 16 +++++------ ncgen/bindata.c | 7 ++--- ncgen/cdata.c | 4 +-- ncgen/cvt.c | 8 +++--- ncgen/data.c | 17 ++++++------ ncgen/escapes.c | 9 ++++--- ncgen/genchar.c | 4 +-- ncgen/generate.c | 9 ++++--- ncgen/ncgeny.c | 5 ++-- ncgen/util.c | 9 ++++--- ncgen3/genlib.c | 13 ++++----- nctest/add.c | 2 +- nctest/atttests.c | 34 +++++++++++------------ nctest/cdftests.c | 8 +++--- nctest/rec.c | 8 +++--- nctest/slabs.c | 4 +-- nctest/vardef.c | 2 +- nctest/varget.c | 2 +- nctest/vargetg.c | 2 +- nctest/varput.c | 2 +- nctest/varputg.c | 2 +- nctest/vartests.c | 6 ++--- nctest/vputget.c | 4 +-- nctest/vputgetg.c | 3 ++- nczarr_test/test_zchunks2.c | 2 +- nczarr_test/ut_util.c | 23 ++++++++-------- oc2/ocinternal.c | 5 ++-- oc2/ocutil.c | 3 ++- unit_test/tst_xcache.c | 2 +- 75 files changed, 283 insertions(+), 258 deletions(-) diff --git a/h5_test/tst_h_vl.c b/h5_test/tst_h_vl.c index 14bf68fba..16ac9e3db 100644 --- a/h5_test/tst_h_vl.c +++ b/h5_test/tst_h_vl.c @@ -7,6 +7,7 @@ #include "h5_err_macros.h" #include +#include #define FILE_NAME "tst_h_vl.h5" #define DIM1_LEN 3 @@ -23,7 +24,7 @@ main() hsize_t dims[1] = {DIM1_LEN}; hvl_t data[DIM1_LEN], data_in[DIM1_LEN]; int *phoney; - int i, j; + size_t i, j; size_t size; /* Create some phoney data, an array of struct s1, which holds a diff --git a/include/nctestserver.h b/include/nctestserver.h index 472d942ed..033d24e65 100644 --- a/include/nctestserver.h +++ b/include/nctestserver.h @@ -52,7 +52,7 @@ parseServers(const char* remotetestservers) /* Keep LGTM quiet */ if(rtslen > MAXREMOTETESTSERVERS) goto done; - list = (char**)malloc(sizeof(char*) * (int)(rtslen/2)); + list = (char**)malloc(sizeof(char*) * (rtslen/2)); if(list == NULL) return NULL; rts = strdup(remotetestservers); if(rts == NULL) goto done; diff --git a/libdap2/dapdump.c b/libdap2/dapdump.c index 611491490..1d77f6ef7 100644 --- a/libdap2/dapdump.c +++ b/libdap2/dapdump.c @@ -38,7 +38,7 @@ dumpmetadata(int ncid, NChdr** hdrp) fprintf(stdout,"ncid=%d ngatts=%d ndims=%d nvars=%d unlimid=%d\n", hdr->ncid,hdr->ngatts,hdr->ndims,hdr->nvars,hdr->unlimid); #endif - hdr->gatts = (NCattribute*)calloc(1,hdr->ngatts*sizeof(NCattribute)); + hdr->gatts = (NCattribute*)calloc(1, (size_t)hdr->ngatts*sizeof(NCattribute)); MEMCHECK(hdr->gatts,NC_ENOMEM); if(hdr->ngatts > 0) fprintf(stdout,"global attributes:\n"); @@ -81,7 +81,7 @@ dumpmetadata(int ncid, NChdr** hdrp) fprintf(stdout,"\n"); } - hdr->dims = (Dim*)malloc(hdr->ndims*sizeof(Dim)); + hdr->dims = (Dim*)malloc((size_t)hdr->ndims*sizeof(Dim)); MEMCHECK(hdr->dims,NC_ENOMEM); for(i=0;indims;i++) { hdr->dims[i].dimid = i; @@ -93,7 +93,7 @@ dumpmetadata(int ncid, NChdr** hdrp) fprintf(stdout,"dim[%d]: name=%s size=%lu\n", i,hdr->dims[i].name,(unsigned long)hdr->dims[i].size); } - hdr->vars = (Var*)malloc(hdr->nvars*sizeof(Var)); + hdr->vars = (Var*)malloc((size_t)hdr->nvars*sizeof(Var)); MEMCHECK(hdr->vars,NC_ENOMEM); for(i=0;invars;i++) { Var* var = &hdr->vars[i]; @@ -118,7 +118,7 @@ dumpmetadata(int ncid, NChdr** hdrp) fprintf(stdout," %d",var->dimids[j]); } fprintf(stdout,"}\n"); - var->atts = (NCattribute*)malloc(var->natts*sizeof(NCattribute)); + var->atts = (NCattribute*)malloc((size_t)var->natts*sizeof(NCattribute)); MEMCHECK(var->atts,NC_ENOMEM); for(j=0;jnatts;j++) { NCattribute* att = &var->atts[j]; diff --git a/libdap2/daputil.c b/libdap2/daputil.c index bdf533d45..67a472d3e 100644 --- a/libdap2/daputil.c +++ b/libdap2/daputil.c @@ -4,6 +4,7 @@ *********************************************************************/ #include "config.h" +#include #ifdef HAVE_SYS_TIME_H #include @@ -763,7 +764,7 @@ repairname(const char* name, const char* badchars) const char *p; char *q; int c; - int nnlen = 0; + size_t nnlen = 0; if(name == NULL) return NULL; nnlen = (3*strlen(name)); /* max needed */ diff --git a/libdap4/d4file.c b/libdap4/d4file.c index 46c1a0fdb..a3da5d8ce 100644 --- a/libdap4/d4file.c +++ b/libdap4/d4file.c @@ -7,6 +7,7 @@ #include "ncd4dispatch.h" #include "d4includes.h" #include "d4curlfunctions.h" +#include #ifdef _MSC_VER #include @@ -301,7 +302,7 @@ set_curl_properties(NCD4INFO* d4info) /* If no cookie file was defined, define a default */ char* path = NULL; char* newpath = NULL; - int len; + size_t len; errno = 0; NCglobalstate* globalstate = NC_getglobalstate(); diff --git a/libdap4/d4meta.c b/libdap4/d4meta.c index 1cea62f61..3c19eed40 100644 --- a/libdap4/d4meta.c +++ b/libdap4/d4meta.c @@ -5,6 +5,7 @@ #include "d4includes.h" #include +#include #include "nc4internal.h" #include "ncoffsets.h" @@ -603,8 +604,8 @@ savevarbyid(NCD4node* group, NCD4node* var) { if(group->group.varbyid == NULL) group->group.varbyid = nclistnew(); - nclistsetalloc(group->group.varbyid,var->meta.id); - nclistinsert(group->group.varbyid,var->meta.id,var); + nclistsetalloc(group->group.varbyid, (size_t)var->meta.id); + nclistinsert(group->group.varbyid, (size_t)var->meta.id,var); } /* Collect FQN path from var node up to and including @@ -730,7 +731,7 @@ compileAttrValues(NCD4meta* builder, NCD4node* attr, void** memoryp, NClist* blo NCD4node* container = attr->container; NCD4node* basetype = attr->basetype; NClist* values = attr->attr.values; - int count = nclistlength(values); + size_t count = nclistlength(values); memset((void*)&converter,0,sizeof(converter)); diff --git a/libdispatch/dinfermodel.c b/libdispatch/dinfermodel.c index 6f5e4a846..d23a6224b 100644 --- a/libdispatch/dinfermodel.c +++ b/libdispatch/dinfermodel.c @@ -320,8 +320,8 @@ parsepair(const char* pair, char** keyp, char** valuep) key = strdup(pair); } else { ptrdiff_t len = (p-pair); - if((key = malloc(len+1))==NULL) return NC_ENOMEM; - memcpy(key,pair,len); + if((key = malloc((size_t)len+1))==NULL) return NC_ENOMEM; + memcpy(key,pair,(size_t)len); key[len] = '\0'; if(p[1] == '\0') value = NULL; @@ -383,8 +383,8 @@ parseonchar(const char* s, int ch, NClist* segments) endp = strchr(p,ch); if(endp == NULL) endp = p + strlen(p); slen = (endp - p); - if((q = malloc(slen+1)) == NULL) {stat = NC_ENOMEM; goto done;} - memcpy(q,p,slen); + if((q = malloc((size_t)slen+1)) == NULL) {stat = NC_ENOMEM; goto done;} + memcpy(q,p,(size_t)slen); q[slen] = '\0'; nclistpush(segments,q); if(*endp == '\0') break; diff --git a/libdispatch/dutil.c b/libdispatch/dutil.c index 83b20dfb6..bd9169c8a 100644 --- a/libdispatch/dutil.c +++ b/libdispatch/dutil.c @@ -448,9 +448,9 @@ NC_split_delim(const char* arg, char delim, NClist* segments) len = (q - p); if(len == 0) {stat = NC_EURL; goto done;} - if((seg = malloc(len+1)) == NULL) + if((seg = malloc((size_t)len+1)) == NULL) {stat = NC_ENOMEM; goto done;} - memcpy(seg,p,len); + memcpy(seg,p,(size_t)len); seg[len] = '\0'; nclistpush(segments,seg); seg = NULL; /* avoid mem errors */ diff --git a/libdispatch/dv2i.c b/libdispatch/dv2i.c index 49be33ece..7643537c6 100644 --- a/libdispatch/dv2i.c +++ b/libdispatch/dv2i.c @@ -1254,7 +1254,7 @@ ncvarputg( ret = nc_inq_vartype(ncid, varid, &type); if(ret) return ret; el_size = nctypelen(type); - imp = (ptrdiff_t*) malloc(ndims * sizeof(ptrdiff_t)); + imp = (ptrdiff_t*) malloc((size_t)ndims * sizeof(ptrdiff_t)); for (i=0; ientries = (NCexentry*)calloc(map->leaflen,sizeof(NCexentry))) == NULL) + if((leaf->entries = (NCexentry*)calloc((size_t)map->leaflen, sizeof(NCexentry))) == NULL) {stat = NC_ENOMEM; goto done;} leaf->active = 0; @@ -588,7 +588,7 @@ exhashnewleaf(NCexhashmap* map, NCexleaf** leafp) if((leaf = calloc(1,sizeof(NCexleaf))) == NULL) goto done; assert(map->leaflen > 0); - if((leaf->entries = calloc(map->leaflen,sizeof(NCexentry))) == NULL) + if((leaf->entries = calloc((size_t)map->leaflen, sizeof(NCexentry))) == NULL) goto done; leaf->uid = map->uid++; *leafp = leaf; leaf = NULL; diff --git a/libdispatch/ncjson.c b/libdispatch/ncjson.c index 8c193eb4a..acbe3e92b 100644 --- a/libdispatch/ncjson.c +++ b/libdispatch/ncjson.c @@ -798,9 +798,9 @@ listappend(struct NCjlist* list, NCjson* json) list->contents[0] = json; list->len++; } else { - if((newcontents = (NCjson**)calloc((2*list->len)+1,sizeof(NCjson*)))==NULL) + if((newcontents = (NCjson**)calloc((size_t)(2*list->len)+1,sizeof(NCjson*)))==NULL) {stat = NCJTHROW(NCJ_ERR); goto done;} - memcpy(newcontents,list->contents,list->len*sizeof(NCjson*)); + memcpy(newcontents,list->contents, (size_t)list->len*sizeof(NCjson*)); newcontents[list->len] = json; list->len++; free(list->contents); diff --git a/libdispatch/utf8proc.c b/libdispatch/utf8proc.c index 68d8dd4a2..d0b037ade 100644 --- a/libdispatch/utf8proc.c +++ b/libdispatch/utf8proc.c @@ -713,7 +713,7 @@ static nc_utf8proc_ssize_t nc_seqindex_write_char_decomposed(nc_utf8proc_uint16_ *dstptr = NULL; result = nc_utf8proc_decompose_custom(str, strlen, NULL, 0, options, custom_func, custom_data); if (result < 0) return result; - buffer = (nc_utf8proc_int32_t *) malloc(result * sizeof(nc_utf8proc_int32_t) + 1); + buffer = (nc_utf8proc_int32_t *) malloc((size_t)result * sizeof(nc_utf8proc_int32_t) + 1); if (!buffer) return UTF8PROC_ERROR_NOMEM; result = nc_utf8proc_decompose_custom(str, strlen, buffer, result, options, custom_func, custom_data); if (result < 0) { diff --git a/libhdf5/hdf5internal.c b/libhdf5/hdf5internal.c index 5532ed0c1..2f4e5792a 100644 --- a/libhdf5/hdf5internal.c +++ b/libhdf5/hdf5internal.c @@ -150,9 +150,9 @@ find_var_dim_max_length(NC_GRP_INFO_T *grp, int varid, int dimid, BAIL(NC_EHDFERR); if (dataset_ndims != var->ndims) BAIL(NC_EHDFERR); - if (!(h5dimlen = malloc(dataset_ndims * sizeof(hsize_t)))) + if (!(h5dimlen = malloc((size_t)dataset_ndims * sizeof(hsize_t)))) BAIL(NC_ENOMEM); - if (!(h5dimlenmax = malloc(dataset_ndims * sizeof(hsize_t)))) + if (!(h5dimlenmax = malloc((size_t)dataset_ndims * sizeof(hsize_t)))) BAIL(NC_ENOMEM); if ((dataset_ndims = H5Sget_simple_extent_dims(spaceid, h5dimlen, h5dimlenmax)) < 0) diff --git a/libhdf5/hdf5open.c b/libhdf5/hdf5open.c index 0c2f5b523..b02bdc769 100644 --- a/libhdf5/hdf5open.c +++ b/libhdf5/hdf5open.c @@ -1365,9 +1365,9 @@ get_attached_info(NC_VAR_INFO_T *var, NC_HDF5_VAR_INFO_T *hdf5_var, int ndims, * attached for each dimension, and the HDF5 object IDs of the * scale(s). */ assert(!hdf5_var->dimscale_hdf5_objids); - if (!(hdf5_var->dimscale_attached = calloc(ndims, sizeof(nc_bool_t)))) + if (!(hdf5_var->dimscale_attached = calloc((size_t)ndims, sizeof(nc_bool_t)))) return NC_ENOMEM; - if (!(hdf5_var->dimscale_hdf5_objids = malloc(ndims * + if (!(hdf5_var->dimscale_hdf5_objids = malloc((size_t)ndims * sizeof(struct hdf5_objid)))) return NC_ENOMEM; @@ -1886,7 +1886,7 @@ read_hdf5_att(NC_GRP_INFO_T *grp, hid_t attid, NC_ATT_INFO_T *att) &type_size))) return retval; { - if (!(att->data = malloc((unsigned int)(att->len * type_size)))) + if (!(att->data = malloc((unsigned int)((size_t)att->len * type_size)))) BAIL(NC_ENOMEM); /* For a fixed length HDF5 string, the read requires @@ -1907,7 +1907,7 @@ read_hdf5_att(NC_GRP_INFO_T *grp, hid_t attid, NC_ATT_INFO_T *att) char** dst = NULL; /* Alloc space for the contiguous memory read. */ - if (!(contig_buf = malloc(att->len * fixed_size * sizeof(char)))) + if (!(contig_buf = malloc((size_t)att->len * fixed_size * sizeof(char)))) BAIL(NC_ENOMEM); /* Read the fixed-len strings as one big block. */ @@ -2088,7 +2088,7 @@ read_type(NC_GRP_INFO_T *grp, hid_t hdf_typeid, char *type_name) return NC_EHDFERR; LOG((5, "compound type has %d members", nmembers)); type->u.c.field = nclistnew(); - nclistsetalloc(type->u.c.field,nmembers); + nclistsetalloc(type->u.c.field, (size_t)nmembers); for (m = 0; m < nmembers; m++) { @@ -2253,7 +2253,7 @@ read_type(NC_GRP_INFO_T *grp, hid_t hdf_typeid, char *type_name) if ((nmembers = H5Tget_nmembers(hdf_typeid)) < 0) return NC_EHDFERR; type->u.e.enum_member = nclistnew(); - nclistsetalloc(type->u.e.enum_member,nmembers); + nclistsetalloc(type->u.e.enum_member, (size_t)nmembers); /* Allocate space for one value. */ if (!(value = calloc(1, type_size))) diff --git a/libhdf5/hdf5var.c b/libhdf5/hdf5var.c index 6d37fe909..70a971199 100644 --- a/libhdf5/hdf5var.c +++ b/libhdf5/hdf5var.c @@ -433,7 +433,7 @@ NC4_def_var(int ncid, const char *name, nc_type xtype, int ndims, * remember whether dimension scales have been attached to each * dimension. */ if (!hdf5_var->dimscale && ndims) - if (!(hdf5_var->dimscale_attached = calloc(ndims, sizeof(nc_bool_t)))) + if (!(hdf5_var->dimscale_attached = calloc((size_t)ndims, sizeof(nc_bool_t)))) BAIL(NC_ENOMEM); /* Return the varid. */ diff --git a/libncxml/ncxml_xml2.c b/libncxml/ncxml_xml2.c index c32b1cc85..12132a755 100644 --- a/libncxml/ncxml_xml2.c +++ b/libncxml/ncxml_xml2.c @@ -1,5 +1,6 @@ /* Copyright 2018-2018 University Corporation for Atmospheric Research/Unidata. */ +#include #include #include #include @@ -139,7 +140,8 @@ ncxml_attr_pairs(ncxml_t xml0, char*** pairsp) char** pairs = NULL; xmlNode* xml = (xmlNode*)xml0; xmlAttr* attr = NULL; - int i,count = 0; + int i; + size_t count = 0; if(xml == NULL) return 0; /* First count */ diff --git a/libnczarr/zmap.c b/libnczarr/zmap.c index eb808d431..f30c321d0 100644 --- a/libnczarr/zmap.c +++ b/libnczarr/zmap.c @@ -322,8 +322,8 @@ nczm_divide_at(const char* key, int nsegs, char** prefixp, char** suffixp) /* p should point at the presegs+1 start point */ delta = (p-key); if(prefixp) { - prefix = malloc(delta+1); - memcpy(prefix,key,delta); + prefix = malloc((size_t)delta+1); + memcpy(prefix,key,(size_t)delta); prefix[delta] = '\0'; *prefixp = prefix; } @@ -436,7 +436,7 @@ nczm_segment1(const char* path, char** seg1p) q = strchr(p,'/'); if(q == NULL) q = p+strlen(p); /* point to stop character */ delta = (q-p); - if((seg1 = (char*)malloc(delta+1))==NULL) + if((seg1 = (char*)malloc((size_t)delta+1))==NULL) {ret = NC_ENOMEM; goto done;} memcpy(seg1,p,delta); seg1[delta] = '\0'; @@ -489,9 +489,9 @@ nczm_basename(const char* path, char** basep) p = strrchr(last,'.'); if(p == NULL) p = last+strlen(last); delta = (p - last); - if((base = (char*)malloc(delta+1))==NULL) + if((base = (char*)malloc((size_t)delta+1))==NULL) {stat = NC_ENOMEM; goto done;} - memcpy(base,last,delta); + memcpy(base,last,(size_t)delta); base[delta] = '\0'; if(basep) {*basep = base; base = NULL;} done: diff --git a/libnczarr/zodom.c b/libnczarr/zodom.c index 7cde2834e..21e920412 100644 --- a/libnczarr/zodom.c +++ b/libnczarr/zodom.c @@ -131,11 +131,11 @@ buildodom(int rank, NCZOdometer** odomp) if((odom = calloc(1,sizeof(NCZOdometer))) == NULL) goto done; odom->rank = rank; - if((odom->start=calloc(1,(sizeof(size64_t)*rank)))==NULL) goto nomem; - if((odom->stop=calloc(1,(sizeof(size64_t)*rank)))==NULL) goto nomem; - if((odom->stride=calloc(1,(sizeof(size64_t)*rank)))==NULL) goto nomem; - if((odom->len=calloc(1,(sizeof(size64_t)*rank)))==NULL) goto nomem; - if((odom->index=calloc(1,(sizeof(size64_t)*rank)))==NULL) goto nomem; + if((odom->start=calloc(1,(sizeof(size64_t)*(size_t)rank)))==NULL) goto nomem; + if((odom->stop=calloc(1,(sizeof(size64_t)*(size_t)rank)))==NULL) goto nomem; + if((odom->stride=calloc(1,(sizeof(size64_t)*(size_t)rank)))==NULL) goto nomem; + if((odom->len=calloc(1,(sizeof(size64_t)*(size_t)rank)))==NULL) goto nomem; + if((odom->index=calloc(1,(sizeof(size64_t)*(size_t)rank)))==NULL) goto nomem; *odomp = odom; odom = NULL; } done: diff --git a/libnczarr/zsync.c b/libnczarr/zsync.c index 8a14cdc69..44ed00e28 100644 --- a/libnczarr/zsync.c +++ b/libnczarr/zsync.c @@ -1676,7 +1676,7 @@ define_vars(NC_FILE_INFO_T* file, NC_GRP_INFO_T* grp, NClist* varnames) /* Save the rank of the variable */ if((stat = nc4_var_set_ndims(var, rank))) goto done; /* extract the shapes */ - if((shapes = (size64_t*)malloc(sizeof(size64_t)*zarr_rank)) == NULL) + if((shapes = (size64_t*)malloc(sizeof(size64_t)*(size_t)zarr_rank)) == NULL) {stat = (THROW(NC_ENOMEM)); goto done;} if((stat = decodeints(jvalue, shapes))) goto done; } @@ -1702,7 +1702,7 @@ define_vars(NC_FILE_INFO_T* file, NC_GRP_INFO_T* grp, NClist* varnames) var->storage = NC_CHUNKED; if(var->ndims != rank) {stat = (THROW(NC_ENCZARR)); goto done;} - if((var->chunksizes = malloc(sizeof(size_t)*zarr_rank)) == NULL) + if((var->chunksizes = malloc(sizeof(size_t)*(size_t)zarr_rank)) == NULL) {stat = NC_ENOMEM; goto done;} if((stat = decodeints(jvalue, chunks))) goto done; /* validate the chunk sizes */ diff --git a/libnczarr/zutil.c b/libnczarr/zutil.c index 5e10ffaf9..0fc26580a 100644 --- a/libnczarr/zutil.c +++ b/libnczarr/zutil.c @@ -801,8 +801,8 @@ NCZ_comma_parse(const char* s, NClist* list) endp = strchr(p,','); if(endp == NULL) endp = p + strlen(p); slen = (endp - p); - if((s = malloc(slen+1)) == NULL) {stat = NC_ENOMEM; goto done;} - memcpy(s,p,slen); + if((s = malloc((size_t)slen+1)) == NULL) {stat = NC_ENOMEM; goto done;} + memcpy(s,p,(size_t)slen); s[slen] = '\0'; if(nclistmatch(list,s,0)) { nullfree(s); /* duplicate */ @@ -1013,9 +1013,9 @@ NCZ_fixed2char(const void* fixed, char** charp, size_t count, int maxstrlen) if(p[0] == '\0') { sp = NULL; } else { - if((sp = (unsigned char*)malloc(maxstrlen+1))==NULL) /* ensure null terminated */ + if((sp = (unsigned char*)malloc((size_t)maxstrlen+1))==NULL) /* ensure null terminated */ return NC_ENOMEM; - memcpy(sp,p,maxstrlen); + memcpy(sp,p,(size_t)maxstrlen); sp[maxstrlen] = '\0'; } charp[i] = (char*)sp; diff --git a/libnczarr/zwalk.c b/libnczarr/zwalk.c index 1a7faba2d..21f9ed943 100644 --- a/libnczarr/zwalk.c +++ b/libnczarr/zwalk.c @@ -586,7 +586,7 @@ NCZ_projectslices(struct Common* common, size64_t stride[NC_MAX_VAR_DIMS]; size64_t len[NC_MAX_VAR_DIMS]; - if((allprojections = calloc(common->rank,sizeof(NCZSliceProjections))) == NULL) + if((allprojections = calloc((size_t)common->rank, sizeof(NCZSliceProjections))) == NULL) {stat = NC_ENOMEM; goto done;} memset(ranges,0,sizeof(ranges)); diff --git a/libnczarr/zxcache.c b/libnczarr/zxcache.c index 7a469587a..d861d86d3 100644 --- a/libnczarr/zxcache.c +++ b/libnczarr/zxcache.c @@ -14,6 +14,7 @@ #include "zcache.h" #include "ncxcache.h" #include "zfilter.h" +#include #undef DEBUG @@ -662,7 +663,7 @@ put_chunk(NCZChunkCache* cache, NCZCacheEntry* entry) /* Convert from char* to char[strlen] format */ int maxstrlen = NCZ_get_maxstrlen((NC_OBJ*)cache->var); assert(maxstrlen > 0); - if((strchunk = malloc(cache->chunkcount*maxstrlen))==NULL) {stat = NC_ENOMEM; goto done;} + if((strchunk = malloc((size_t)cache->chunkcount * (size_t)maxstrlen))==NULL) {stat = NC_ENOMEM; goto done;} /* copy char* to char[] format */ if((stat = NCZ_char2fixed((const char**)entry->data,strchunk,cache->chunkcount,maxstrlen))) goto done; /* Reclaim the old chunk */ diff --git a/libsrc4/nc4attr.c b/libsrc4/nc4attr.c index fed497614..2cb5e5946 100644 --- a/libsrc4/nc4attr.c +++ b/libsrc4/nc4attr.c @@ -111,7 +111,7 @@ nc4_get_att_ptrs(NC_FILE_INFO_T *h5, NC_GRP_INFO_T *grp, NC_VAR_INFO_T *var, !(mem_type == NC_CHAR && (att->nc_typeid == NC_UBYTE || att->nc_typeid == NC_BYTE))) { - if (!(bufr = malloc((size_t)(att->len * type_size)))) + if (!(bufr = malloc((size_t)(att->len) * type_size))) BAIL(NC_ENOMEM); need_to_convert++; if ((retval = nc4_convert_type(att->data, bufr, att->nc_typeid, diff --git a/libsrc4/nc4grp.c b/libsrc4/nc4grp.c index f4a757baa..7e97ad9fd 100644 --- a/libsrc4/nc4grp.c +++ b/libsrc4/nc4grp.c @@ -177,9 +177,9 @@ NC4_inq_grpname_full(int ncid, size_t *lenp, char *full_name) ; /* Allocate storage. */ - if (!(name = malloc((g + 1) * (NC_MAX_NAME + 1) + 1))) + if (!(name = malloc((size_t)(g + 1) * (NC_MAX_NAME + 1) + 1))) return NC_ENOMEM; - if (!(gid = malloc((g + 1) * sizeof(int)))) + if (!(gid = malloc((size_t)(g + 1) * sizeof(int)))) { free(name); return NC_ENOMEM; diff --git a/libsrc4/nc4internal.c b/libsrc4/nc4internal.c index 2c6e64d1b..3a4ace72e 100644 --- a/libsrc4/nc4internal.c +++ b/libsrc4/nc4internal.c @@ -24,6 +24,7 @@ #include "ncdispatch.h" /* from libdispatch */ #include "ncutf8.h" #include +#include #include "ncrc.h" /** @internal Number of reserved attributes. These attributes are @@ -788,14 +789,14 @@ nc4_var_set_ndims(NC_VAR_INFO_T *var, int ndims) /* Allocate space for dimension information. */ if (ndims) { - if (!(var->dim = calloc(ndims, sizeof(NC_DIM_INFO_T *)))) + if (!(var->dim = calloc((size_t)ndims, sizeof(NC_DIM_INFO_T *)))) return NC_ENOMEM; - if (!(var->dimids = calloc(ndims, sizeof(int)))) + if (!(var->dimids = calloc((size_t)ndims, sizeof(int)))) return NC_ENOMEM; /* Initialize dimids to illegal values (-1). See the comment in nc4_rec_match_dimscales(). */ - memset(var->dimids, -1, ndims * sizeof(int)); + memset(var->dimids, -1, (size_t)ndims * sizeof(int)); } return NC_NOERR; @@ -1159,7 +1160,7 @@ nc4_field_list_add(NC_TYPE_INFO_T *parent, const char *name, if (ndims) { int i; - if (!(field->dim_size = malloc(ndims * sizeof(int)))) + if (!(field->dim_size = malloc((size_t)ndims * sizeof(int)))) { free(field->hdr.name); free(field); diff --git a/nc_test/tst_formats.c b/nc_test/tst_formats.c index 23cd1000c..f56ecf362 100644 --- a/nc_test/tst_formats.c +++ b/nc_test/tst_formats.c @@ -9,6 +9,7 @@ #include "config.h" #include +#include #include "err_macros.h" #define FILE_NAME_BASE "tst_formats" @@ -281,7 +282,7 @@ main(int argc, char **argv) char var_name[NC_MAX_NAME + 1]; int dimid[NDIM2]; int xtype[NTYPE] = {NC_BYTE, NC_CHAR, NC_SHORT, NC_INT, NC_FLOAT, NC_DOUBLE}; - int type_size[NTYPE] = {1, 1, 2, 4, 4, 8}; + size_t type_size[NTYPE] = {1, 1, 2, 4, 4, 8}; int varid[NTYPE]; size_t start[NDIM2] = {0, 0}; size_t count[NDIM2] = {2, 2}; diff --git a/nc_test/tst_global_fillval.c b/nc_test/tst_global_fillval.c index 51415d75a..38e4e60f6 100644 --- a/nc_test/tst_global_fillval.c +++ b/nc_test/tst_global_fillval.c @@ -16,6 +16,7 @@ #include "config.h" #include +#include #include "err_macros.h" #define FILE_NAME "tst_global_fillval.nc" @@ -28,8 +29,8 @@ main(int argc, char **argv) { int n = 0; - int i; - int num_formats = 2; + size_t i; + size_t num_formats = 2; int *formats = NULL; /* Determine how many formats are in use. */ diff --git a/nc_test/tst_nofill.c b/nc_test/tst_nofill.c index b6cb12d6f..3d2b67885 100644 --- a/nc_test/tst_nofill.c +++ b/nc_test/tst_nofill.c @@ -421,7 +421,7 @@ main(int argc, char **argv) char varname2[NC_MAX_NAME]; /* How many values in this variable to compare? */ if (nc_inq_varndims(ncid1, varid, &ndims)) ERR; - dimids = malloc((ndims + 1) * sizeof(int)); + dimids = malloc((size_t)(ndims + 1) * sizeof(int)); if (!dimids) ERR; if (nc_inq_vardimid (ncid1, varid, dimids)) ERR; nvals = 1; diff --git a/nc_test4/tst_chunks2.c b/nc_test4/tst_chunks2.c index 0499d6f39..10292cd62 100644 --- a/nc_test4/tst_chunks2.c +++ b/nc_test4/tst_chunks2.c @@ -24,7 +24,7 @@ calculate_waste(int ndims, size_t *dimlen, size_t *chunksize, float *waste) size_t chunk_size = 1; assert(waste && dimlen && chunksize && ndims); - if (!(num_chunks = calloc(ndims, sizeof(size_t)))) ERR; + if (!(num_chunks = calloc((size_t)ndims, sizeof(size_t)))) ERR; #ifdef PRINT_CHUNK_WASTE_REPORT printf("\n"); diff --git a/nc_test4/tst_h_strbug.c b/nc_test4/tst_h_strbug.c index 91b3ce36e..3d573c5df 100644 --- a/nc_test4/tst_h_strbug.c +++ b/nc_test4/tst_h_strbug.c @@ -14,6 +14,7 @@ #include #include #include +#include #define FILE_NAME "tst_h_strbug.h5" #define VS_ATT_NAME "vsatt" @@ -173,7 +174,7 @@ main() if (type != NC_STRING) ERR; if (nc_inq_varndims(ncid, varid, &ndims )) ERR; if (ndims != RANK) ERR; - if (!(dimids = malloc(ndims * sizeof(int)))) ERR; + if (!(dimids = malloc((size_t)ndims * sizeof(int)))) ERR; if (nc_inq_vardimid(ncid, varid, dimids)) ERR; if (nc_inq_dimlen(ncid, dimids[0], &nstrings)) ERR; if (!(data_in = (char **)malloc(nstrings * sizeof(char *)))) ERR; diff --git a/nc_test4/tst_vl.c b/nc_test4/tst_vl.c index cde9927d8..5aef801a6 100644 --- a/nc_test4/tst_vl.c +++ b/nc_test4/tst_vl.c @@ -8,6 +8,7 @@ */ #include +#include #include "err_macros.h" #include "netcdf.h" @@ -38,7 +39,7 @@ main(int argc, char **argv) char name_in[NC_MAX_NAME + 1]; int *phony, class_in; size_t len_in; - int i, j; + size_t i, j; /* Create phony data. */ for (i=0; i #include #include #include @@ -34,7 +35,7 @@ checkErrorCode(int status, const char* message) void -writeVariable(int dimlength, int ncid, nc_type vlen_typeID) +writeVariable(size_t dimlength, int ncid, nc_type vlen_typeID) { int retval = NC_NOERR; int dimid; @@ -99,12 +100,12 @@ createFruitsData(int elemno, int vlensize, int* stringIndexp, nc_vlen_t* data) } void -writeAttribute(int len, int ncid, nc_type vlen_typeID) +writeAttribute(size_t len, int ncid, nc_type vlen_typeID) { int retval = NC_NOERR; /* Setup data */ - nc_vlen_t* data = calloc(sizeof(nc_vlen_t),len); + nc_vlen_t* data = calloc(sizeof(nc_vlen_t), len); /* create six variable length arrays of strings */ int stringIndex = 0; diff --git a/ncdap_test/test_nstride_cached.c b/ncdap_test/test_nstride_cached.c index c539ec90c..cd45bc9f5 100644 --- a/ncdap_test/test_nstride_cached.c +++ b/ncdap_test/test_nstride_cached.c @@ -99,7 +99,7 @@ main() int pass = 1; int nelems = XSIZE*YSIZE; int idim, ndim; - float *dat = (float*)malloc(sizeof(float)*nelems); + float *dat = (float*)malloc(sizeof(float)*(size_t)nelems); float sdat[10]; char* svc; diff --git a/ncdap_test/test_vara.c b/ncdap_test/test_vara.c index aee2d2865..bc1e582b2 100644 --- a/ncdap_test/test_vara.c +++ b/ncdap_test/test_vara.c @@ -158,10 +158,10 @@ static Odom* odom_create(int rank) Odom* odom = (Odom*)malloc(sizeof(Odom)); /* Init the odometer */ odom->rank = rank; - odom->index = (size_t*)calloc(sizeof(size_t)*rank,1); - odom->stop = (size_t*)calloc(sizeof(size_t)*rank,1); - odom->start = (size_t*)calloc(sizeof(size_t)*rank,1); - odom->count = (size_t*)calloc(sizeof(size_t)*rank,1); + odom->index = (size_t*)calloc(sizeof(size_t)*(size_t)rank,1); + odom->stop = (size_t*)calloc(sizeof(size_t)*(size_t)rank,1); + odom->start = (size_t*)calloc(sizeof(size_t)*(size_t)rank,1); + odom->count = (size_t*)calloc(sizeof(size_t)*(size_t)rank,1); return odom; } diff --git a/ncdump/chunkspec.c b/ncdump/chunkspec.c index 8029530bc..909e3ee07 100644 --- a/ncdump/chunkspec.c +++ b/ncdump/chunkspec.c @@ -136,7 +136,7 @@ dimchunkspec_parse(int igrp, const char *spec) goto done; } /* extract dimension name */ - dimname = (char *) emalloc(pp - np + 1); + dimname = (char *) emalloc((size_t)(pp - np + 1)); dp = dimname; while(np < pp) { *dp++ = *np++; diff --git a/ncdump/dumplib.c b/ncdump/dumplib.c index 03fe3b278..c270eb4f0 100644 --- a/ncdump/dumplib.c +++ b/ncdump/dumplib.c @@ -415,7 +415,7 @@ count_udtypes(int ncid) { /* Get number of types in this group */ NC_CHECK( nc_inq_typeids(ncid, &ntypes, NULL) ) ; NC_CHECK( nc_inq_grps(ncid, &numgrps, NULL) ) ; - ncids = (int *) emalloc(sizeof(int) * (numgrps + 1)); + ncids = (int *) emalloc(sizeof(int) * (size_t)(numgrps + 1)); NC_CHECK( nc_inq_grps(ncid, NULL, ncids) ) ; /* Add number of types in each subgroup, if any */ for (i=0; i < numgrps; i++) { @@ -1520,7 +1520,7 @@ init_types(int ncid) { if (max_type == 0) { /* if called for first time */ int maxtype = max_typeid(ncid); int i; - nctypes = (nctype_t **) emalloc((maxtype + 2) * sizeof(nctype_t *)); + nctypes = (nctype_t **) emalloc((size_t)(maxtype + 2) * sizeof(nctype_t *)); for(i=0; i < maxtype+1; i++) nctypes[i] = NULL; /* so can later skip over unused type slots */ init_prim_types(ncid); @@ -1532,7 +1532,7 @@ init_types(int ncid) { if (ntypes) { int t; - int *typeids = emalloc((ntypes + 1) * sizeof(int)); + int *typeids = emalloc((size_t)(ntypes + 1) * sizeof(int)); NC_CHECK( nc_inq_typeids(ncid, NULL, typeids) ); for (t = 0; t < ntypes; t++) { nctype_t *tinfo; /* details about the type */ @@ -1587,14 +1587,14 @@ init_types(int ncid) { NC_CHECK( nc_inq_compound_field(ncid, tinfo->tid, fidx, NULL, &offset, &ftype, &rank, sides) ); - if(rank > 0) sides = (int *) emalloc(rank * sizeof(int)); + if(rank > 0) sides = (int *) emalloc((size_t)rank * sizeof(int)); NC_CHECK( nc_inq_compound_field(ncid, tinfo->tid, fidx, NULL, NULL, NULL, NULL, sides) ); tinfo->fids[fidx] = ftype; tinfo->offsets[fidx] = offset; tinfo->ranks[fidx] = rank; if (rank > 0) - tinfo->sides[fidx] = (int *) emalloc(rank * sizeof(int)); + tinfo->sides[fidx] = (int *) emalloc((size_t)rank * sizeof(int)); tinfo->nvals[fidx] = 1; for(i = 0; i < rank; i++) { tinfo->sides[fidx][i] = sides[i]; @@ -1629,7 +1629,7 @@ init_types(int ncid) { /* See how many groups there are. */ NC_CHECK( nc_inq_grps(ncid, &numgrps, NULL) ); if (numgrps > 0) { - ncids = (int *) emalloc(numgrps * sizeof(int)); + ncids = (int *) emalloc((size_t)numgrps * sizeof(int)); /* Get the list of group ids. */ NC_CHECK( nc_inq_grps(ncid, NULL, ncids) ); /* Call this function for each group. */ @@ -1670,10 +1670,10 @@ iscoordvar(int ncid, int varid) #endif if (dims) free(dims); - dims = (ncdim_t *) emalloc((ndims + 1) * sizeof(ncdim_t)); + dims = (ncdim_t *) emalloc((size_t)(ndims + 1) * sizeof(ncdim_t)); if (dimids) free(dimids); - dimids = (int *) emalloc((ndims + 1) * sizeof(int)); + dimids = (int *) emalloc((size_t)(ndims + 1) * sizeof(int)); #ifdef USE_NETCDF4 NC_CHECK( nc_inq_dimids(ncid, &ndims1, dimids, include_parents ) ); #else @@ -1767,7 +1767,7 @@ print_type_name(int locid, int typeid) { curlocid = parent_groupid; NC_CHECK( nc_inq_typeids(curlocid, &ntypes, NULL) ); if(ntypes > 0) { - int *typeids = (int *) emalloc((ntypes + 1) * sizeof(int)); + int *typeids = (int *) emalloc((size_t)(ntypes + 1) * sizeof(int)); int i; NC_CHECK( nc_inq_typeids(curlocid, &ntypes, typeids) ); for(i = 0; i < ntypes; i++) { @@ -1822,7 +1822,7 @@ init_is_unlim(int ncid, int **is_unlim_p) return NC_EBADGRPID; /* Now ncid is root group. Get total number of groups and their ids */ NC_CHECK( nc_inq_grps_full(ncid, &num_grps, NULL) ); - grpids = emalloc((num_grps + 1) * sizeof(int)); + grpids = emalloc((size_t)(num_grps + 1) * sizeof(int)); NC_CHECK( nc_inq_grps_full(ncid, &num_grps, grpids) ); #define DONT_INCLUDE_PARENTS 0 /* Get all dimensions in groups and info about which ones are unlimited */ @@ -1835,18 +1835,18 @@ init_is_unlim(int ncid, int **is_unlim_p) grpid = grpids[igrp]; NC_CHECK( nc_inq_dimids(grpid, &ndims, NULL, DONT_INCLUDE_PARENTS) ); num_dims += ndims; - dimids = (int*)emalloc(ndims*sizeof(int)); + dimids = (int*)emalloc((size_t)ndims*sizeof(int)); NC_CHECK( nc_inq_dimids(grpid, &ndims, dimids, DONT_INCLUDE_PARENTS) ); for(i=0;i max_dimid) max_dimid = dimids[i];} free(dimids); } assert(max_dimid >= 0); - *is_unlim_p = emalloc((max_dimid + 1 + 1) * sizeof(int)); + *is_unlim_p = emalloc((size_t)(max_dimid + 1 + 1) * sizeof(int)); for(igrp = 0; igrp < num_grps; igrp++) { int ndims, idim, *dimids, nundims; grpid = grpids[igrp]; NC_CHECK( nc_inq_dimids(grpid, &ndims, NULL, DONT_INCLUDE_PARENTS) ); - dimids = emalloc((ndims + 1) * sizeof(int)); + dimids = emalloc((size_t)(ndims + 1) * sizeof(int)); NC_CHECK( nc_inq_dimids(grpid, &ndims, dimids, DONT_INCLUDE_PARENTS) ); /* mark all dims in this group as fixed-size */ for(idim = 0; idim < ndims; idim++) { diff --git a/ncdump/nc4printer.c b/ncdump/nc4printer.c index 10de3e785..f17584a1b 100644 --- a/ncdump/nc4printer.c +++ b/ncdump/nc4printer.c @@ -657,18 +657,18 @@ record(NC4printer* out, NCID* node) switch (node->sort) { case DIM: if(nclistlength(out->dims) <= node->id) { - nclistsetalloc(out->dims,node->id+1); - nclistsetlength(out->dims,node->id+1); + nclistsetalloc(out->dims, (size_t)node->id+1); + nclistsetlength(out->dims, (size_t)node->id+1); } - nclistset(out->dims,node->id,node); + nclistset(out->dims, (size_t)node->id, node); break; case ATOMTYPE: case USERTYPE: if(nclistlength(out->types) <= node->id) { - nclistsetalloc(out->types,node->id+1); - nclistsetlength(out->types,node->id+1); + nclistsetalloc(out->types, (size_t)node->id+1); + nclistsetlength(out->types, (size_t)node->id+1); } - nclistset(out->types,node->id,node); + nclistset(out->types, (size_t)node->id, node); break; default: break; } diff --git a/ncdump/nccopy.c b/ncdump/nccopy.c index ae041547e..190696d72 100644 --- a/ncdump/nccopy.c +++ b/ncdump/nccopy.c @@ -432,7 +432,7 @@ inq_var_chunksize(int igrp, int varid, size_t* chunksizep) { NC_CHECK(nc_inq_type(igrp, vartype, NULL, &value_size)); prod = value_size; NC_CHECK(nc_inq_varndims(igrp, varid, &ndims)); - chunksizes = (size_t *) emalloc((ndims + 1) * sizeof(size_t)); + chunksizes = (size_t *) emalloc((size_t)(ndims + 1) * sizeof(size_t)); contig = NC_CHUNKED; NC_CHECK(nc_inq_var_chunking(igrp, varid, &contig, NULL)); if(contig != NC_CHUNKED) { @@ -493,7 +493,7 @@ inq_var_chunking_params(int igrp, int ivarid, int ogrp, int ovarid, return stat; } - ichunksizes = (size_t *) emalloc((ndims + 1) * sizeof(size_t)); + ichunksizes = (size_t *) emalloc((size_t)(ndims + 1) * sizeof(size_t)); if(icontig != NC_CHUNKED) { /* if input contiguous|compact, treat as if chunked on * first dimension */ ichunksizes[0] = 1; @@ -505,7 +505,7 @@ inq_var_chunking_params(int igrp, int ivarid, int ogrp, int ovarid, } /* now can pretend chunking in both input and output */ - ochunksizes = (size_t *) emalloc((ndims + 1) * sizeof(size_t)); + ochunksizes = (size_t *) emalloc((size_t)(ndims + 1) * sizeof(size_t)); NC_CHECK(nc_inq_var_chunking(ogrp, ovarid, &ocontig, ochunksizes)); nelems = 1; @@ -632,7 +632,7 @@ copy_compound_type(int igrp, nc_type itype, int ogrp) NC_CHECK(nc_insert_compound(ogrp, otype, fname, foff, oftype)); } else { /* field is array type */ int *fdimsizes; - fdimsizes = (int *) emalloc((fndims + 1) * sizeof(int)); + fdimsizes = (int *) emalloc((size_t)(fndims + 1) * sizeof(int)); stat = nc_inq_compound_field(igrp, itype, fid, NULL, NULL, NULL, NULL, fdimsizes); NC_CHECK(nc_insert_array_compound(ogrp, otype, fname, foff, oftype, fndims, fdimsizes)); @@ -688,7 +688,7 @@ copy_groups(int iroot, int oroot) /* get total number of groups and their ids, including all descendants */ NC_CHECK(nc_inq_grps_full(iroot, &numgrps, NULL)); if(numgrps > 1) { /* there's always 1 root group */ - grpids = emalloc(numgrps * sizeof(int)); + grpids = emalloc((size_t)numgrps * sizeof(int)); NC_CHECK(nc_inq_grps_full(iroot, NULL, grpids)); /* create corresponding new groups in ogrp, except for root group */ for(i = 1; i < numgrps; i++) { @@ -741,7 +741,7 @@ copy_types(int igrp, int ogrp) NC_CHECK(nc_inq_typeids(igrp, &ntypes, NULL)); if(ntypes > 0) { - types = (nc_type *) emalloc(ntypes * sizeof(nc_type)); + types = (nc_type *) emalloc((size_t)ntypes * sizeof(nc_type)); NC_CHECK(nc_inq_typeids(igrp, &ntypes, types)); for (i = 0; i < ntypes; i++) { NC_CHECK(copy_type(igrp, types[i], ogrp)); @@ -752,7 +752,7 @@ copy_types(int igrp, int ogrp) /* Copy types from subgroups */ NC_CHECK(nc_inq_grps(igrp, &numgrps, NULL)); if(numgrps > 0) { - grpids = (int *)emalloc(sizeof(int) * numgrps); + grpids = (int *)emalloc(sizeof(int) * (size_t)numgrps); NC_CHECK(nc_inq_grps(igrp, &numgrps, grpids)); for(i = 0; i < numgrps; i++) { if (option_grpstruct || group_wanted(grpids[i], option_nlgrps, option_grpids)) { @@ -1329,11 +1329,11 @@ copy_dims(int igrp, int ogrp) * may be defined in various groups, and we are only looking at one * group at a time. */ /* Find the dimension ids in this group, don't include parents. */ - dimids = (int *) emalloc((ndims + 1) * sizeof(int)); + dimids = (int *) emalloc((size_t)(ndims + 1) * sizeof(int)); NC_CHECK(nc_inq_dimids(igrp, NULL, dimids, 0)); /* Find the number of unlimited dimensions and get their IDs */ NC_CHECK(nc_inq_unlimdims(igrp, &nunlims, NULL)); - unlimids = (int *) emalloc((nunlims + 1) * sizeof(int)); + unlimids = (int *) emalloc((size_t)(nunlims + 1) * sizeof(int)); NC_CHECK(nc_inq_unlimdims(igrp, NULL, unlimids)); #else NC_CHECK(nc_inq_unlimdim(igrp, &unlimid)); @@ -1426,7 +1426,7 @@ copy_var(int igrp, int varid, int ogrp) int o_varid; NC_CHECK(nc_inq_varndims(igrp, varid, &ndims)); - idimids = (int *) emalloc((ndims + 1) * sizeof(int)); + idimids = (int *) emalloc((size_t)(ndims + 1) * sizeof(int)); NC_CHECK(nc_inq_var(igrp, varid, name, &typeid, NULL, idimids, &natts)); o_typeid = typeid; #ifdef USE_NETCDF4 @@ -1441,7 +1441,7 @@ copy_var(int igrp, int varid, int ogrp) #endif /* USE_NETCDF4 */ /* get the corresponding dimids in the output file */ - odimids = (int *) emalloc((ndims + 1) * sizeof(int)); + odimids = (int *) emalloc((size_t)(ndims + 1) * sizeof(int)); for(i = 0; i < ndims; i++) { odimids[i] = dimmap_odimid(idimids[i]); if(odimids[i] == -1) { @@ -1550,7 +1550,7 @@ copy_schema(int igrp, int ogrp) int i; /* Copy schema from subgroups */ stat = nc_inq_grps(igrp, &numgrps, NULL); - grpids = (int *)emalloc((numgrps + 1) * sizeof(int)); + grpids = (int *)emalloc((size_t)(numgrps + 1) * sizeof(int)); NC_CHECK(nc_inq_grps(igrp, &numgrps, grpids)); for(i = 0; i < numgrps; i++) { @@ -1574,7 +1574,7 @@ inq_nvals(int igrp, int varid, long long *nvalsp) { long long nvals = 1; NC_CHECK(nc_inq_varndims(igrp, varid, &ndims)); - dimids = (int *) emalloc((ndims + 1) * sizeof(int)); + dimids = (int *) emalloc((size_t)(ndims + 1) * sizeof(int)); NC_CHECK(nc_inq_vardimid (igrp, varid, dimids)); for(dim = 0; dim < ndims; dim++) { size_t len; @@ -1673,8 +1673,8 @@ copy_var_data(int igrp, int varid, int ogrp) /* initialize variable iteration */ NC_CHECK(nc_get_iter(igrp, varid, option_copy_buffer_size, &iterp)); - start = (size_t *) emalloc((iterp->rank + 1) * sizeof(size_t)); - count = (size_t *) emalloc((iterp->rank + 1) * sizeof(size_t)); + start = (size_t *) emalloc((size_t)(iterp->rank + 1) * sizeof(size_t)); + count = (size_t *) emalloc((size_t)(iterp->rank + 1) * sizeof(size_t)); /* nc_next_iter() initializes start and count on first call, * changes start and count to iterate through whole variable on * subsequent calls. */ @@ -1757,7 +1757,7 @@ copy_data(int igrp, int ogrp) #ifdef USE_NETCDF4 /* Copy data from subgroups */ stat = nc_inq_grps(igrp, &numgrps, NULL); - grpids = (int *)emalloc((numgrps + 1) * sizeof(int)); + grpids = (int *)emalloc((size_t)(numgrps + 1) * sizeof(int)); NC_CHECK(nc_inq_grps(igrp, &numgrps, grpids)); for(i = 0; i < numgrps; i++) { @@ -1786,7 +1786,7 @@ count_dims(int ncid) { NC_CHECK(nc_inq_grps(ncid, &numgrps, NULL)); if(numgrps > 0) { int igrp; - int *grpids = emalloc(numgrps * sizeof(int)); + int *grpids = emalloc((size_t)numgrps * sizeof(int)); NC_CHECK(nc_inq_grps(ncid, &numgrps, grpids)); for(igrp = 0; igrp < numgrps; igrp++) { ndims += count_dims(grpids[igrp]); @@ -1820,7 +1820,7 @@ nc3_special_case(int ncid, int kind) { NC_CHECK( nc_inq_varndims(ncid, varid, &ndims) ); if (ndims > 0) { int dimids0; - dimids = (int *) emalloc((ndims + 1) * sizeof(int)); + dimids = (int *) emalloc((size_t)(ndims + 1) * sizeof(int)); NC_CHECK( nc_inq_vardimid(ncid, varid, dimids) ); dimids0 = dimids[0]; free(dimids); @@ -1850,9 +1850,9 @@ classify_vars( int nvars; NC_CHECK(nc_inq_nvars(ncid, &nvars)); *nf = 0; - *fvars = (int *) emalloc(nvars * sizeof(int)); + *fvars = (int *) emalloc((size_t)nvars * sizeof(int)); *nr = 0; - *rvars = (int *) emalloc(nvars * sizeof(int)); + *rvars = (int *) emalloc((size_t)nvars * sizeof(int)); if(option_nlvars > 0) { for (varindex = 0; varindex < option_nlvars; varindex++) { @@ -1940,9 +1940,9 @@ copy_record_data(int ncid, int ogrp, size_t nrec_vars, int *rec_varids) { char varname[NC_MAX_NAME]; varid = rec_varids[ivar]; NC_CHECK(nc_inq_varndims(ncid, varid, &ndims)); - dimids = (int *) emalloc((1 + ndims) * sizeof(int)); - start[ivar] = (size_t *) emalloc(ndims * sizeof(size_t)); - count[ivar] = (size_t *) emalloc(ndims * sizeof(size_t)); + dimids = (int *) emalloc((size_t)(1 + ndims) * sizeof(int)); + start[ivar] = (size_t *) emalloc((size_t)ndims * sizeof(size_t)); + count[ivar] = (size_t *) emalloc((size_t)ndims * sizeof(size_t)); NC_CHECK(nc_inq_vardimid (ncid, varid, dimids)); value_size = val_size(ncid, varid); nvals = 1; diff --git a/ncdump/ncdump.c b/ncdump/ncdump.c index abaa20e38..c86ecb824 100644 --- a/ncdump/ncdump.c +++ b/ncdump/ncdump.c @@ -4,6 +4,7 @@ Copyright 2018 University Corporation for Atmospheric Research/Unidata. See \ref copyright file for more info. */ #include "config.h" +#include #include #ifdef HAVE_GETOPT_H #include @@ -997,7 +998,7 @@ pr_att_specials( int i; pr_att_name(ncid, varp->name, NC_ATT_STORAGE); printf(" = \"chunked\" ;\n"); - chunkp = (size_t *) emalloc(sizeof(size_t) * (varp->ndims + 1) ); + chunkp = (size_t *) emalloc(sizeof(size_t) * (size_t)(varp->ndims + 1) ); NC_CHECK( nc_inq_var_chunking(ncid, varid, NULL, chunkp) ); /* print chunking, even if it is default */ pr_att_name(ncid, varp->name, NC_ATT_CHUNKING); @@ -1224,7 +1225,7 @@ pr_attx( { ncatt_t att; /* attribute */ char *attvals = NULL; - int attvalslen = 0; + size_t attvalslen = 0; NC_CHECK( nc_inq_attname(ncid, varid, ia, att.name) ); #ifdef USE_NETCDF4 @@ -1308,7 +1309,7 @@ static void pr_shape(ncvar_t* varp, ncdim_t *dims) { char *shape; - int shapelen = 0; + size_t shapelen = 0; int id; if (varp->ndims == 0) @@ -1472,7 +1473,7 @@ print_ud_type(int ncid, nc_type typeid) { printf(" "); print_name(field_name); if (field_ndims > 0) { - int *field_dim_sizes = (int *) emalloc((field_ndims + 1) * sizeof(int)); + int *field_dim_sizes = (int *) emalloc((size_t)(field_ndims + 1) * sizeof(int)); NC_CHECK( nc_inq_compound_field(ncid, typeid, f, NULL, NULL, NULL, NULL, field_dim_sizes) ); @@ -1647,7 +1648,7 @@ do_ncdump_rec(int ncid, const char *path) { int t; - typeids = emalloc((ntypes + 1) * sizeof(int)); + typeids = emalloc((size_t)(ntypes + 1) * sizeof(int)); NC_CHECK( nc_inq_typeids(ncid, &ntypes, typeids) ); indent_out(); printf("types:\n"); @@ -1667,7 +1668,7 @@ do_ncdump_rec(int ncid, const char *path) */ NC_CHECK( nc_inq(ncid, &ndims, &nvars, &ngatts, &xdimid) ); /* get dimension info */ - dims = (ncdim_t *) emalloc((ndims + 1) * sizeof(ncdim_t)); + dims = (ncdim_t *) emalloc((size_t)(ndims + 1) * sizeof(ncdim_t)); if (ndims > 0) { indent_out(); printf ("dimensions:\n"); @@ -1680,14 +1681,14 @@ do_ncdump_rec(int ncid, const char *path) /* Find the number of dimids defined in this group. */ NC_CHECK( nc_inq_ndims(ncid, &ndims_grp) ); - dimids_grp = (int *)emalloc((ndims_grp + 1) * sizeof(int)); + dimids_grp = (int *)emalloc((size_t)(ndims_grp + 1) * sizeof(int)); /* Find the dimension ids in this group. */ NC_CHECK( nc_inq_dimids(ncid, 0, dimids_grp, 0) ); /* Find the number of unlimited dimensions and get their IDs */ NC_CHECK( nc_inq_unlimdims(ncid, &nunlim, NULL) ); - unlimids = (int *)emalloc((nunlim + 1) * sizeof(int)); + unlimids = (int *)emalloc((size_t)(nunlim + 1) * sizeof(int)); NC_CHECK( nc_inq_unlimdims(ncid, &nunlim, unlimids) ); /* For each dimension defined in this group, get and print out info. */ @@ -1767,7 +1768,7 @@ do_ncdump_rec(int ncid, const char *path) for (varid = 0; varid < nvars; varid++) { NC_CHECK( nc_inq_varndims(ncid, varid, &var.ndims) ); - var.dims = (int *) emalloc((var.ndims + 1) * sizeof(int)); + var.dims = (int *) emalloc((size_t)(var.ndims + 1) * sizeof(int)); NC_CHECK( nc_inq_var(ncid, varid, var.name, &var.type, 0, var.dims, &var.natts) ); /* TODO: don't bother if type name not needed here */ @@ -1928,7 +1929,7 @@ do_ncdump_rec(int ncid, const char *path) continue; NC_CHECK( nc_inq_varndims(ncid, varid, &var.ndims) ); if(var.dims != NULL) {free(var.dims); var.dims = NULL;} - var.dims = (int *) emalloc((var.ndims + 1) * sizeof(int)); + var.dims = (int *) emalloc((size_t)(var.ndims + 1) * sizeof(int)); NC_CHECK( nc_inq_var(ncid, varid, var.name, &var.type, 0, var.dims, &var.natts) ); var.tinfo = get_typeinfo(var.type); @@ -1942,7 +1943,7 @@ do_ncdump_rec(int ncid, const char *path) free(vdims); vdims = 0; } - vdims = (size_t *) emalloc((var.ndims + 1) * SIZEOF_SIZE_T); + vdims = (size_t *) emalloc((size_t)(var.ndims + 1) * SIZEOF_SIZE_T); no_data = 0; for (id = 0; id < var.ndims; id++) { size_t len; @@ -1995,7 +1996,7 @@ do_ncdump_rec(int ncid, const char *path) NC_CHECK( nc_inq_grps(ncid, &numgrps, NULL) ); /* Allocate memory to hold the list of group ids. */ - ncids = emalloc((numgrps + 1) * sizeof(int)); + ncids = emalloc((size_t)(numgrps + 1) * sizeof(int)); /* Get the list of group ids. */ NC_CHECK( nc_inq_grps(ncid, NULL, ncids) ); @@ -2095,7 +2096,7 @@ do_ncdumpx(int ncid, const char *path) /* TODO: print names with XML-ish escapes fopr special chars */ NC_CHECK( nc_inq(ncid, &ndims, &nvars, &ngatts, &xdimid) ); /* get dimension info */ - dims = (ncdim_t *) emalloc((ndims + 1) * sizeof(ncdim_t)); + dims = (ncdim_t *) emalloc((size_t)(ndims + 1) * sizeof(ncdim_t)); for (dimid = 0; dimid < ndims; dimid++) { NC_CHECK( nc_inq_dim(ncid, dimid, dims[dimid].name, &dims[dimid].size) ); if (dimid == xdimid) @@ -2115,7 +2116,7 @@ do_ncdumpx(int ncid, const char *path) for (varid = 0; varid < nvars; varid++) { NC_CHECK( nc_inq_varndims(ncid, varid, &var.ndims) ); if(var.dims != NULL) free(var.dims); - var.dims = (int *) emalloc((var.ndims + 1) * sizeof(int)); + var.dims = (int *) emalloc((size_t)(var.ndims + 1) * sizeof(int)); NC_CHECK( nc_inq_var(ncid, varid, var.name, &var.type, 0, var.dims, &var.natts) ); printf (" #include #include #include @@ -193,10 +194,10 @@ nc_get_iter(int ncid, NC_CHECK(nc_inq_varndims(ncid, varid, &ndims)); - dimids = (int *) emalloc((ndims + 1) * sizeof(int)); + dimids = (int *) emalloc((size_t)(ndims + 1) * sizeof(int)); - iterp->dimsizes = (size_t *) emalloc((ndims + 1) * sizeof(size_t)); - iterp->chunksizes = (size_t *) emalloc((ndims + 1) * sizeof(size_t)); + iterp->dimsizes = (size_t *) emalloc((size_t)(ndims + 1) * sizeof(size_t)); + iterp->chunksizes = (size_t *) emalloc((size_t)(ndims + 1) * sizeof(size_t)); NC_CHECK(nc_inq_vardimid (ncid, varid, dimids)); for(dim = 0; dim < ndims; dim++) { diff --git a/ncdump/ncvalidator.c b/ncdump/ncvalidator.c index f3661269c..67e143f51 100644 --- a/ncdump/ncvalidator.c +++ b/ncdump/ncvalidator.c @@ -1622,9 +1622,9 @@ val_new_NC_var(char *name, int ndims) if (varp == NULL) return NULL; if (ndims > 0) { - varp->shape = (long long*)calloc(ndims, sizeof(long long)); - varp->dsizes = (long long*)calloc(ndims, sizeof(long long)); - varp->dimids = (int *) calloc(ndims, sizeof(int)); + varp->shape = (long long*)calloc((size_t)ndims, sizeof(long long)); + varp->dsizes = (long long*)calloc((size_t)ndims, sizeof(long long)); + varp->dimids = (int *) calloc((size_t)ndims, sizeof(int)); } varp->name = name; diff --git a/ncdump/tst_create_files.c b/ncdump/tst_create_files.c index e4cee78e4..f0b2b7109 100644 --- a/ncdump/tst_create_files.c +++ b/ncdump/tst_create_files.c @@ -11,6 +11,7 @@ #include #include "err_macros.h" #include +#include #include #define FILE_NAME_1 "tst_solar_1.nc" @@ -188,7 +189,7 @@ main(int argc, char **argv) #define ATT_NAME3 "for_testing_unsigned_short_attribute_bug" { int ncid; - int i, j; + size_t i, j; nc_type typeid; nc_vlen_t data[DIM_LEN]; int *phoney; diff --git a/ncdump/tst_fillbug.c b/ncdump/tst_fillbug.c index 4f9aafd15..793aa98b9 100644 --- a/ncdump/tst_fillbug.c +++ b/ncdump/tst_fillbug.c @@ -191,7 +191,7 @@ count_udtypes(int ncid) { /* Get number of types in this group */ if( nc_inq_typeids(ncid, &ntypes, NULL) ) ERR; if( nc_inq_grps(ncid, &numgrps, NULL) ) ERR; - ncids = (int *) malloc(sizeof(int) * numgrps); + ncids = (int *) malloc(sizeof(int) * (size_t)numgrps); if( nc_inq_grps(ncid, NULL, ncids) ) ERR; /* Add number of types in each subgroup, if any */ for (i=0; i < numgrps; i++) { diff --git a/ncdump/tst_vlen_data.c b/ncdump/tst_vlen_data.c index f11b3932b..5e17bfdf8 100644 --- a/ncdump/tst_vlen_data.c +++ b/ncdump/tst_vlen_data.c @@ -88,7 +88,7 @@ main(int argc, char **argv) if(array == NULL) ERR; for (i = 0; i < NROWS; i++) { int ncolumns = NROWS - i; - array[i] = (float *) malloc(ncolumns * sizeof(float)); + array[i] = (float *) malloc((size_t)ncolumns * sizeof(float)); if(array[i] == NULL) ERR; for (j = 0; j < ncolumns; j++) { array[i][j] = 10.0f * (float)(i + 1) + (float)j; diff --git a/ncdump/utils.c b/ncdump/utils.c index 263ae9f0a..c32d49b95 100644 --- a/ncdump/utils.c +++ b/ncdump/utils.c @@ -350,10 +350,10 @@ isrecvar(int ncid, int varid) int nunlimdims; int *recdimids; int dim, recdim; - dimids = (int *) emalloc((ndims + 1) * sizeof(int)); + dimids = (int *) emalloc((size_t)(ndims + 1) * sizeof(int)); NC_CHECK( nc_inq_vardimid(ncid, varid, dimids) ); NC_CHECK( nc_inq_unlimdims(ncid, &nunlimdims, NULL) ); - recdimids = (int *) emalloc((nunlimdims + 1) * sizeof(int)); + recdimids = (int *) emalloc((size_t)(nunlimdims + 1) * sizeof(int)); NC_CHECK( nc_inq_unlimdims(ncid, NULL, recdimids) ); for (dim = 0; dim < ndims && is_recvar == 0; dim++) { for(recdim = 0; recdim < nunlimdims; recdim++) { @@ -504,7 +504,7 @@ nc_inq_grpname_count(int ncid, int igrp, char **lgrps, idnode_t *grpids) { NC_CHECK( nc_inq_grps(ncid, &numgrps, NULL) ); if(numgrps > 0) { /* Allocate memory to hold the list of group ids. */ - ncids = emalloc(numgrps * sizeof(int)); + ncids = emalloc((size_t)numgrps * sizeof(int)); /* Get the list of group ids. */ NC_CHECK( nc_inq_grps(ncid, NULL, ncids) ); /* Call this function recursively for each group. */ @@ -649,7 +649,7 @@ nc_inq_varname_count(int ncid, char *varname) { NC_CHECK( nc_inq_grps(ncid, &numgrps, NULL) ); /* Allocate memory to hold the list of group ids. */ - ncids = emalloc((numgrps + 1) * sizeof(int)); + ncids = emalloc((size_t)(numgrps + 1) * sizeof(int)); /* Get the list of group ids. */ NC_CHECK( nc_inq_grps(ncid, NULL, ncids) ); @@ -691,7 +691,7 @@ make_lvars(char *optarg, int *nlvarsp, char ***lvarsp) if (*cp == ',') nvars++; *nlvarsp = nvars; - *lvarsp = (char **) emalloc(nvars * sizeof(char*)); + *lvarsp = (char **) emalloc((size_t)nvars * sizeof(char*)); cpp = *lvarsp; /* copy variable names into list */ for (cp = strtok(optarg, ","); cp != NULL; cp = strtok((char *) NULL, ",")) { @@ -712,7 +712,7 @@ make_lgrps(char *optarg, int *nlgrps, char ***lgrpsp, idnode_t **grpidsp) if (*cp == ',') ngrps++; *nlgrps = ngrps; - *lgrpsp = (char **) emalloc(ngrps * sizeof(char*)); + *lgrpsp = (char **) emalloc((size_t)ngrps * sizeof(char*)); cpp = *lgrpsp; /* copy group names into list */ for (cp = strtok(optarg, ","); cp != NULL; cp = strtok((char *) NULL, ",")) { @@ -852,7 +852,7 @@ nc_next_giter(ncgiter_t *iterp, int *grpidp) { *grpidp = gs_pop(iterp); NC_CHECK(nc_inq_grps2(*grpidp, &numgrps, NULL)); if(numgrps > 0) { - grpids = (int *)emalloc(sizeof(int) * numgrps); + grpids = (int *)emalloc(sizeof(int) * (size_t)numgrps); NC_CHECK(nc_inq_grps2(*grpidp, &numgrps, grpids)); for(i = numgrps - 1; i >= 0; i--) { /* push ids on stack in reverse order */ gs_push(iterp, grpids[i]); diff --git a/ncdump/vardata.c b/ncdump/vardata.c index 968d0dd10..313b7977f 100644 --- a/ncdump/vardata.c +++ b/ncdump/vardata.c @@ -451,8 +451,8 @@ print_rows( marks_pending++; /* matching "}"s to emit after last "row" */ } if(rank - level > 1) { /* this level is just d0 next levels */ - size_t *local_cor = emalloc((rank + 1) * sizeof(size_t)); - size_t *local_edg = emalloc((rank + 1) * sizeof(size_t)); + size_t *local_cor = emalloc((size_t)(rank + 1) * sizeof(size_t)); + size_t *local_edg = emalloc((size_t)(rank + 1) * sizeof(size_t)); for(i = 0; i < rank; i++) { local_cor[i] = cor[i]; local_edg[i] = edg[i]; @@ -546,9 +546,9 @@ vardata( int level = 0; int marks_pending = 0; - cor = (size_t *) emalloc((1 + vrank) * sizeof(size_t)); - edg = (size_t *) emalloc((1 + vrank) * sizeof(size_t)); - add = (size_t *) emalloc((1 + vrank) * sizeof(size_t)); + cor = (size_t *) emalloc((size_t)(1 + vrank) * sizeof(size_t)); + edg = (size_t *) emalloc((size_t)(1 + vrank) * sizeof(size_t)); + add = (size_t *) emalloc((size_t)(1 + vrank) * sizeof(size_t)); nels = 1; if(vrank == 0) { /*scalar*/ @@ -733,9 +733,9 @@ vardatax( size_t nrows; int vrank = vp->ndims; - cor = (size_t *) emalloc((vrank + 1) * sizeof(size_t)); - edg = (size_t *) emalloc((vrank + 1) * sizeof(size_t)); - add = (size_t *) emalloc((vrank + 1) * sizeof(size_t)); + cor = (size_t *) emalloc((size_t)(vrank + 1) * sizeof(size_t)); + edg = (size_t *) emalloc((size_t)(vrank + 1) * sizeof(size_t)); + add = (size_t *) emalloc((size_t)(vrank + 1) * sizeof(size_t)); nels = 1; for (id = 0; id < vrank; id++) { diff --git a/ncgen/bindata.c b/ncgen/bindata.c index 49ead4dfc..1482176d0 100644 --- a/ncgen/bindata.c +++ b/ncgen/bindata.c @@ -5,6 +5,7 @@ #include "includes.h" #include "nclog.h" +#include #ifdef ENABLE_BINARY @@ -81,7 +82,7 @@ bin_constant(Generator* generator, Symbol* sym, NCConstant* con, Bytebuffer* buf } break; case NC_NIL: case NC_STRING: { - int len = (size_t)con->value.stringv.len; + size_t len = (size_t)con->value.stringv.len; if(len == 0 && con->value.stringv.stringv == NULL) { char* nil = NULL; bbAppendn(buf,(void*)&nil,sizeof(nil)); @@ -351,8 +352,8 @@ bin_generate_data_r(NCConstant* instance, Symbol* tsym, Datalist* fillvalue, Byt NCConstant* tmp = nullconst(); tmp->nctype = NC_STRING; convert1(instance,tmp); - p = emalloc(tmp->value.stringv.len+1); - memcpy(p,tmp->value.stringv.stringv,tmp->value.stringv.len); + p = emalloc((size_t)tmp->value.stringv.len+1); + memcpy(p,tmp->value.stringv.stringv, (size_t)tmp->value.stringv.len); p[tmp->value.stringv.len] = '\0'; bbAppendn(databuf,&p,sizeof(char*)); reclaimconstant(tmp); diff --git a/ncgen/cdata.c b/ncgen/cdata.c index b9bc6d78e..0b9c2296f 100644 --- a/ncgen/cdata.c +++ b/ncgen/cdata.c @@ -4,6 +4,7 @@ *********************************************************************/ #include "includes.h" +#include #ifdef ENABLE_C @@ -98,8 +99,7 @@ c_constant(Generator* generator, Symbol* sym, NCConstant* con, Bytebuffer* buf,. } break; case NC_OPAQUE: { char* p; - int bslen; - bslen=(4*con->value.opaquev.len); + size_t bslen = (size_t)(4*con->value.opaquev.len); special = poolalloc(bslen+2+1); strcpy(special,"\""); p = con->value.opaquev.stringv; diff --git a/ncgen/cvt.c b/ncgen/cvt.c index 8224ea6ad..bc3779317 100644 --- a/ncgen/cvt.c +++ b/ncgen/cvt.c @@ -450,10 +450,10 @@ case CASE(NC_STRING,NC_CHAR): case CASE(NC_STRING,NC_STRING): /* Need to watch out for embedded NULs */ tmp.stringv.len = src->value.stringv.len; - tmp.stringv.stringv = (char*)ecalloc(src->value.stringv.len+1); + tmp.stringv.stringv = (char*)ecalloc((size_t)src->value.stringv.len+1); memcpy((void*)tmp.stringv.stringv, (void*)src->value.stringv.stringv, - tmp.stringv.len); + (size_t)tmp.stringv.len); tmp.stringv.stringv[tmp.stringv.len] = '\0'; break; @@ -559,8 +559,8 @@ case CASE(NC_OPAQUE,NC_DOUBLE): tmp.doublev = *(double*)bytes; break; case CASE(NC_OPAQUE,NC_OPAQUE): - tmp.opaquev.stringv = (char*)ecalloc(src->value.opaquev.len+1); - memcpy(tmp.opaquev.stringv,src->value.opaquev.stringv,src->value.opaquev.len); + tmp.opaquev.stringv = (char*)ecalloc((size_t)src->value.opaquev.len+1); + memcpy(tmp.opaquev.stringv,src->value.opaquev.stringv, (size_t)src->value.opaquev.len); tmp.opaquev.len = src->value.opaquev.len; tmp.opaquev.stringv[tmp.opaquev.len] = '\0'; break; diff --git a/ncgen/data.c b/ncgen/data.c index b48f69ff5..fdd8db2ea 100644 --- a/ncgen/data.c +++ b/ncgen/data.c @@ -9,6 +9,7 @@ #include "ncoffsets.h" #include "netcdf_aux.h" #include "dump.h" +#include #undef VERIFY #ifndef __MINGW32__ @@ -147,17 +148,17 @@ cloneconstant(NCConstant* con) if(newcon->value.stringv.len == 0) s = NULL; else { - s = (char*)ecalloc(newcon->value.stringv.len+1); + s = (char*)ecalloc((size_t)newcon->value.stringv.len+1); if(newcon->value.stringv.len > 0) - memcpy(s,newcon->value.stringv.stringv,newcon->value.stringv.len); + memcpy(s,newcon->value.stringv.stringv, (size_t)newcon->value.stringv.len); s[newcon->value.stringv.len] = '\0'; } newcon->value.stringv.stringv = s; break; case NC_OPAQUE: - s = (char*)ecalloc(newcon->value.opaquev.len+1); + s = (char*)ecalloc((size_t)newcon->value.opaquev.len+1); if(newcon->value.opaquev.len > 0) - memcpy(s,newcon->value.opaquev.stringv,newcon->value.opaquev.len); + memcpy(s,newcon->value.opaquev.stringv, (size_t)newcon->value.opaquev.len); s[newcon->value.opaquev.len] = '\0'; newcon->value.opaquev.stringv = s; break; @@ -603,8 +604,8 @@ builddatalist(int initial) initial++; /* for header*/ ci = (Datalist*)ecalloc(sizeof(Datalist)); if(ci == NULL) semerror(0,"out of memory\n"); - ci->data = (NCConstant**)ecalloc(sizeof(NCConstant*)*initial); - ci->alloc = initial; + ci->data = (NCConstant**)ecalloc(sizeof(NCConstant*) * (size_t)initial); + ci->alloc = (size_t)initial; ci->length = 0; return ci; } @@ -645,12 +646,12 @@ dlinsert(Datalist* dl, size_t pos, Datalist* insertion) int len1 = datalistlen(dl); int len2 = datalistlen(insertion); int delta = len1 - pos; - dlsetalloc(dl,len2+len1+1); + dlsetalloc(dl, len2+len1+1); /* move contents of dl up to make room for insertion */ if(delta > 0) - memmove(&dl->data[pos+len2],&dl->data[pos],delta*sizeof(NCConstant*)); + memmove(&dl->data[pos+len2],&dl->data[pos], (size_t)delta*sizeof(NCConstant*)); dl->length += len2; for(i=0;idata[i]; diff --git a/ncgen/escapes.c b/ncgen/escapes.c index 94efd0f2f..2b7ff8642 100644 --- a/ncgen/escapes.c +++ b/ncgen/escapes.c @@ -6,6 +6,7 @@ #include "includes.h" #include "ncutf8.h" +#include #define HEXCHARS "0123456789abcdefABCDEF" #define OCTCHARS "01234567" @@ -155,7 +156,7 @@ static struct { {'/', "_SLASH_"}, }; static int idtlen; -static int hexlen; +static size_t hexlen; static Bytebuffer* newname; static void @@ -508,7 +509,7 @@ fqnescape(const char* s) const char* p; char* q; int c; - int l = strlen(s); + size_t l = strlen(s); /* 1234567 @@ -617,8 +618,8 @@ unescape( char* p; int b; - s = (char*)emalloc(yyleng+1); - memcpy(s,yytext,yyleng); + s = (char*)emalloc((size_t)yyleng+1); + memcpy(s,yytext, (size_t)yyleng); s[yyleng] = '\0'; /* translate "\" escapes, e.g. "\t" to tab character */ diff --git a/ncgen/genchar.c b/ncgen/genchar.c index 3f5c381a2..25ff0622f 100644 --- a/ncgen/genchar.c +++ b/ncgen/genchar.c @@ -245,8 +245,8 @@ makeconst(int lineno, int len, char* str) con->filled = 0; con->value.stringv.len = len; /* We cannot use strdup because str might have embedded nuls */ - con->value.stringv.stringv = (char*)ecalloc(len+1); - memcpy((void*)con->value.stringv.stringv,(void*)str,len); + con->value.stringv.stringv = (char*)ecalloc((size_t)len+1); + memcpy((void*)con->value.stringv.stringv,(void*)str, (size_t)len); con->value.stringv.stringv[len] = '\0'; return con; } diff --git a/ncgen/generate.c b/ncgen/generate.c index c08f488be..339993233 100644 --- a/ncgen/generate.c +++ b/ncgen/generate.c @@ -6,6 +6,7 @@ #include "includes.h" #include "ncoffsets.h" #include "netcdf_aux.h" +#include /**************************************************/ /* Code for generating data lists*/ @@ -251,22 +252,22 @@ generate_fieldarray(Symbol* basetype, NCConstant* con, Dimset* dimset, static void normalizeopaquelength(NCConstant* prim, unsigned long nbytes) { - int nnibs = 2*nbytes; + size_t nnibs = 2*nbytes; ASSERT(prim->nctype==NC_OPAQUE); if(prim->value.opaquev.len == nnibs) { /* do nothing*/ } else if(prim->value.opaquev.len > nnibs) { /* truncate*/ prim->value.opaquev.stringv[nnibs] = '\0'; - prim->value.opaquev.len = nnibs; + prim->value.opaquev.len = (int)nnibs; } else {/* prim->value.opaquev.len < nnibs => expand*/ char* s; s = (char*)ecalloc(nnibs+1); memset(s,'0',nnibs); /* Fill with '0' characters */ - memcpy(s,prim->value.opaquev.stringv,prim->value.opaquev.len); + memcpy(s,prim->value.opaquev.stringv, (size_t)prim->value.opaquev.len); s[nnibs] = '\0'; efree(prim->value.opaquev.stringv); prim->value.opaquev.stringv=s; - prim->value.opaquev.len = nnibs; + prim->value.opaquev.len = (int)nnibs; } } diff --git a/ncgen/ncgeny.c b/ncgen/ncgeny.c index 105a221b4..33030b14b 100644 --- a/ncgen/ncgeny.c +++ b/ncgen/ncgeny.c @@ -3318,13 +3318,12 @@ makeconstdata(nc_type nctype) #ifdef USE_NETCDF4 case NC_OPAQUE: { char* s; - int len; - len = bbLength(lextext); + size_t len = bbLength(lextext); s = (char*)ecalloc(len+1); strncpy(s,bbContents(lextext),len); s[len] = '\0'; con->value.opaquev.stringv = s; - con->value.opaquev.len = len; + con->value.opaquev.len = (int)len; } break; case NC_NIL: diff --git a/ncgen/util.c b/ncgen/util.c index 108fff044..85794f8ec 100644 --- a/ncgen/util.c +++ b/ncgen/util.c @@ -5,6 +5,7 @@ *********************************************************************/ #include "includes.h" +#include /* Track primitive symbol instances (initialized in ncgen.y) */ Symbol* primsymbols[PRIMNO]; @@ -12,7 +13,7 @@ Symbol* primsymbols[PRIMNO]; char* append(const char* s1, const char* s2) { - int len = (s1?strlen(s1):0)+(s2?strlen(s2):0); + size_t len = (s1?strlen(s1):0)+(s2?strlen(s2):0); char* result = (char*)ecalloc(len+1); result[0] = '\0'; if(s1) strcat(result,s1); @@ -369,7 +370,7 @@ collectpath(Symbol* grp, List* grpstack) char* prefixtostring(List* prefix, char* separator) { - int slen=0; + size_t slen=0; int plen; int i; char* result; @@ -439,7 +440,7 @@ prefixdup(List* prefix) int i; if(prefix == NULL) return listnew(); dupseq = listnew(); - listsetalloc(dupseq,listlength(prefix)); + listsetalloc(dupseq, (size_t)listlength(prefix)); for(i=0;i #include #include #include @@ -1756,7 +1757,7 @@ grow_iarray( } if (! pow2(nar)) /* return unless nar is a power of two */ return; - *arpp = (int *) erealloc(*arpp, 2 * nar * sizeof(int)); + *arpp = (int *) erealloc(*arpp, 2 * (size_t)nar * sizeof(int)); } @@ -1782,7 +1783,7 @@ grow_varray( } if (! pow2(nar)) /* return unless nar is a power of two */ return; - *arpp = (struct vars *) erealloc(*arpp, 2 * nar * sizeof(struct vars)); + *arpp = (struct vars *) erealloc(*arpp, 2 * (size_t)nar * sizeof(struct vars)); } @@ -1808,7 +1809,7 @@ grow_darray( } if (! pow2(nar)) /* return unless nar is a power of two */ return; - *arpp = (struct dims *) erealloc(*arpp, 2 * nar * sizeof(struct dims)); + *arpp = (struct dims *) erealloc(*arpp, 2 * (size_t)nar * sizeof(struct dims)); } @@ -1834,7 +1835,7 @@ grow_aarray( } if (! pow2(nar)) /* return unless nar is a power of two */ return; - *arpp = (struct atts *) erealloc(*arpp, 2 * nar * sizeof(struct atts)); + *arpp = (struct atts *) erealloc(*arpp, 2 * (size_t)nar * sizeof(struct atts)); } @@ -1899,9 +1900,9 @@ decodify ( /* {'_', "_UNDERSCORE_"} */ }; static int idtlen; - static int hexlen; + static size_t hexlen; int nctable = (sizeof(ctable))/(sizeof(ctable[0])); - int newlen; + size_t newlen; idtlen = strlen("DIGIT_n_"); /* initial digit template */ hexlen = 1+strlen("_XHH"); /* template for hex of non-ASCII bytes */ diff --git a/nctest/add.c b/nctest/add.c index 5a6ee58d2..ca32ba1fa 100644 --- a/nctest/add.c +++ b/nctest/add.c @@ -60,7 +60,7 @@ add_var (test, ivar) /* add the variable ivar to the netcdf test */ (void) strcpy(test->vars[test->nvars].name, ivar->name); test->vars[test->nvars].type = ivar->type; test->vars[test->nvars].ndims = ivar->ndims; - test->vars[test->nvars].dims = (int *) emalloc(sizeof(int)*ivar->ndims); + test->vars[test->nvars].dims = (int *) emalloc(sizeof(int)*(size_t)ivar->ndims); for (i = 0; i < ivar->ndims; i++) test->vars[test->nvars].dims[i] = ivar->dims[i]; test->vars[test->nvars].natts = 0; diff --git a/nctest/atttests.c b/nctest/atttests.c index f9d263ffe..10e892a67 100644 --- a/nctest/atttests.c +++ b/nctest/atttests.c @@ -125,7 +125,7 @@ test_ncattput(path) ncclose(cdfid); return ++nerrs; } /* allocate space to hold the attribute value to be retrieved */ - tmp.val = emalloc(atts[ia].len * nctypelen(atts[ia].type)); + tmp.val = emalloc((size_t)(atts[ia].len * nctypelen(atts[ia].type))); if (ncattget(cdfid, NC_GLOBAL, atts[ia].name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); return ++nerrs; @@ -138,7 +138,7 @@ test_ncattput(path) free (tmp.val); } /* add a variable, then variable attributes of every type */ - ww.dims = (int *) emalloc(sizeof(int) * ww.ndims); + ww.dims = (int *) emalloc(sizeof(int) * (size_t)ww.ndims); for (id = 0; id < ww.ndims; id++) ww.dims[id] = id; if ((ww_id = ncvardef(cdfid, @@ -169,7 +169,7 @@ test_ncattput(path) ncclose(cdfid); return ++nerrs; } /* allocate space to hold the attribute value to be retrieved */ - tmp.val = emalloc(atts[ia].len * nctypelen(atts[ia].type)); + tmp.val = emalloc((size_t)(atts[ia].len * nctypelen(atts[ia].type))); if (ncattget(cdfid, ww_id, atts[ia].name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); return ++nerrs; @@ -213,7 +213,7 @@ test_ncattput(path) ncclose(cdfid); return ++nerrs; } /* allocate space to hold the attribute value to be retrieved */ - tmp.val = emalloc(atts[ia].len * nctypelen(atts[ia].type)); + tmp.val = emalloc((size_t)(atts[ia].len * nctypelen(atts[ia].type))); if (ncattget(cdfid, ww_id, atts[ia-1].name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); return ++nerrs; @@ -294,7 +294,7 @@ test_ncattput(path) ncclose(cdfid); return ++nerrs; } /* allocate space to hold the attribute value to be retrieved */ - tmp.val = emalloc(atts[ia].len * nctypelen(atts[ia].type)); + tmp.val = emalloc((size_t)(atts[ia].len * nctypelen(atts[ia].type))); if (ncattget(cdfid, ww_id, atts[ia+1].name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed in data mode", pname); @@ -386,7 +386,7 @@ test_ncattinq(path) ncclose(cdfid); return ++nerrs; } /* in define mode, add a variable */ - vv.dims = (int *) emalloc(sizeof(int) * vv.ndims); + vv.dims = (int *) emalloc(sizeof(int) * (size_t)vv.ndims); for (id = 0; id < vv.ndims; id++) vv.dims[id] = id; /* assumes vv.ndims <= test.ndims */ if ((vv_id = ncvardef(cdfid, vv.name, vv.type, vv.ndims, vv.dims)) @@ -484,7 +484,7 @@ test_ncattget(path) ncclose(cdfid); return ++nerrs; } /* add a variable */ - uu.dims = (int *) emalloc(sizeof(int) * uu.ndims); + uu.dims = (int *) emalloc(sizeof(int) * (size_t)uu.ndims); for (id = 0; id < uu.ndims; id++) uu.dims[id] = id; if ((uu_id = ncvardef(cdfid, @@ -520,7 +520,7 @@ test_ncattget(path) ncclose(cdfid); return ++nerrs; } /* allocate space to hold the attribute value to be retrieved */ - tmp.val = emalloc(tmp.len * nctypelen(tmp.type)); + tmp.val = emalloc((size_t)(tmp.len * nctypelen(tmp.type))); if (ncattget(cdfid, test.atts[ia].var, test.atts[ia].name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed in define mode", @@ -565,7 +565,7 @@ test_ncattget(path) return ++nerrs; } /* allocate space to hold the attribute value to be retrieved */ - tmp.val = emalloc(tmp.len * nctypelen(tmp.type)); + tmp.val = emalloc((size_t)(tmp.len * nctypelen(tmp.type))); if (ncattget(cdfid, test.atts[ia].var, test.atts[ia].name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed in data mode", @@ -667,7 +667,7 @@ test_ncattcopy(path1, path2) ncclose(cdfid); return ++nerrs; } add_att(&test, NC_GLOBAL, &att); /* keep in-memory netcdf consistent */ - tt.dims = (int *) emalloc(sizeof(int) * tt.ndims); + tt.dims = (int *) emalloc(sizeof(int) * (size_t)tt.ndims); for (id=0; id < tt.ndims; id++) tt.dims[0] = id; if ((tt_id=ncvardef(cdfid, tt.name, tt.type, tt.ndims, tt.dims)) == -1) { @@ -681,7 +681,7 @@ test_ncattcopy(path1, path2) } add_att(&test, tt_id, &att); /* keep in-memory netcdf consistent */ - tu.dims = (int *) emalloc(sizeof(int) * tu.ndims); + tu.dims = (int *) emalloc(sizeof(int) * (size_t)tu.ndims); for (id = 0; id < tu.ndims; id++) tu.dims[id] = id; if ((tu_id=ncvardef(cdfid, tu.name, tu.type, tu.ndims, tu.dims)) == -1) { @@ -732,7 +732,7 @@ test_ncattcopy(path1, path2) ncclose(cdfid); ncclose(cdfid2); return ++nerrs; } /* allocate space to hold the attribute value to be retrieved */ - tmp.val = emalloc(att.len * nctypelen(att.type)); + tmp.val = emalloc((size_t)(att.len * nctypelen(att.type))); if (ncattget(cdfid2, NC_GLOBAL, att.name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); ncclose(cdfid2); return ++nerrs; @@ -758,7 +758,7 @@ test_ncattcopy(path1, path2) ncclose(cdfid); ncclose(cdfid2); return ++nerrs; } /* allocate space to hold the attribute value to be retrieved */ - tmp.val = emalloc(att.len * nctypelen(att.type)); + tmp.val = emalloc((size_t)(att.len * nctypelen(att.type))); if (ncattget(cdfid2, tu2_id, att.name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); ncclose(cdfid2); return ++nerrs; @@ -801,7 +801,7 @@ test_ncattcopy(path1, path2) ncclose(cdfid); ncclose(cdfid2); return ++nerrs; } /* allocate space to hold the attribute value to be retrieved */ - tmp.val = emalloc(att2.len * nctypelen(att2.type)); + tmp.val = emalloc((size_t)(att2.len * nctypelen(att2.type))); if (ncattget(cdfid2, tu2_id, att2.name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); ncclose(cdfid2); return ++nerrs; @@ -830,7 +830,7 @@ test_ncattcopy(path1, path2) ncclose(cdfid); ncclose(cdfid2); return ++nerrs; } /* allocate space to hold the attribute value to be retrieved */ - tmp.val = emalloc(att2.len * nctypelen(att2.type)); + tmp.val = emalloc((size_t)(att2.len * nctypelen(att2.type))); if (ncattget(cdfid, tu_id, att2.name, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); ncclose(cdfid2); return ++nerrs; @@ -1149,7 +1149,7 @@ test_ncattrename(path) ncclose(cdfid); return ++nerrs; } /* allocate space to hold the attribute value to be retrieved */ - tmp.val = emalloc(atty.len * nctypelen(atty.type)); + tmp.val = emalloc((size_t)(atty.len * nctypelen(atty.type))); if (ncattget(cdfid, NC_GLOBAL, newname, tmp.val) == -1) { error("%s: ncattget of variable attribute failed", pname); ncclose(cdfid); return ++nerrs; @@ -1273,7 +1273,7 @@ test_ncattdel(path) ncclose(cdfid); return ++nerrs; } add_att(&test, NC_GLOBAL, &yaa); /* keep in-memory netcdf in sync */ - yav.dims = (int *) emalloc(sizeof(int) * yav.ndims); + yav.dims = (int *) emalloc(sizeof(int) * (size_t)yav.ndims); for (id = 0; id < yav.ndims; id++) yav.dims[id] = id; if ((yav_id=ncvardef(cdfid, yav.name, yav.type, yav.ndims, yav.dims)) diff --git a/nctest/cdftests.c b/nctest/cdftests.c index 5f3a637ce..4da21f1d3 100644 --- a/nctest/cdftests.c +++ b/nctest/cdftests.c @@ -275,7 +275,7 @@ test_ncredef(path) add_dim(&test, &ii); /* keep in-memory netcdf in sync */ /* dimension added OK, add a variable */ - aa.dims = (int *)emalloc(sizeof(int) * aa.ndims); + aa.dims = (int *)emalloc(sizeof(int) * (size_t)aa.ndims); aa.dims[0] = ii_dim; if ((aa_id = ncvardef(ncid, aa.name, aa.type, aa.ndims, aa.dims)) == -1) { @@ -367,7 +367,7 @@ test_ncendef(path) add_dim(&test, &kk); /* keep in-memory netcdf in sync */ /* dimensions added OK, add a variable */ - bb.dims = (int *) emalloc(sizeof(int) * bb.ndims); + bb.dims = (int *) emalloc(sizeof(int) * (size_t)bb.ndims); bb.dims[0] = kk_dim; bb.dims[1] = jj_dim; if ((bb_id = ncvardef(ncid, bb.name, bb.type, @@ -562,7 +562,7 @@ test_ncinquire(path) /* add some record variables */ for (iv = 0; iv < nv; iv++) { - cc[iv].dims = (int *) emalloc(sizeof(int) * cc[iv].ndims); + cc[iv].dims = (int *) emalloc(sizeof(int) * (size_t)cc[iv].ndims); cc[iv].dims[0] = rec_dim; /* first dimension unlimited */ for (id = 1; id < cc[iv].ndims; id++) cc[iv].dims[id] = dimids[id]; @@ -676,7 +676,7 @@ test_ncsync(path) } add_dim(&test, &ll); - dd.dims = (int *) emalloc(sizeof(int) * dd.ndims); + dd.dims = (int *) emalloc(sizeof(int) * (size_t)dd.ndims); dd.dims[0] = ll_dim; if ((dd_id=ncvardef(ncid0, dd.name, dd.type, dd.ndims, dd.dims)) == -1) { error("%s: ncvardef failed", pname); diff --git a/nctest/rec.c b/nctest/rec.c index a56c6aafd..2f3d4f640 100644 --- a/nctest/rec.c +++ b/nctest/rec.c @@ -359,8 +359,8 @@ test_ncrecput(path) /* get a block of data of the right type for each record variable */ for (iv = 0; iv < nrvars; iv++) { - datap[iv] = emalloc(rvarsizes[iv]); - datar[iv] = emalloc(rvarsizes[iv]); /* for comparison values */ + datap[iv] = emalloc((size_t)rvarsizes[iv]); + datar[iv] = emalloc((size_t)rvarsizes[iv]); /* for comparison values */ if (ncvarinq(ncid, rvarids[iv], 0, &vartype[iv], 0, 0, 0) == -1) { error("%s: ncvarinq failed", pname); ncclose(ncid); @@ -517,8 +517,8 @@ test_ncrecget(path) /* get a block of data of the right type for each record variable */ for (iv = 0; iv < nrvars; iv++) { - datap[iv] = emalloc(rvarsizes[iv]); - datar[iv] = emalloc(rvarsizes[iv]); /* for comparison values */ + datap[iv] = emalloc((size_t)rvarsizes[iv]); + datar[iv] = emalloc((size_t)rvarsizes[iv]); /* for comparison values */ if (ncvarinq(ncid, rvarids[iv], 0, &vartype[iv], 0, 0, 0) == -1) { error("%s: ncvarinq failed", pname); ncclose(ncid); diff --git a/nctest/slabs.c b/nctest/slabs.c index 48b4d1de7..b1f1498f0 100644 --- a/nctest/slabs.c +++ b/nctest/slabs.c @@ -157,7 +157,7 @@ test_slabs(cdfid) /* define a multi-dimensional variable of each type */ for (iv = 0; iv < NVARS; iv++) { - va[iv].dims = (int *) emalloc(sizeof(int) * va[iv].ndims); + va[iv].dims = (int *) emalloc(sizeof(int) * (size_t)va[iv].ndims); for (idim = 0; idim < va[iv].ndims; idim++) va[iv].dims[idim] = dimids[idim]; varid[iv] = ncvardef(cdfid, va[iv].name, va[iv].type, va[iv].ndims, @@ -177,7 +177,7 @@ test_slabs(cdfid) for (iv = 0; iv < NVARS; iv++) { /* test each type of variable */ - v = emalloc(WSIZE*XSIZE*YSIZE*ZSIZE * nctypelen(va[iv].type)); + v = emalloc(WSIZE*XSIZE*YSIZE*ZSIZE * (size_t)nctypelen(va[iv].type)); /* fill it with values using a function of dimension indices */ ii = 0; diff --git a/nctest/vardef.c b/nctest/vardef.c index b02df5dfd..1fa8e04fa 100644 --- a/nctest/vardef.c +++ b/nctest/vardef.c @@ -166,7 +166,7 @@ test_ncvardef(path) /* in define mode, add variables of each type with various shapes */ for (iv = 0; iv < nv; iv++) { /* set shape to use subset of dimensions previously defined */ - va[iv].dims = (int *) emalloc(sizeof(int) * va[iv].ndims); + va[iv].dims = (int *) emalloc(sizeof(int) * (size_t)va[iv].ndims); for (id = 0; id < va[iv].ndims; id++) va[iv].dims[id] = di_id[id]; if ((va_id[iv] = ncvardef(cdfid, va[iv].name, va[iv].type, diff --git a/nctest/varget.c b/nctest/varget.c index 1f1ab41ad..2239dcdbb 100644 --- a/nctest/varget.c +++ b/nctest/varget.c @@ -62,7 +62,7 @@ test_ncvarget(path) hc.edg[id] = 1; } /* get space for vals */ - hc.vals = emalloc(nctypelen(test.vars[iv].type) + 8); + hc.vals = emalloc((size_t)nctypelen(test.vars[iv].type) + 8); id = test.vars[iv].ndims - 1; tmp = hc.cor[id]; diff --git a/nctest/vargetg.c b/nctest/vargetg.c index b02f33b93..d2aa61a93 100644 --- a/nctest/vargetg.c +++ b/nctest/vargetg.c @@ -64,7 +64,7 @@ test_ncvargetg(path) } /* get space for vals */ - hc.vals = emalloc(nctypelen(test.vars[iv].type) + 8); + hc.vals = emalloc((size_t)nctypelen(test.vars[iv].type) + 8); # define TEST_FAILS(varid) \ (ncvarputg(cdfid, varid, hc.cor, hc.edg, \ diff --git a/nctest/varput.c b/nctest/varput.c index b3ea893a7..f9681dcff 100644 --- a/nctest/varput.c +++ b/nctest/varput.c @@ -66,7 +66,7 @@ test_ncvarput(path) hc.edg[id] = 1; } /* fill in vals with value of appropriate type */ - hc.vals = emalloc(nctypelen(test.vars[iv].type)); + hc.vals = emalloc((size_t)nctypelen(test.vars[iv].type)); val_fill(test.vars[iv].type, 1, hc.vals); id = test.vars[iv].ndims - 1; diff --git a/nctest/varputg.c b/nctest/varputg.c index 491121303..1ba28a6dc 100644 --- a/nctest/varputg.c +++ b/nctest/varputg.c @@ -66,7 +66,7 @@ test_ncvarputg(path) } /* fill in vals with value of appropriate type */ - hc.vals = emalloc(nctypelen(test.vars[iv].type)); + hc.vals = emalloc((size_t)nctypelen(test.vars[iv].type)); val_fill(test.vars[iv].type, 1, hc.vals); # define TEST_FAILS(varid) \ diff --git a/nctest/vartests.c b/nctest/vartests.c index 8fe35983c..8b729457e 100644 --- a/nctest/vartests.c +++ b/nctest/vartests.c @@ -48,7 +48,7 @@ test_ncvarid(path) ncclose(cdfid); return ++nerrs; } /* in define mode, add a variable */ - xx.dims = (int *) emalloc(sizeof(int) * xx.ndims); + xx.dims = (int *) emalloc(sizeof(int) * (size_t)xx.ndims); for (id = 0; id < xx.ndims; id++) xx.dims[id] = id; if ((varid = ncvardef(cdfid, @@ -584,7 +584,7 @@ test_ncvarrename(path) ncclose(cdfid); return ++nerrs; } /* in define mode, add two variables */ - yy.dims = (int *) emalloc(sizeof(int) * yy.ndims); + yy.dims = (int *) emalloc(sizeof(int) * (size_t)yy.ndims); for (id = 0; id < yy.ndims; id++) yy.dims[id] = id; if ((yy_id = ncvardef(cdfid, @@ -593,7 +593,7 @@ test_ncvarrename(path) ncclose(cdfid); return ++nerrs; } add_var(&test, &yy); /* keep in-memory netcdf in sync */ - zz.dims = (int *) emalloc(sizeof(int) * zz.ndims); + zz.dims = (int *) emalloc(sizeof(int) * (size_t)zz.ndims); for (id = 0; id < zz.ndims; id++) zz.dims[id] = id; if (ncvardef(cdfid, zz.name, zz.type, zz.ndims, zz.dims) == -1) { diff --git a/nctest/vputget.c b/nctest/vputget.c index 8c2ff2ee9..a4552a73c 100644 --- a/nctest/vputget.c +++ b/nctest/vputget.c @@ -77,8 +77,8 @@ test_varputget(cdfid) for (ie = 0; ie < ne; ie++) { /* for each of ne points */ /* allocate space for the cube of values */ - hc[ie].vals = emalloc(nel[ie]*nctypelen(test.vars[iv].type) + 8); - tmp.vals = emalloc(nel[ie]*nctypelen(test.vars[iv].type) + 8); + hc[ie].vals = emalloc((size_t)(nel[ie]*nctypelen(test.vars[iv].type) + 8)); + tmp.vals = emalloc((size_t)(nel[ie]*nctypelen(test.vars[iv].type) + 8)); /* fill allocated space with different values of right type */ val_fill(test.vars[iv].type, nel[ie], hc[ie].vals); diff --git a/nctest/vputgetg.c b/nctest/vputgetg.c index c4b87b537..c03dc90ad 100644 --- a/nctest/vputgetg.c +++ b/nctest/vputgetg.c @@ -5,6 +5,7 @@ *********************************************************************/ #include +#include #include #include /* for free() */ #include "netcdf.h" @@ -109,7 +110,7 @@ test_varputgetg(cdfid) } for (ie = 0; ie < ne; ie++) { /* for each test */ - int nelms = (int)nel[ie]*nctypelen(test.vars[iv].type) + 8; + size_t nelms = (size_t)(nel[ie]*nctypelen(test.vars[iv].type) + 8); /* allocate space for the cube of values */ hc[ie].vals = emalloc(nelms); tmp.vals = emalloc(nelms); diff --git a/nczarr_test/test_zchunks2.c b/nczarr_test/test_zchunks2.c index 54963761c..beb1dc593 100644 --- a/nczarr_test/test_zchunks2.c +++ b/nczarr_test/test_zchunks2.c @@ -26,7 +26,7 @@ calculate_waste(int ndims, size_t *dimlen, size_t *chunksize, float *waste) size_t chunk_size = 1; assert(waste && dimlen && chunksize && ndims); - if (!(num_chunks = calloc(ndims, sizeof(size_t)))) ERR; + if (!(num_chunks = calloc((size_t)ndims, sizeof(size_t)))) ERR; #ifdef PRINT_CHUNK_WASTE_REPORT printf("\n"); diff --git a/nczarr_test/ut_util.c b/nczarr_test/ut_util.c index e9bb88bb5..8d0921da4 100644 --- a/nczarr_test/ut_util.c +++ b/nczarr_test/ut_util.c @@ -4,6 +4,7 @@ */ #include "ut_includes.h" +#include #undef DEBUG @@ -81,8 +82,8 @@ parsedimdef(const char* s0, Dimdef** defp) s = s0; if((p = strchr(s,'=')) == NULL) abort(); if((count = (p - s)) == 0) return THROW(NC_EINVAL); - def->name = malloc(count+1); - memcpy(def->name,s,count); + def->name = malloc((size_t)count+1); + memcpy(def->name,s,(size_t)count); def->name[count] = '\0'; s = p+1; sscanf(s,"%u%n",&l,&nchars); @@ -115,7 +116,7 @@ parsevardef(const char* s0, NClist* dimdefs, Vardef** varp) if(p == NULL) return THROW(NC_EINVAL); len = (p - s); if(len == 0) return THROW(NC_EINVAL); - memcpy(name,s,len); + memcpy(name,s,(size_t)len); name[len] = '\0'; vd->typeid = ut_typeforname(name); vd->typesize = ut_typesize(vd->typeid); @@ -127,7 +128,7 @@ parsevardef(const char* s0, NClist* dimdefs, Vardef** varp) if(p == NULL) return THROW(NC_EINVAL); len = (p - s); if(len == 0) return THROW(NC_EINVAL); - memcpy(name,s,len); + memcpy(name,s,(size_t)len); name[len] = '\0'; vd->name = strdup(name); /* parse a vector of dimnames and chunksizes and convert */ @@ -178,7 +179,7 @@ parsestringvector(const char* s0, int stopchar, char*** namesp) /* First, compute number of elements */ for(s=s0,nelems=1;*s;s++) {if(*s == ',') nelems++; if(*s == stopchar) break;} if(nelems == 0) return THROW(NC_EINVAL); - names = calloc(nelems+1,sizeof(char*)); + names = calloc((size_t)nelems+1,sizeof(char*)); for(s=s0,i=0;itypesize = sizeof(int); if(var != NULL) { common->rank = var->rank; - memcpy(common->dimlens,var->dimsizes,sizeof(size64_t)*common->rank); - memcpy(common->chunklens,var->chunksizes,sizeof(size64_t)*common->rank); - memcpy(common->memshape,common->dimlens,sizeof(size64_t)*common->rank); /* fake it */ + memcpy(common->dimlens,var->dimsizes,sizeof(size64_t)*(size_t)common->rank); + memcpy(common->chunklens,var->chunksizes,sizeof(size64_t)*(size_t)common->rank); + memcpy(common->memshape,common->dimlens,sizeof(size64_t)*(size_t)common->rank); /* fake it */ } } diff --git a/oc2/ocinternal.c b/oc2/ocinternal.c index 12daca6ec..ef82342a3 100644 --- a/oc2/ocinternal.c +++ b/oc2/ocinternal.c @@ -2,6 +2,7 @@ See the COPYRIGHT file for more information. */ #include "config.h" +#include #include #ifdef HAVE_STDINT_H @@ -320,7 +321,7 @@ createtempfile(OCstate* state, OCtree* tree) int stat = OC_NOERR; char* path = NULL; char* tmppath = NULL; - int len; + size_t len; NCglobalstate* globalstate = NC_getglobalstate(); len = @@ -552,7 +553,7 @@ ocset_curlproperties(OCstate* state) int stat = NC_NOERR; char* path = NULL; char* tmppath = NULL; - int len; + size_t len; errno = 0; /* Create the unique cookie file name */ len = diff --git a/oc2/ocutil.c b/oc2/ocutil.c index dce1f032a..5366feb1c 100644 --- a/oc2/ocutil.c +++ b/oc2/ocutil.c @@ -3,6 +3,7 @@ #include "config.h" #include +#include #ifdef HAVE_UNISTD_H #include #endif @@ -695,7 +696,7 @@ done: char** ocmerge(const char** list1, const char** list2) { - int l1, l2; + size_t l1, l2; char** merge; const char** p; for(l1=0,p=list1;*p;p++) {l1++;} diff --git a/unit_test/tst_xcache.c b/unit_test/tst_xcache.c index d527fcd50..e3a382540 100644 --- a/unit_test/tst_xcache.c +++ b/unit_test/tst_xcache.c @@ -84,7 +84,7 @@ generatestrings(int n, unsigned seed) char* s = NULL; srandom(seed); - strings = (NCXSTR*)calloc(sizeof(NCXSTR),(n+1)); + strings = (NCXSTR*)calloc(sizeof(NCXSTR),((size_t)n+1)); if(strings == NULL) abort(); for(i=0;i Date: Mon, 27 Nov 2023 18:46:10 -0700 Subject: [PATCH 16/35] Fix some important bugs in various files The most critical bug is in nch5s3comms.c. I for some reason assumed that signing keys did not contain any zero bytes. But obviously it can, so a test was removed. Other fixes: 1. Guarantee allocated memory is initialized to all zeros. 2. Cleanup errmsg handling in libncpoco. 3. Fix processing of aws list-objects-v2 because I misread the syntax. --- include/ncpathmgr.h | 3 +++ include/ncs3sdk.h | 3 +++ libdispatch/dcopy.c | 4 ++-- libdispatch/derror.c | 4 ++-- libdispatch/nch5s3comms.c | 4 ++-- libdispatch/nclist.c | 7 +++++-- libncpoco/cp_unix.c | 2 +- libncpoco/cp_win32.c | 5 ++--- libncpoco/ncpoco.c | 11 +++++++++++ libncpoco/ncpoco.h | 3 +++ libsrc/v1hpg.c | 14 +++++++------- s3gc.in | 4 +++- 12 files changed, 44 insertions(+), 20 deletions(-) diff --git a/include/ncpathmgr.h b/include/ncpathmgr.h index 3f0bcd0ec..91dd38ff0 100644 --- a/include/ncpathmgr.h +++ b/include/ncpathmgr.h @@ -14,6 +14,9 @@ #ifdef HAVE_DIRENT_H #include #endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif #ifdef HAVE_SYS_STAT_H #include #endif diff --git a/include/ncs3sdk.h b/include/ncs3sdk.h index 771faa666..013710ccf 100644 --- a/include/ncs3sdk.h +++ b/include/ncs3sdk.h @@ -6,6 +6,9 @@ #ifndef NCS3SDK_H #define NCS3SDK_H 1 +#define AWSHOST ".amazonaws.com" +#define GOOGLEHOST "storage.googleapis.com" + /* Track the server type, if known */ typedef enum NCS3SVC {NCS3UNK=0, /* unknown */ NCS3=1, /* s3.amazon.aws */ diff --git a/libdispatch/dcopy.c b/libdispatch/dcopy.c index 2491a92b6..1f0ff034a 100644 --- a/libdispatch/dcopy.c +++ b/libdispatch/dcopy.c @@ -694,7 +694,7 @@ searchgrouptree(int ncid1, int tid1, int grp, int* tid2) int gid; uintptr_t id; - id = grp; + id = (uintptr_t)grp; nclistpush(queue,(void*)id); /* prime the queue */ while(nclistlength(queue) > 0) { id = (uintptr_t)nclistremove(queue,0); @@ -712,7 +712,7 @@ searchgrouptree(int ncid1, int tid1, int grp, int* tid2) goto done; /* push onto the end of the queue */ for(i=0;isigning_key = signing_key; signing_key = NULL; @@ -2033,7 +2033,7 @@ NCH5_s3comms_signing_key(unsigned char **mdp, const char *secret, const char *re if ((size_t)ret != (AWS4_secret_len - 1)) HGOTO_ERRORVA(H5E_ARGS, NC_EINVAL, FAIL, "problem writing AWS4+secret `%s`", secret); - if((md = (unsigned char*)malloc(SHA256_DIGEST_LENGTH))==NULL) + if((md = (unsigned char*)calloc(1,SHA256_DIGEST_LENGTH))==NULL) HGOTO_ERROR(H5E_ARGS, NC_ENOMEM, NULL, "could not malloc space for signing key ."); /* hash_func, key, len(key), msg, len(msg), digest_dest, digest_len_dest diff --git a/libdispatch/nclist.c b/libdispatch/nclist.c index f2c3f4d47..5ed21753e 100644 --- a/libdispatch/nclist.c +++ b/libdispatch/nclist.c @@ -31,7 +31,7 @@ NClist* nclistnew(void) ncinitialized = 1; } */ - l = (NClist*)malloc(sizeof(NClist)); + l = (NClist*)calloc(1,sizeof(NClist)); if(l) { l->alloc=0; l->length=0; @@ -286,10 +286,13 @@ done: void* nclistextract(NClist* l) { - void* result = l->content; + void* result = NULL; + if(l) { + result = l->content; l->alloc = 0; l->length = 0; l->content = NULL; + } return result; } diff --git a/libncpoco/cp_unix.c b/libncpoco/cp_unix.c index 3ccea2ed0..7ff01f79e 100755 --- a/libncpoco/cp_unix.c +++ b/libncpoco/cp_unix.c @@ -46,7 +46,7 @@ static void ncperr(const char* fcn, NCPSharedLib* lib) { const char* msg = dlerror(); - lib->err.msg[0] = '\0'; + memset(lib->err.msg,0,sizeof(lib->err.msg)); if(msg != NULL) { strlcat(lib->err.msg,fcn,sizeof(lib->err.msg)); strlcat(lib->err.msg,": ",sizeof(lib->err.msg)); diff --git a/libncpoco/cp_win32.c b/libncpoco/cp_win32.c index b4284ac10..896344f63 100755 --- a/libncpoco/cp_win32.c +++ b/libncpoco/cp_win32.c @@ -105,10 +105,9 @@ load(NCPSharedLib* lib , const char* path0, int flags) char* msg = NULL; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errcode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), &msg, 0, NULL); - if(msg) { + memset(lib->err.msg,0,sizeof(lib->err.msg)); + if(msg) strncpy(lib->err.msg,msg,sizeof(lib->err.msg)); - } else - lib->err.msg[0] = '\0'; ret = NC_ENOTFOUND; goto ldone; } diff --git a/libncpoco/ncpoco.c b/libncpoco/ncpoco.c index 12d4b41ee..b12b2e0a9 100755 --- a/libncpoco/ncpoco.c +++ b/libncpoco/ncpoco.c @@ -68,6 +68,7 @@ EXTERNL int ncpload(NCPSharedLib* lib, const char* path, int flags) { if(lib == NULL || path == NULL) return NC_EINVAL; + ncpclearerrmsg(lib); return lib->api.load(lib,path,flags); } @@ -75,6 +76,7 @@ EXTERNL int ncpunload(NCPSharedLib* lib) /* Unloads a shared library. */ { if(lib == NULL) return NC_EINVAL; + ncpclearerrmsg(lib); return lib->api.unload(lib); } @@ -93,6 +95,7 @@ EXTERNL void* ncpgetsymbol(NCPSharedLib* lib,const char* name) { if(lib == NULL) return NULL; + ncpclearerrmsg(lib); return lib->api.getsymbol(lib,name); } @@ -113,3 +116,11 @@ ncpgeterrmsg(NCPSharedLib* lib) if(lib == NULL) return NULL; return (lib->err.msg[0] == '\0' ? NULL : lib->err.msg); } + +/* Clear the last err msg. */ +EXTERNL void +ncpclearerrmsg(NCPSharedLib* lib) +{ + if(lib == NULL) return; + memset(lib->err.msg,0,sizeof(lib->err.msg)); +} diff --git a/libncpoco/ncpoco.h b/libncpoco/ncpoco.h index 43fb077ba..fc1e993b9 100755 --- a/libncpoco/ncpoco.h +++ b/libncpoco/ncpoco.h @@ -71,6 +71,9 @@ EXTERNL const char* ncpgetpath(NCPSharedLib*); /* Return last err msg */ EXTERNL const char* ncpgeterrmsg(NCPSharedLib* lib); +/* Clear the last err msg. */ +EXTERNL void ncpclearerrmsg(NCPSharedLib* lib); + EXTERNL const char* intstr(int err1); #endif /*NCPOCO_H*/ diff --git a/libsrc/v1hpg.c b/libsrc/v1hpg.c index f93b219bd..d1c668446 100644 --- a/libsrc/v1hpg.c +++ b/libsrc/v1hpg.c @@ -1254,7 +1254,7 @@ NC_computeshapes(NC3_INFO* ncp) for( /*NADA*/; vpp < end; vpp++) { status = NC_var_shape(*vpp, &ncp->dims); - if(status != NC_NOERR) + if(status != NC_NOERR) return(status); if(IS_RECVAR(*vpp)) @@ -1265,13 +1265,13 @@ NC_computeshapes(NC3_INFO* ncp) } else { - if(first_var == NULL) + if(first_var == NULL) first_var = *vpp; - /* - * Overwritten each time thru. - * Usually overwritten in first_rec != NULL clause below. - */ - ncp->begin_rec = (*vpp)->begin + (off_t)(*vpp)->len; + /* + * Overwritten each time thru. + * Usually overwritten in first_rec != NULL clause below. + */ + ncp->begin_rec = (*vpp)->begin + (off_t)(*vpp)->len; } } } diff --git a/s3gc.in b/s3gc.in index 612e371d7..a63345c6c 100755 --- a/s3gc.in +++ b/s3gc.in @@ -61,7 +61,9 @@ if ! aws s3api list-objects-v2 --bucket ${S3TESTBUCKET} --prefix "${S3TESTSUBTRE fi aws s3api list-objects-v2 --bucket ${S3TESTBUCKET} --prefix "${S3TESTSUBTREE}" | grep -F '"Key":' >s3gc.keys while read -r line; do - KEY=`echo "$line" | sed -e 's|[^"]*"Key":[^"]*"\([^"]*\)".*|\1|'` + KEY0=`echo "$line" | sed -e 's|[^"]*"Key":[^"]*"\([^"]*\)".*|\1|'` + # Strip off any leading '/' + KEY=`echo "$KEY0" | sed -e 's|^[/]*\(.*\)|\1|'` # Ignore keys that do not start with ${S3TESTSUBTREE} PREFIX=`echo "$KEY" | sed -e 's|\([^/]*\)/.*|\1|'` if test "x$PREFIX" = "x$S3TESTSUBTREE" ; then From 848a735708727adc68a763157c49e03464e755f3 Mon Sep 17 00:00:00 2001 From: Edward Hartnett Date: Sun, 3 Dec 2023 09:10:13 -0700 Subject: [PATCH 17/35] adding zstandard to bm_file --- nc_perf/bm_file.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/nc_perf/bm_file.c b/nc_perf/bm_file.c index ee04cfdd7..82bf4bd0b 100644 --- a/nc_perf/bm_file.c +++ b/nc_perf/bm_file.c @@ -462,7 +462,7 @@ int copy_file(char *file_name_in, char *file_name_out, int cmode_out, size_t *data_read_us, int *data_write_us, int *in_format, int use_par, int par_access, float *num_bytes, int p, int my_rank, int slow_count, int verbose, int use_scs, int endianness, - int convert_unlim) + int convert_unlim, int zstandard) { int ncid_in, ncid_out; int natts, nvars, ndims, unlimdimid; @@ -598,7 +598,20 @@ int copy_file(char *file_name_in, char *file_name_out, int cmode_out, if (nc_def_var_chunking(ncid_out, v, 1, NULL)) ERR; } if (vo[o1].deflate_num != -1) - if (nc_def_var_deflate(ncid_out, v, vo[o1].shuffle, 1, vo[o1].deflate_num)) ERR; + { + if (zstandard) + { + int ret; + if (nc_def_var_deflate(ncid_out, v, vo[o1].shuffle, 0, 0)) ERR; + if ((ret = nc_def_var_zstandard(ncid_out, v, vo[o1].deflate_num))) + { + printf("ret %d\n", ret); + ERR; + } + } + else + if (nc_def_var_deflate(ncid_out, v, vo[o1].shuffle, 1, vo[o1].deflate_num)) ERR; + } break; } @@ -800,13 +813,14 @@ int copy_file(char *file_name_in, char *file_name_out, int cmode_out, [-i] Use MPIIO (only relevant for parallel builds).\n\ [-l] Convert unlimited dimensions to fixed dimensions.\n\ [-e 1|2] Set the endianness of output (1=little 2=big).\n\ + [-y] Use zstandard compression instead of zlib.\n\ file Name of netCDF file\n" static void usage(void) { fprintf(stderr, "bm_file -v [-s N]|[-t V:S:S:S -u V:C:C:C -r V:I:I:I] -o file_out -f N -h" - " -c V:C:C,V:C:C:C -d -m -p -i -e 1|2 -l file\n%s", USAGE); + " -c V:C:C,V:C:C:C -d -m -p -i -e 1|2 -l -y file\n%s", USAGE); } int @@ -819,6 +833,7 @@ main(int argc, char **argv) char file_in[NC_MAX_NAME + 1], file_out[NC_MAX_NAME + 1] = {""}; char file_out_2[NC_MAX_NAME + 10 + 1]; /* extra 10 to silence warning */ int out_format, in_format, header = 0, doublecheck = 0; + int zstandard = 0; int convert_unlim = 0; char *str1, *str2, *token, *subtoken; char *saveptr1, *saveptr2; @@ -857,7 +872,7 @@ main(int argc, char **argv) for (i = 0; i < MAX_DIMS; i++) vo[o1].chunksize[i] = 0; - while ((c = getopt(argc, argv, "vo:f:hc:dpms:it:u:r:e:l")) != EOF) + while ((c = getopt(argc, argv, "vo:f:hc:dpms:it:u:r:e:l:y")) != EOF) switch(c) { case 'v': @@ -1000,6 +1015,9 @@ main(int argc, char **argv) case 'l': convert_unlim++; break; + case 'y': + zstandard++; + break; case '?': usage(); return 1; @@ -1060,7 +1078,7 @@ main(int argc, char **argv) if ((ret = copy_file(file_in, file_out, cmode, num_vo, vo, &meta_read_us, &meta_write_us, &data_read_us, &data_write_us, &in_format, use_par, par_access, &num_bytes, p, my_rank, slow_count, verbose, use_scs, endianness, - convert_unlim))) + convert_unlim, zstandard))) return ret; /* If the user wants a double check, make sure the data in the new From 298033847e8c1ed4e5f2340ac2d022c8c35778d0 Mon Sep 17 00:00:00 2001 From: Edward Hartnett Date: Sun, 3 Dec 2023 11:58:27 -0700 Subject: [PATCH 18/35] adding zstandard to bm_file --- nc_perf/bm_file.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/nc_perf/bm_file.c b/nc_perf/bm_file.c index 82bf4bd0b..e375966cc 100644 --- a/nc_perf/bm_file.c +++ b/nc_perf/bm_file.c @@ -462,7 +462,7 @@ int copy_file(char *file_name_in, char *file_name_out, int cmode_out, size_t *data_read_us, int *data_write_us, int *in_format, int use_par, int par_access, float *num_bytes, int p, int my_rank, int slow_count, int verbose, int use_scs, int endianness, - int convert_unlim, int zstandard) + int convert_unlim, int zstandard, int nsd) { int ncid_in, ncid_out; int natts, nvars, ndims, unlimdimid; @@ -578,6 +578,9 @@ int copy_file(char *file_name_in, char *file_name_out, int cmode_out, /* Create the output var. */ if (nc_def_var(ncid_out, name, xtype, ndims, dimids, &varid_out)) ERR; + if (nsd) + if (nc_def_var_quantize(ncid_out, varid_out, NC_QUANTIZE_GRANULARBR, nsd)) ERR; + /* Set the output endianness. For simplicity in this program, * all vars get the same endianness. But there's no reason why * this couldn't be varied from var to var, though it is hard to @@ -793,7 +796,6 @@ int copy_file(char *file_name_in, char *file_name_out, int cmode_out, #define NDIMS 3 #define MAX_DEFLATE 9 -#define INPUT_FILE "/upc/share/testdata/nssl/mosaic3d_nc/tile1/20070803-2300.netcdf" #define COLON ":" #define COMMA "," @@ -814,13 +816,14 @@ int copy_file(char *file_name_in, char *file_name_out, int cmode_out, [-l] Convert unlimited dimensions to fixed dimensions.\n\ [-e 1|2] Set the endianness of output (1=little 2=big).\n\ [-y] Use zstandard compression instead of zlib.\n\ + [-q nsd] Quantize to NSD.\n\ file Name of netCDF file\n" static void usage(void) { fprintf(stderr, "bm_file -v [-s N]|[-t V:S:S:S -u V:C:C:C -r V:I:I:I] -o file_out -f N -h" - " -c V:C:C,V:C:C:C -d -m -p -i -e 1|2 -l -y file\n%s", USAGE); + " -c V:C:C,V:C:C:C -d -m -p -i -e 1|2 -l -y -q N file\n%s", USAGE); } int @@ -854,6 +857,7 @@ main(int argc, char **argv) float read_rate, write_rate, reread_rate; int slow_count = 10, use_scs = 0; int endianness = 0; + int nsd = 0; float num_bytes = 0; int p = 1, my_rank = 0; int c; @@ -872,7 +876,7 @@ main(int argc, char **argv) for (i = 0; i < MAX_DIMS; i++) vo[o1].chunksize[i] = 0; - while ((c = getopt(argc, argv, "vo:f:hc:dpms:it:u:r:e:l:y")) != EOF) + while ((c = getopt(argc, argv, "vo:f:hc:dpms:it:u:r:e:l:yq:")) != EOF) switch(c) { case 'v': @@ -1018,6 +1022,9 @@ main(int argc, char **argv) case 'y': zstandard++; break; + case 'q': + sscanf(optarg, "%d", &nsd); + break; case '?': usage(); return 1; @@ -1078,7 +1085,7 @@ main(int argc, char **argv) if ((ret = copy_file(file_in, file_out, cmode, num_vo, vo, &meta_read_us, &meta_write_us, &data_read_us, &data_write_us, &in_format, use_par, par_access, &num_bytes, p, my_rank, slow_count, verbose, use_scs, endianness, - convert_unlim, zstandard))) + convert_unlim, zstandard, nsd))) return ret; /* If the user wants a double check, make sure the data in the new @@ -1151,7 +1158,7 @@ main(int argc, char **argv) if (use_par) printf("num_proc, "); printf("deflate, shuffle, chunksize[0], chunksize[1], chunksize[2], " - "chunksize[3]\n"); + "chunksize[3], zstandard, nsd\n"); } printf("%d, %d, %ld, %ld, %d, %d, %ld, %d, %d, ", in_format, out_format, file_size(file_in), @@ -1166,8 +1173,8 @@ main(int argc, char **argv) printf("%d, ", p); for (o1 = 0; o1 < num_vo; o1++) { - printf("%d, %d, %d, %d, %d, %d ", vo[o1].deflate_num, vo[o1].shuffle, - (int)vo[o1].chunksize[0], (int)vo[o1].chunksize[1], (int)vo[o1].chunksize[2], (int)vo[o1].chunksize[3]); + printf("%d, %d, %d, %d, %d, %d, %d, %d", vo[o1].deflate_num, vo[o1].shuffle, + (int)vo[o1].chunksize[0], (int)vo[o1].chunksize[1], (int)vo[o1].chunksize[2], (int)vo[o1].chunksize[3], zstandard, nsd); if (o1 >= MAX_VO_PRINTED) break; if (o1 != num_vo - 1) From dfc2ac729690ccc7d89ae657e5c574120476820e Mon Sep 17 00:00:00 2001 From: Sean McBride Date: Sun, 30 Apr 2023 18:01:49 -0400 Subject: [PATCH 19/35] Replaced trivial uses of sprintf with snprintf In all these cases the size of the buffer can be computed with sizeof. --- h5_test/tst_h_compounds.c | 10 +-- h5_test/tst_h_dimscales.c | 2 +- h5_test/tst_h_dimscales4.c | 2 +- h5_test/tst_h_files.c | 6 +- h5_test/tst_h_mem.c | 2 +- h5_test/tst_h_vars.c | 2 +- h5_test/tst_h_vars2.c | 2 +- hdf4_test/tst_interops2.c | 2 +- libdap2/dapodom.c | 2 +- libdap2/dcetab.c | 2 +- libdap4/d4odom.c | 2 +- libdispatch/dparallel.c | 2 +- libdispatch/nctime.c | 2 +- libhdf5/hdf5open.c | 2 +- libhdf5/nc4hdf.c | 10 +-- libsrc/ffio.c | 2 +- libsrc/pstdint.h | 20 ++--- libsrc4/nc4internal.c | 4 +- nc_perf/bm_file.c | 4 +- nc_perf/bm_many_atts.c | 4 +- nc_perf/bm_many_objs.c | 6 +- nc_perf/tst_attsperf.c | 8 +- nc_perf/tst_bm_rando.c | 6 +- nc_perf/tst_chunks3.c | 36 ++++----- nc_perf/tst_compress.c | 4 +- nc_perf/tst_compress_par.c | 4 +- nc_perf/tst_create_files.c | 10 +-- nc_perf/tst_files2.c | 16 ++-- nc_perf/tst_h_many_atts.c | 2 +- nc_perf/tst_wrf_reads.c | 6 +- nc_test/large_files.c | 2 +- nc_test/quick_large_files.c | 2 +- nc_test/testnc3perf.c | 12 +-- nc_test/tst_addvar.c | 2 +- nc_test/tst_big_rvar.c | 2 +- nc_test/tst_big_var.c | 2 +- nc_test/tst_big_var2.c | 2 +- nc_test/tst_big_var6.c | 2 +- nc_test/tst_cdf5format.c | 6 +- nc_test/tst_diskless3.c | 2 +- nc_test/tst_diskless4.c | 2 +- nc_test/tst_formats.c | 8 +- nc_test/tst_large.c | 2 +- nc_test/tst_large_cdf5.c | 2 +- nc_test/tst_parallel2.c | 2 +- nc_test/tst_pnetcdf.c | 8 +- nc_test/tst_small.c | 4 +- nc_test/util.c | 6 +- nc_test4/tst_atts2.c | 2 +- nc_test4/tst_chunks.c | 8 +- nc_test4/tst_chunks2.c | 16 ++-- nc_test4/tst_compounds.c | 4 +- nc_test4/tst_compounds3.c | 4 +- nc_test4/tst_dims2.c | 2 +- nc_test4/tst_files.c | 2 +- nc_test4/tst_grps.c | 4 +- nc_test4/tst_interops4.c | 8 +- nc_test4/tst_interops5.c | 4 +- nc_test4/tst_large2.c | 2 +- nc_test4/tst_large3.c | 2 +- nc_test4/tst_large5.c | 2 +- nc_test4/tst_nc4perf.c | 8 +- nc_test4/tst_parallel.c | 2 +- nc_test4/tst_parallel3.c | 2 +- nc_test4/tst_parallel4.c | 2 +- nc_test4/tst_parallel_zlib.c | 4 +- nc_test4/tst_quantize.c | 6 +- nc_test4/tst_quantize_par.c | 4 +- nc_test4/tst_rename2.c | 12 +-- nc_test4/tst_rename3.c | 6 +- nc_test4/tst_simplerw_coll_r.c | 2 +- nc_test4/tst_strings.c | 2 +- nc_test4/tst_types.c | 4 +- nc_test4/tst_vars.c | 2 +- nc_test4/tst_vars3.c | 2 +- ncdump/ncvalidator.c | 10 +-- ncdump/ocprint.c | 4 +- ncgen/cmldata.c | 22 +++--- ncgen/cvt.c | 22 +++--- ncgen/dump.c | 24 +++--- ncgen/f77data.c | 14 ++-- ncgen/gencml.c | 2 +- ncgen/genjjni.c | 26 +++---- ncgen/jdatajni.c | 14 ++-- ncgen/ncgen.l | 24 +++--- ncgen/ncgen.y | 4 +- ncgen/ncgenl.c | 24 +++--- ncgen/ncgeny.c | 6 +- ncgen/odom.c | 2 +- ncgen3/genlib.c | 136 ++++++++++++++++----------------- ncgen3/load.c | 82 ++++++++++---------- ncgen3/ncgen.l | 14 ++-- ncgen3/ncgenl.c | 14 ++-- ncgen3/ncgeny.c | 2 +- nctest/driver.c | 2 +- nczarr_test/bm_chunks3.c | 4 +- nczarr_test/test_zchunks.c | 8 +- nczarr_test/test_zchunks2.c | 16 ++-- oc2/dapparse.c | 4 +- oc2/dapy.c | 2 +- oc2/ocdump.c | 18 ++--- 101 files changed, 434 insertions(+), 434 deletions(-) diff --git a/h5_test/tst_h_compounds.c b/h5_test/tst_h_compounds.c index c53032c3f..952e2585a 100644 --- a/h5_test/tst_h_compounds.c +++ b/h5_test/tst_h_compounds.c @@ -452,7 +452,7 @@ main() hr_data_out[i].starfleet_id = i; hr_data_out[i].svc_rec.i1 = 95; hr_data_out[i].svc_rec.i2 = 90; - if (sprintf(hr_data_out[i].name, "alien_%d", i) < 0) ERR; + if (snprintf(hr_data_out[i].name, sizeof(hr_data_out[i].name), "alien_%d", i) < 0) ERR; hr_data_out[i].max_temp = 99.99f; hr_data_out[i].min_temp = -9.99f; hr_data_out[i].percent_transporter_errosion = .1; @@ -557,7 +557,7 @@ main() hr_data_out[i].starfleet_id = i; hr_data_out[i].svc_rec.i1 = 95; hr_data_out[i].svc_rec.i2 = 90; - if (sprintf(hr_data_out[i].name, "alien_%d", i) < 0) ERR; + if (snprintf(hr_data_out[i].name, sizeof(hr_data_out[i].name), "alien_%d", i) < 0) ERR; hr_data_out[i].max_temp = 99.99f; hr_data_out[i].min_temp = -9.99f; hr_data_out[i].percent_transporter_errosion = .1; @@ -665,7 +665,7 @@ main() hr_data_out[i].starfleet_id = i; hr_data_out[i].svc_rec.i1 = 95; hr_data_out[i].svc_rec.i2 = 90; - if (sprintf(hr_data_out[i].name, "alien_%d", i) < 0) ERR; + if (snprintf(hr_data_out[i].name, sizeof(hr_data_out[i].name), "alien_%d", i) < 0) ERR; hr_data_out[i].max_temp = 99.99f; hr_data_out[i].min_temp = -9.99f; hr_data_out[i].percent_transporter_errosion = .1; @@ -756,7 +756,7 @@ main() /* Create some phony data. */ for (i = 0; i < DIM1_LEN; i++) { - if (sprintf(hr_data_out[i].name, "alien_%d", i) < 0) ERR; + if (snprintf(hr_data_out[i].name, sizeof(hr_data_out[i].name), "alien_%d", i) < 0) ERR; hr_data_out[i].max_temp = 99.99f; } @@ -841,7 +841,7 @@ main() /* Create some phony data. */ for (i = 0; i < DIM2_LEN; i++) { - if (sprintf(hr_data_out[i].name, "alien_%d", i) < 0) ERR; + if (snprintf(hr_data_out[i].name, sizeof(hr_data_out[i].name), "alien_%d", i) < 0) ERR; hr_data_out[i].max_temp = 99.99f; } diff --git a/h5_test/tst_h_dimscales.c b/h5_test/tst_h_dimscales.c index 7186778fe..8eeee14c4 100644 --- a/h5_test/tst_h_dimscales.c +++ b/h5_test/tst_h_dimscales.c @@ -308,7 +308,7 @@ main() if ((var1_spaceid = H5Screate_simple(1, dims, dims)) < 0) ERR; for (v = 0; v < NUM_DATASETS; v++) { - sprintf(var_name, "var_%d", v); + snprintf(var_name, sizeof(var_name), "var_%d", v); if ((var1_datasetid[v] = H5Dcreate1(grpid, var_name, H5T_NATIVE_INT, var1_spaceid, H5P_DEFAULT)) < 0) ERR; if (H5DSattach_scale(var1_datasetid[v], dimscaleid, 0) < 0) ERR; diff --git a/h5_test/tst_h_dimscales4.c b/h5_test/tst_h_dimscales4.c index c12ca9624..430960926 100644 --- a/h5_test/tst_h_dimscales4.c +++ b/h5_test/tst_h_dimscales4.c @@ -93,7 +93,7 @@ main() spaceid, create_propid)) < 0) ERR; if (H5Sclose(spaceid) < 0) ERR; if (H5Pclose(create_propid) < 0) ERR; - sprintf(dimscale_wo_var, "%s%10d", DIM_WITHOUT_VARIABLE, DIM_LEN); + snprintf(dimscale_wo_var, sizeof(dimscale_wo_var), "%s%10d", DIM_WITHOUT_VARIABLE, DIM_LEN); if (H5DSset_scale(dimscaleid, dimscale_wo_var) < 0) ERR; /* Create a variable that uses this dimension scale. */ diff --git a/h5_test/tst_h_files.c b/h5_test/tst_h_files.c index f4bc617f0..15765ea5b 100644 --- a/h5_test/tst_h_files.c +++ b/h5_test/tst_h_files.c @@ -248,7 +248,7 @@ main() void *bufr; void *fillp = NULL; - sprintf(file_name, "%s/%s", TEMP_LARGE, FILE_NAME); + snprintf(file_name, sizeof(file_name), "%s/%s", TEMP_LARGE, FILE_NAME); /* Create file access and create property lists. */ if ((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR; @@ -285,7 +285,7 @@ main() spaceid, plistid)) < 0) ERR; if (H5Sclose(spaceid) < 0) ERR; if (H5Pclose(plistid) < 0) ERR; - sprintf(dimscale_wo_var, "%s%10d", DIM_WITHOUT_VARIABLE, DIM1); + snprintf(dimscale_wo_var, sizeof(dimscale_wo_var), "%s%10d", DIM_WITHOUT_VARIABLE, DIM1); if (H5DSset_scale(dim1_dimscaleid, dimscale_wo_var) < 0) ERR; /* Create the dim2 dimscale. */ @@ -299,7 +299,7 @@ main() spaceid, plistid)) < 0) ERR; if (H5Sclose(spaceid) < 0) ERR; if (H5Pclose(plistid) < 0) ERR; - sprintf(dimscale_wo_var, "%s%10d", DIM_WITHOUT_VARIABLE, DIM2); + snprintf(dimscale_wo_var, sizeof(dimscale_wo_var), "%s%10d", DIM_WITHOUT_VARIABLE, DIM2); if (H5DSset_scale(dim2_dimscaleid, dimscale_wo_var) < 0) ERR; /* Now create the 2D dataset. */ diff --git a/h5_test/tst_h_mem.c b/h5_test/tst_h_mem.c index d2b1d4a24..d7b0b9e5d 100644 --- a/h5_test/tst_h_mem.c +++ b/h5_test/tst_h_mem.c @@ -67,7 +67,7 @@ main() /* Create the variables. */ for (v = 0; v < NUM_DATASETS; v++) { - sprintf(var_name, "var_%d", v); + snprintf(var_name, sizeof(var_name), "var_%d", v); /* printf("creating var %s\n", var_name);*/ if ((datasetid[v] = H5Dcreate1(grpid, var_name, H5T_NATIVE_INT, spaceid, plistid)) < 0) ERR_RET; diff --git a/h5_test/tst_h_vars.c b/h5_test/tst_h_vars.c index 77be6abd4..7fa840f41 100644 --- a/h5_test/tst_h_vars.c +++ b/h5_test/tst_h_vars.c @@ -517,7 +517,7 @@ main() "szip_and_zlib"}; /* Open file and create group. */ - sprintf(file_name, "%s_%s.h5", TEST_NAME, desc[f]); + snprintf(file_name, sizeof(file_name), "%s_%s.h5", TEST_NAME, desc[f]); if ((fileid = H5Fcreate(file_name, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) ERR; if ((grpid = H5Gcreate1(fileid, GRP_NAME, 0)) < 0) ERR; diff --git a/h5_test/tst_h_vars2.c b/h5_test/tst_h_vars2.c index 400be6bb4..e53b67752 100644 --- a/h5_test/tst_h_vars2.c +++ b/h5_test/tst_h_vars2.c @@ -478,7 +478,7 @@ main() /* Create the variables. */ for (v = 0; v < NUM_DATASETS; v++) { - sprintf(var_name, "var_%d", v); + snprintf(var_name, sizeof(var_name), "var_%d", v); /* printf("creating var %s\n", var_name);*/ if ((datasetid[v] = H5Dcreate1(grpid, var_name, H5T_NATIVE_INT, spaceid, plistid)) < 0) ERR_RET; diff --git a/hdf4_test/tst_interops2.c b/hdf4_test/tst_interops2.c index 2b7ff2681..7951dc5e0 100644 --- a/hdf4_test/tst_interops2.c +++ b/hdf4_test/tst_interops2.c @@ -141,7 +141,7 @@ main(int argc, char **argv) /* Create some HDF4 datasets. */ for (t = 0; t < NUM_TYPES; t++) { - sprintf(tmp_name, "hdf4_dataset_type_%d", t); + snprintf(tmp_name, sizeof(tmp_name), "hdf4_dataset_type_%d", t); if ((sds_id = SDcreate(sd_id, tmp_name, hdf4_type[t], DIMS_3, dim_size)) == FAIL) ERR; /* Set up dimensions. By giving them the same names for each diff --git a/libdap2/dapodom.c b/libdap2/dapodom.c index 2c6611a98..c8d4a2239 100644 --- a/libdap2/dapodom.c +++ b/libdap2/dapodom.c @@ -81,7 +81,7 @@ dapodom_print(Dapodometer* odom) if(odom->rank == 0) { strlcat(line,"[]",sizeof(line)); } else for(i=0;irank;i++) { - sprintf(tmp,"[%lu/%lu:%lu:%lu]", + snprintf(tmp,sizeof(tmp),"[%lu/%lu:%lu:%lu]", (size_t)odom->index[i], (size_t)odom->start[i], (size_t)odom->stride[i], diff --git a/libdap2/dcetab.c b/libdap2/dcetab.c index 60a602449..4b4adf465 100644 --- a/libdap2/dcetab.c +++ b/libdap2/dcetab.c @@ -978,7 +978,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, return 1; } - /* Avoid sprintf, as that infringes on the user's name space. + /* Avoid snprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { diff --git a/libdap4/d4odom.c b/libdap4/d4odom.c index 1b7f65081..ed7d4639f 100644 --- a/libdap4/d4odom.c +++ b/libdap4/d4odom.c @@ -78,7 +78,7 @@ d4odom_print(D4odometer* odom) if(odom->rank == 0) { strlcat(line,"[]",sizeof(line)); } else for(i=0;irank;i++) { - sprintf(tmp,"[%lu/%lu:%lu:%lu]", + snprintf(tmp,sizeof(tmp),"[%lu/%lu:%lu:%lu]", (size_t)odom->index[i], (size_t)odom->start[i], (size_t)odom->stride[i], diff --git a/libdispatch/dparallel.c b/libdispatch/dparallel.c index 6a9aba720..3968c6fd0 100644 --- a/libdispatch/dparallel.c +++ b/libdispatch/dparallel.c @@ -76,7 +76,7 @@ parallel I/O. MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); - sprintf(file_name, "%s/%s", TEMP_LARGE, FILE); + snprintf(file_name, sizeof(file_name), "%s/%s", TEMP_LARGE, FILE); if ((res = nc_create_par(file_name, NC_NETCDF4, comm, info, &ncid))) ERR; if (nc_def_dim(ncid, "d1", DIMSIZE, dimids)) ERR; diff --git a/libdispatch/nctime.c b/libdispatch/nctime.c index e265ba1f4..aa937de54 100644 --- a/libdispatch/nctime.c +++ b/libdispatch/nctime.c @@ -386,7 +386,7 @@ cdParseRelunits(cdCalenType timetype, char* relunits, cdUnitTime* unit, cdCompTi else{ cdTrim(basetime_1,CD_MAX_CHARTIME); cdTrim(basetime_2,CD_MAX_CHARTIME); - sprintf(basetime,"%s %s",basetime_1,basetime_2); + snprintf(basetime,sizeof(basetime),"%s %s",basetime_1,basetime_2); } } diff --git a/libhdf5/hdf5open.c b/libhdf5/hdf5open.c index 0c2f5b523..6e7154493 100644 --- a/libhdf5/hdf5open.c +++ b/libhdf5/hdf5open.c @@ -482,7 +482,7 @@ create_phony_dims(NC_GRP_INFO_T *grp, hid_t hdf_datasetid, NC_VAR_INFO_T *var) if (!match) { char phony_dim_name[NC_MAX_NAME + 1]; - sprintf(phony_dim_name, "phony_dim_%d", grp->nc4_info->next_dimid); + snprintf(phony_dim_name, sizeof(phony_dim_name), "phony_dim_%d", grp->nc4_info->next_dimid); LOG((3, "%s: creating phony dim for var %s", __func__, var->hdr.name)); /* Add phony dim to metadata list. */ diff --git a/libhdf5/nc4hdf.c b/libhdf5/nc4hdf.c index a84abd022..89cc5f973 100644 --- a/libhdf5/nc4hdf.c +++ b/libhdf5/nc4hdf.c @@ -702,13 +702,13 @@ write_quantize_att(NC_VAR_INFO_T *var) switch (var->quantize_mode) { case NC_QUANTIZE_BITGROOM: - sprintf(att_name, "%s", NC_QUANTIZE_BITGROOM_ATT_NAME); + snprintf(att_name, sizeof(att_name), "%s", NC_QUANTIZE_BITGROOM_ATT_NAME); break; case NC_QUANTIZE_GRANULARBR: - sprintf(att_name, "%s", NC_QUANTIZE_GRANULARBR_ATT_NAME); + snprintf(att_name, sizeof(att_name), "%s", NC_QUANTIZE_GRANULARBR_ATT_NAME); break; case NC_QUANTIZE_BITROUND: - sprintf(att_name, "%s", NC_QUANTIZE_BITROUND_ATT_NAME); + snprintf(att_name, sizeof(att_name), "%s", NC_QUANTIZE_BITROUND_ATT_NAME); break; default: return NC_EINVAL; @@ -1826,7 +1826,7 @@ nc4_create_dim_wo_var(NC_DIM_INFO_T *dim) /* 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); + snprintf(dimscale_wo_var, sizeof(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); @@ -2257,7 +2257,7 @@ nc4_rec_match_dimscales(NC_GRP_INFO_T *grp) if (match < 0) { char phony_dim_name[NC_MAX_NAME + 1]; - sprintf(phony_dim_name, "phony_dim_%d", grp->nc4_info->next_dimid); + snprintf(phony_dim_name, sizeof(phony_dim_name), "phony_dim_%d", grp->nc4_info->next_dimid); LOG((3, "%s: creating phony dim for var %s", __func__, var->hdr.name)); if ((retval = nc4_dim_list_add(grp, phony_dim_name, h5dimlen[d], -1, &dim))) { diff --git a/libsrc/ffio.c b/libsrc/ffio.c index 80bc6cb93..a59246e9a 100644 --- a/libsrc/ffio.c +++ b/libsrc/ffio.c @@ -604,7 +604,7 @@ ncio_ffio_assign(const char *filename) { errno=E2BIG; return (const char *) NULL; } - (void) sprintf(buffer,"-F %s %s", envstr,xtra_assign); + (void) snprintf(buffer,sizeof(buffer),"-F %s %s", envstr,xtra_assign); #ifdef __crayx1 ASNFILE(filename, buffer, &istat, strlen(filename)+1, strlen(buffer)+1); #else diff --git a/libsrc/pstdint.h b/libsrc/pstdint.h index c0b4addb3..98936cc33 100644 --- a/libsrc/pstdint.h +++ b/libsrc/pstdint.h @@ -763,27 +763,27 @@ int main () { uintmax_t umax = UINTMAX_C(0); char str0[256], str1[256]; - sprintf (str0, "%d %x\n", 0, ~0); + snprintf (str0, sizeof(str0), "%d %x\n", 0, ~0); - sprintf (str1, "%d %x\n", i8, ~0); + snprintf (str1, sizeof(str1), "%d %x\n", i8, ~0); if (0 != strcmp (str0, str1)) printf ("Something wrong with i8 : %s\n", str1); - sprintf (str1, "%u %x\n", u8, ~0); + snprintf (str1, sizeof(str1), "%u %x\n", u8, ~0); if (0 != strcmp (str0, str1)) printf ("Something wrong with u8 : %s\n", str1); - sprintf (str1, "%d %x\n", i16, ~0); + snprintf (str1, sizeof(str1), "%d %x\n", i16, ~0); if (0 != strcmp (str0, str1)) printf ("Something wrong with i16 : %s\n", str1); - sprintf (str1, "%u %x\n", u16, ~0); + snprintf (str1, sizeof(str1), "%u %x\n", u16, ~0); if (0 != strcmp (str0, str1)) printf ("Something wrong with u16 : %s\n", str1); - sprintf (str1, "%" PRINTF_INT32_MODIFIER "d %x\n", i32, ~0); + snprintf (str1, sizeof(str1), "%" PRINTF_INT32_MODIFIER "d %x\n", i32, ~0); if (0 != strcmp (str0, str1)) printf ("Something wrong with i32 : %s\n", str1); - sprintf (str1, "%" PRINTF_INT32_MODIFIER "u %x\n", u32, ~0); + snprintf (str1, sizeof(str1), "%" PRINTF_INT32_MODIFIER "u %x\n", u32, ~0); if (0 != strcmp (str0, str1)) printf ("Something wrong with u32 : %s\n", str1); #ifdef INT64_MAX - sprintf (str1, "%" PRINTF_INT64_MODIFIER "d %x\n", i64, ~0); + snprintf (str1, sizeof(str1), "%" PRINTF_INT64_MODIFIER "d %x\n", i64, ~0); if (0 != strcmp (str0, str1)) printf ("Something wrong with i64 : %s\n", str1); #endif - sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "d %x\n", imax, ~0); + snprintf (str1, sizeof(str1), "%" PRINTF_INTMAX_MODIFIER "d %x\n", imax, ~0); if (0 != strcmp (str0, str1)) printf ("Something wrong with imax : %s\n", str1); - sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "u %x\n", umax, ~0); + snprintf (str1, sizeof(str1), "%" PRINTF_INTMAX_MODIFIER "u %x\n", umax, ~0); if (0 != strcmp (str0, str1)) printf ("Something wrong with umax : %s\n", str1); TESTUMAX(8); diff --git a/libsrc4/nc4internal.c b/libsrc4/nc4internal.c index 2c6e64d1b..fc5f62aed 100644 --- a/libsrc4/nc4internal.c +++ b/libsrc4/nc4internal.c @@ -1742,7 +1742,7 @@ nc4_init_logging(void) } /* Create a filename with the rank in it. */ - sprintf(log_filename, "nc4_log_%d.log", my_rank); + snprintf(log_filename, sizeof(log_filename), "nc4_log_%d.log", my_rank); /* Open a file for this rank to log messages. */ if (!(LOG_FILE = fopen(log_filename, "w"))) @@ -1875,7 +1875,7 @@ rec_print_metadata(NC_GRP_INFO_T *grp, int tab_count) strcpy(dims_string, ""); for (d = 0; d < var->ndims; d++) { - sprintf(temp_string, " %d", var->dimids[d]); + snprintf(temp_string, sizeof(temp_string), " %d", var->dimids[d]); strcat(dims_string, temp_string); } } diff --git a/nc_perf/bm_file.c b/nc_perf/bm_file.c index ee04cfdd7..925c14e00 100644 --- a/nc_perf/bm_file.c +++ b/nc_perf/bm_file.c @@ -1075,8 +1075,8 @@ main(int argc, char **argv) #endif /* Create a copy of file_out. This will defeat any buffering * that may exist from the fact that we just wrote file_out. */ - sprintf(file_out_2, "tst_copy_%s", file_out); - sprintf(cmd, "cp %s %s\n", file_out, file_out_2); + snprintf(file_out_2, sizeof(file_out_2), "tst_copy_%s", file_out); + snprintf(cmd, sizeof(cmd), "cp %s %s\n", file_out, file_out_2); system(cmd); if ((ret = cmp_file(file_in, file_out_2, &meta_read2_us, &data_read2_us, diff --git a/nc_perf/bm_many_atts.c b/nc_perf/bm_many_atts.c index 7cccf6563..07334110c 100644 --- a/nc_perf/bm_many_atts.c +++ b/nc_perf/bm_many_atts.c @@ -58,12 +58,12 @@ int main(int argc, char **argv) ERR; for(g = 1; g < numgrp + 1; g++) { - sprintf(gname, "group%d", g); + snprintf(gname, sizeof(gname), "group%d", g); if (nc_def_grp(ncid, gname, &grp)) ERR; natts = g < numgrp ? NC_MAX_ATTRS : aleft; /* leftovers on last time through */ for(an = 1; an < natts + 1; an++) { char aname[20]; - sprintf(aname, "attribute%d", a); + snprintf(aname, sizeof(aname), "attribute%d", a); if (nc_put_att_int(grp, NC_GLOBAL, aname, NC_INT, 1, data)) ERR; if(a%100 == 0) { /* only print every 100th attribute name */ if (gettimeofday(&end_time, NULL)) ERR; diff --git a/nc_perf/bm_many_objs.c b/nc_perf/bm_many_objs.c index defc65a14..43e4f49da 100644 --- a/nc_perf/bm_many_objs.c +++ b/nc_perf/bm_many_objs.c @@ -52,7 +52,7 @@ int main(int argc, char **argv) /* create N groups, printing time after every 1000 */ numgrp = nitem; for(g = 1; g < numgrp + 1; g++) { - sprintf(gname, "group%d", g); + snprintf(gname, sizeof(gname), "group%d", g); if (nc_def_grp(ncid, gname, &grp)) ERR; if (nc_def_var(grp, "var", NC_INT, 0, NULL, &var)) ERR; if(nc_enddef (grp)) ERR; @@ -80,13 +80,13 @@ int main(int argc, char **argv) ERR; for(g = 1; g < numgrp + 1; g++) { - sprintf(gname, "group%d", g); + snprintf(gname, sizeof(gname), "group%d", g); if (nc_def_grp(ncid, gname, &grp)) ERR; nvars = g < numgrp ? NC_MAX_VARS : vleft; /* leftovers on last time through */ for(vn = 1; vn < nvars + 1; vn++) { int var; char vname[20]; - sprintf(vname, "variable%d", v); + snprintf(vname, sizeof(vname), "variable%d", v); if(nc_def_var(grp, vname, NC_INT, 0, NULL, &var)) ERR; if(nc_put_var(grp, var, data)) ERR; if(v%1000 == 0) { /* only print every 1000th variable name */ diff --git a/nc_perf/tst_attsperf.c b/nc_perf/tst_attsperf.c index 26a2b4844..d9911ea39 100644 --- a/nc_perf/tst_attsperf.c +++ b/nc_perf/tst_attsperf.c @@ -48,7 +48,7 @@ add_attributes(int ncid, int varid, size_t num_atts, size_t att_len) /* Write a bunch of attributes. */ for (a = 0; a < num_atts; a++) { - sprintf(att_name, "%s_varid_%d_att_%d", TEST, varid, a); + snprintf(att_name, sizeof(att_name), "%s_varid_%d_att_%d", TEST, varid, a); if (nc_put_att_double(ncid, varid, att_name, NC_DOUBLE, att_len, att_data)) ERR; } @@ -73,7 +73,7 @@ buildfile(size_t num_vars, size_t num_atts, size_t att_len, char *file_name) for (v = 0; v < num_vars; v++) { char var_name[NC_MAX_NAME + 1]; - sprintf(var_name, "%s_var_%d", TEST, v); + snprintf(var_name, sizeof(var_name), "%s_var_%d", TEST, v); if (nc_def_var(ncid, var_name, NC_INT, NDIMS, dimids, &varid)) ERR; if (add_attributes(ncid, v, num_atts, att_len)) ERR; } @@ -200,7 +200,7 @@ main(int argc, char **argv) long long hdf5_open_time = 0; /* Determine file name. */ - sprintf(file_name, "%s_%d_%d.nc", TEST, num_vars, r); + snprintf(file_name, sizeof(file_name), "%s_%d_%d.nc", TEST, num_vars, r); if (buildfile(num_vars, num_atts, ATT_LEN, file_name)) ERR; if (readfile(file_name, &nc4_open_time, do_inq, num_vars)) ERR; @@ -242,7 +242,7 @@ main(int argc, char **argv) long long hdf5_open_time; /* Determine file name. */ - sprintf(file_name, "%s_%d_%d_%d.nc", TEST, num_vars, s, r); + snprintf(file_name, sizeof(file_name), "%s_%d_%d_%d.nc", TEST, num_vars, s, r); if (buildfile(num_vars, num_atts, ATT_LEN, file_name)) ERR; if (readfile(file_name, &nc4_open_time, do_inq, num_vars)) ERR; diff --git a/nc_perf/tst_bm_rando.c b/nc_perf/tst_bm_rando.c index 05dfd216b..825c49af2 100644 --- a/nc_perf/tst_bm_rando.c +++ b/nc_perf/tst_bm_rando.c @@ -74,7 +74,7 @@ main(int argc, char **argv) if (nc_def_dim(ncid, DIM2_NAME, DIM2_LEN, &dimid[2])) ERR; for (v = 0; v < NUM_VAR; v++) { - sprintf(name, "var_%d", v); + snprintf(name, sizeof(name), "var_%d", v); if (nc_def_var(ncid, name, NC_FLOAT, NDIM3, dimid, &varid[v])) ERR; if (nc_def_var_chunking(ncid, v, NC_CHUNKED, chunksize)) ERR; } @@ -103,8 +103,8 @@ main(int argc, char **argv) { /* Create a copy of file_out. This will defeat any OS * buffering. */ - sprintf(file_2, "tst_copy_%d_%s", c, FILE_NAME); - sprintf(cmd, "cp %s %s\n", FILE_NAME, file_2); + snprintf(file_2, sizeof(file_2), "tst_copy_%d_%s", c, FILE_NAME); + snprintf(cmd, sizeof(cmd), "cp %s %s\n", FILE_NAME, file_2); system(cmd); } else diff --git a/nc_perf/tst_chunks3.c b/nc_perf/tst_chunks3.c index 701a2c4ba..1cc916846 100644 --- a/nc_perf/tst_chunks3.c +++ b/nc_perf/tst_chunks3.c @@ -307,7 +307,7 @@ main(int argc, char *argv[]) { count[1] = dims[1]; count[2] = dims[2]; - sprintf(time_mess," contiguous write %3d %3ld %3ld", + snprintf(time_mess, sizeof(time_mess)," contiguous write %3d %3ld %3ld", 1, dims[1], dims[2]); TIMING_START ; for(i = 0; i < dims[0]; i++) { @@ -319,7 +319,7 @@ main(int argc, char *argv[]) { printf("\n"); contig_time = TMsec; - sprintf(time_mess," chunked write %3d %3ld %3ld %3ld %3ld %3ld", + snprintf(time_mess, sizeof(time_mess)," chunked write %3d %3ld %3ld %3ld %3ld %3ld", 1, dims[1], dims[2], chunks[0], chunks[1], chunks[2]); TIMING_START ; for(i = 0; i < dims[0]; i++) { @@ -335,7 +335,7 @@ main(int argc, char *argv[]) { else printf(" %5.2g x slower\n", 1.0/ratio); - sprintf(time_mess," compressed write %3d %3ld %3ld %3ld %3ld %3ld", + snprintf(time_mess, sizeof(time_mess)," compressed write %3d %3ld %3ld %3ld %3ld %3ld", 1, dims[1], dims[2], chunks[0], chunks[1], chunks[2]); TIMING_START ; for(i = 0; i < dims[0]; i++) { @@ -360,7 +360,7 @@ main(int argc, char *argv[]) { count[1] = 1; count[2] = dims[2]; - sprintf(time_mess," contiguous write %3ld %3d %3ld", + snprintf(time_mess, sizeof(time_mess)," contiguous write %3ld %3d %3ld", dims[0], 1, dims[2]); TIMING_START ; for(i = 0; i < dims[1]; i++) { @@ -372,7 +372,7 @@ main(int argc, char *argv[]) { printf("\n"); contig_time = TMsec; - sprintf(time_mess," chunked write %3ld %3d %3ld %3ld %3ld %3ld", + snprintf(time_mess, sizeof(time_mess)," chunked write %3ld %3d %3ld %3ld %3ld %3ld", dims[0], 1, dims[2], chunks[0], chunks[1], chunks[2]); TIMING_START ; for(i = 0; i < dims[1]; i++) { @@ -388,7 +388,7 @@ main(int argc, char *argv[]) { else printf(" %5.2g x slower\n", 1.0/ratio); - sprintf(time_mess," compressed write %3ld %3d %3ld %3ld %3ld %3ld", + snprintf(time_mess, sizeof(time_mess)," compressed write %3ld %3d %3ld %3ld %3ld %3ld", dims[0], 1, dims[2], chunks[0], chunks[1], chunks[2]); TIMING_START ; for(i = 0; i < dims[1]; i++) { @@ -413,7 +413,7 @@ main(int argc, char *argv[]) { count[1] = dims[1]; count[2] = 1; - sprintf(time_mess," contiguous write %3ld %3ld %3d", + snprintf(time_mess, sizeof(time_mess)," contiguous write %3ld %3ld %3d", dims[0], dims[1], 1); TIMING_START ; for(i = 0; i < dims[2]; i++) { @@ -425,7 +425,7 @@ main(int argc, char *argv[]) { printf("\n"); contig_time = TMsec; - sprintf(time_mess," chunked write %3ld %3ld %3d %3ld %3ld %3ld", + snprintf(time_mess, sizeof(time_mess)," chunked write %3ld %3ld %3d %3ld %3ld %3ld", dims[0], dims[1], 1, chunks[0], chunks[1], chunks[2]); TIMING_START ; for(i = 0; i < dims[2]; i++) { @@ -441,7 +441,7 @@ main(int argc, char *argv[]) { else printf(" %5.2g x slower\n", 1.0/ratio); - sprintf(time_mess," compressed write %3ld %3ld %3d %3ld %3ld %3ld", + snprintf(time_mess, sizeof(time_mess)," compressed write %3ld %3ld %3d %3ld %3ld %3ld", dims[0], dims[1], 1, chunks[0], chunks[1], chunks[2]); TIMING_START ; for(i = 0; i < dims[2]; i++) { @@ -466,7 +466,7 @@ main(int argc, char *argv[]) { count[1] = dims[1]; count[2] = dims[2]; - sprintf(time_mess," contiguous read %3d %3ld %3ld", + snprintf(time_mess, sizeof(time_mess)," contiguous read %3d %3ld %3ld", 1, dims[1], dims[2]); TIMING_START ; for(i = 0; i < dims[0]; i++) { @@ -478,7 +478,7 @@ main(int argc, char *argv[]) { printf("\n"); contig_time = TMsec; - sprintf(time_mess," chunked read %3d %3ld %3ld %3ld %3ld %3ld", + snprintf(time_mess, sizeof(time_mess)," chunked read %3d %3ld %3ld %3ld %3ld %3ld", 1, dims[1], dims[2] , chunks[0], chunks[1], chunks[2]); TIMING_START ; for(i = 0; i < dims[0]; i++) { @@ -494,7 +494,7 @@ main(int argc, char *argv[]) { else printf(" %5.2g x slower\n", 1.0/ratio); - sprintf(time_mess," compressed read %3d %3ld %3ld %3ld %3ld %3ld", + snprintf(time_mess, sizeof(time_mess)," compressed read %3d %3ld %3ld %3ld %3ld %3ld", 1, dims[1], dims[2] , chunks[0], chunks[1], chunks[2]); TIMING_START ; for(i = 0; i < dims[0]; i++) { @@ -519,7 +519,7 @@ main(int argc, char *argv[]) { count[1] = 1; count[2] = dims[2]; - sprintf(time_mess," contiguous read %3ld %3d %3ld", + snprintf(time_mess, sizeof(time_mess)," contiguous read %3ld %3d %3ld", dims[0], 1, dims[2]); TIMING_START ; for(i = 0; i < dims[1]; i++) { @@ -531,7 +531,7 @@ main(int argc, char *argv[]) { printf("\n"); contig_time = TMsec; - sprintf(time_mess," chunked read %3ld %3d %3ld %3ld %3ld %3ld", + snprintf(time_mess, sizeof(time_mess)," chunked read %3ld %3d %3ld %3ld %3ld %3ld", dims[0], 1, dims[2], chunks[0], chunks[1], chunks[2]); TIMING_START ; for(i = 0; i < dims[1]; i++) { @@ -547,7 +547,7 @@ main(int argc, char *argv[]) { else printf(" %5.2g x slower\n", 1.0/ratio); - sprintf(time_mess," compressed read %3ld %3d %3ld %3ld %3ld %3ld", + snprintf(time_mess, sizeof(time_mess)," compressed read %3ld %3d %3ld %3ld %3ld %3ld", dims[0], 1, dims[2], chunks[0], chunks[1], chunks[2]); TIMING_START ; for(i = 0; i < dims[1]; i++) { @@ -572,7 +572,7 @@ main(int argc, char *argv[]) { count[1] = dims[1]; count[2] = 1; - sprintf(time_mess," contiguous read %3ld %3ld %3d", + snprintf(time_mess, sizeof(time_mess)," contiguous read %3ld %3ld %3d", dims[0], dims[1], 1); TIMING_START ; for(i = 0; i < dims[2]; i++) { @@ -584,7 +584,7 @@ main(int argc, char *argv[]) { printf("\n"); contig_time = TMsec; - sprintf(time_mess," chunked read %3ld %3ld %3d %3ld %3ld %3ld", + snprintf(time_mess, sizeof(time_mess)," chunked read %3ld %3ld %3d %3ld %3ld %3ld", dims[0], dims[1], 1, chunks[0], chunks[1], chunks[2]); TIMING_START ; for(i = 0; i < dims[2]; i++) { @@ -600,7 +600,7 @@ main(int argc, char *argv[]) { else printf(" %5.2g x slower\n", 1.0/ratio); - sprintf(time_mess," compressed read %3ld %3ld %3d %3ld %3ld %3ld", + snprintf(time_mess, sizeof(time_mess)," compressed read %3ld %3ld %3d %3ld %3ld %3ld", dims[0], dims[1], 1, chunks[0], chunks[1], chunks[2]); TIMING_START ; for(i = 0; i < dims[2]; i++) { diff --git a/nc_perf/tst_compress.c b/nc_perf/tst_compress.c index 1495ff484..bd3a816cc 100644 --- a/nc_perf/tst_compress.c +++ b/nc_perf/tst_compress.c @@ -282,7 +282,7 @@ write_meta(int ncid, int *data_varid, int s, int f, int nsd, int deflate, int u, { char data_var_name[NC_MAX_NAME + 1]; - sprintf(data_var_name, "var_%d", dv); + snprintf(data_var_name, sizeof(data_var_name), "var_%d", dv); if (nc_redef(ncid)) ERR; if (nc_def_var(ncid, data_var_name, NC_FLOAT, NDIM4, dimid_data, &data_varid[dv])) ERR; @@ -567,7 +567,7 @@ main(int argc, char **argv) /* Use the same filename every time, so we don't * create many large files, just one. ;-) */ - sprintf(file_name, "%s.nc", TEST_NAME); + snprintf(file_name, sizeof(file_name), "%s.nc", TEST_NAME); /* Remove the last file. Ignore errors. */ remove(file_name); diff --git a/nc_perf/tst_compress_par.c b/nc_perf/tst_compress_par.c index 39b769c96..c38b494b1 100644 --- a/nc_perf/tst_compress_par.c +++ b/nc_perf/tst_compress_par.c @@ -290,7 +290,7 @@ write_meta(int ncid, int *data_varid, int s, int f, int nsd, int deflate, int u, { char data_var_name[NC_MAX_NAME + 1]; - sprintf(data_var_name, "var_%d", dv); + snprintf(data_var_name, sizeof(data_var_name), "var_%d", dv); if (nc_redef(ncid)) ERR; if (nc_def_var(ncid, data_var_name, NC_FLOAT, NDIM4, dimid_data, &data_varid[dv])) ERR; @@ -641,7 +641,7 @@ main(int argc, char **argv) /* Use the same filename every time, so we don't * create many large files, just one. ;-) */ - sprintf(file_name, "%s.nc", TEST_NAME); + snprintf(file_name, sizeof(file_name), "%s.nc", TEST_NAME); /* nc_set_log_level(3); */ /* Create a parallel netcdf-4 file. */ diff --git a/nc_perf/tst_create_files.c b/nc_perf/tst_create_files.c index c3fdd8746..753b3979a 100644 --- a/nc_perf/tst_create_files.c +++ b/nc_perf/tst_create_files.c @@ -50,7 +50,7 @@ main(int argc, char **argv) /* User TEMP_LARGE as the directory. */ if (strlen(TEMP_LARGE) + strlen(LARGE_FILE) > NC_MAX_NAME * 2) ERR; - sprintf(file_name, "%s/%s", TEMP_LARGE, LARGE_FILE); + snprintf(file_name, sizeof(file_name), "%s/%s", TEMP_LARGE, LARGE_FILE); /* Create file with 3 dims, one variable. */ if (nc_create(file_name, NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; @@ -171,11 +171,11 @@ main(int argc, char **argv) * dimensions. */ for (ndims = 1; ndims <= MAX_DIMS; ndims++) { - sprintf(file_name, "tst_%s2_%dD.nc", type_name[t], ndims); + snprintf(file_name, sizeof(file_name), "tst_%s2_%dD.nc", type_name[t], ndims); if (nc_create(file_name, 0, &ncid)) ERR; for (len = pow(TOTAL_SIZE, (float)1/ndims), d = 0; d < ndims; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, len, &dimids[d])) ERR; } if (nc_def_var(ncid, VAR_NAME, typeid[t], ndims, dimids, &varid)) ERR; @@ -284,11 +284,11 @@ main(int argc, char **argv) * dimensions. */ for (ndims = 1; ndims <= MAX_DIMS; ndims++) { - sprintf(file_name, "tst_%s2_%dD.nc", type_name[t], ndims); + snprintf(file_name, sizeof(file_name), "tst_%s2_%dD.nc", type_name[t], ndims); if (nc_create(file_name, 0, &ncid)) ERR; for (len = pow(TOTAL_SIZE, (float)1/ndims), d = 0; d < ndims; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, len, &dimids[d])) ERR; } if (nc_def_var(ncid, SIMPLE_VAR_NAME, typeid[t], ndims, dimids, &varid)) ERR; diff --git a/nc_perf/tst_files2.c b/nc_perf/tst_files2.c index ca9c8211a..ccc8580ed 100644 --- a/nc_perf/tst_files2.c +++ b/nc_perf/tst_files2.c @@ -41,7 +41,7 @@ get_mem_used1(int *mem_used) /* Run the ps command for this process, putting output (one number) * into file TMP_FILE_NAME. */ - sprintf(cmd, "ps -o size= %d > %s", getpid(), TMP_FILE_NAME); + snprintf(cmd, sizeof(cmd), "ps -o size= %d > %s", getpid(), TMP_FILE_NAME); system(cmd); /* Read the results and delete temp file. */ @@ -116,7 +116,7 @@ create_sample_file(char *file_name, int ndims, int *dim_len, /* Create the dimensions. */ for (d = 0; d < ndims; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR_RET; } @@ -124,7 +124,7 @@ create_sample_file(char *file_name, int ndims, int *dim_len, if (!(varids = malloc(num_vars * sizeof(int)))) ERR_RET; for (i = 0; i < num_vars; i++) { - sprintf(varname, "a_%d", i); + snprintf(varname, sizeof(varname), "a_%d", i); if (nc_def_var(ncid, varname, NC_FLOAT, ndims, dimids, &varids[i])) ERR_RET; } @@ -218,7 +218,7 @@ main(int argc, char **argv) for (f = 0; f < num_files[t]; f++) { /* Set up filename. */ - sprintf(file_name[t], "tst_files2_%d_%d.nc", t, f); + snprintf(file_name[t], sizeof(file_name[t]), "tst_files2_%d_%d.nc", t, f); if (create_sample_file(file_name[t], ndims[t], dim_len[t], num_vars[t], mode[t], num_recs[t])) ERR; @@ -273,20 +273,20 @@ main(int argc, char **argv) /* Prepare the dimensions string. */ if (ndims[t] == MAX_DIMS) - sprintf(dimstr, "%dx%dx%dx%d", dim_len[t][0], dim_len[t][1], + snprintf(dimstr, sizeof(dimstr), "%dx%dx%dx%d", dim_len[t][0], dim_len[t][1], dim_len[t][2], dim_len[t][3]); else - sprintf(dimstr, "%dx%dx%d", dim_len[t][0], dim_len[t][1], + snprintf(dimstr, sizeof(dimstr), "%dx%dx%d", dim_len[t][0], dim_len[t][1], dim_len[t][2]); /* Prepare the chunksize string. */ if (storage == NC_CHUNKED) { if (ndims[t] == MAX_DIMS) - sprintf(chunkstr, "%dx%dx%dx%d", (int)chunksize[0], (int)chunksize[1], + snprintf(chunkstr, sizeof(chunkstr), "%dx%dx%dx%d", (int)chunksize[0], (int)chunksize[1], (int)chunksize[2], (int)chunksize[3]); else - sprintf(chunkstr, "%dx%dx%d", (int)chunksize[0], (int)chunksize[1], + snprintf(chunkstr, sizeof(chunkstr), "%dx%dx%d", (int)chunksize[0], (int)chunksize[1], (int)chunksize[2]); } else diff --git a/nc_perf/tst_h_many_atts.c b/nc_perf/tst_h_many_atts.c index f484c4310..f5cd1f412 100644 --- a/nc_perf/tst_h_many_atts.c +++ b/nc_perf/tst_h_many_atts.c @@ -58,7 +58,7 @@ main() if ((spaceid = H5Screate_simple(1, dims, NULL)) < 0) ERR; for (i = 0; i < NUM_ATTS; i++) { - sprintf(name, "att_%d", i); + snprintf(name, sizeof(name), "att_%d", i); if ((attid1 = H5Acreate2(grpid, name, H5T_NATIVE_INT, spaceid, H5P_DEFAULT, H5P_DEFAULT)) < 0) ERR; if (H5Awrite(attid1, H5T_NATIVE_INT, &one) < 0) ERR; diff --git a/nc_perf/tst_wrf_reads.c b/nc_perf/tst_wrf_reads.c index e38805fb2..34d998f03 100644 --- a/nc_perf/tst_wrf_reads.c +++ b/nc_perf/tst_wrf_reads.c @@ -26190,7 +26190,7 @@ main(int argc, char **argv) char file_name[NC_MAX_NAME + 1]; nc_set_log_level(4); - sprintf(file_name, "%s_wrf_chem_%d.nc", FILE_NAME, i); + snprintf(file_name, sizeof(file_name), "%s_wrf_chem_%d.nc", FILE_NAME, i); run_test(2, file_name, cmode[c], &open_time, &create_time, &close_time); remove(file_name); } @@ -26214,7 +26214,7 @@ main(int argc, char **argv) /* char file_name[NC_MAX_NAME + 1]; */ /* nc_set_log_level(4); */ - /* sprintf(file_name, "%s_%d.nc", FILE_NAME, i); */ + /* snprintf(file_name, sizeof(file_name), "%s_%d.nc", FILE_NAME, i); */ /* run_test(0, file_name, cmode[c], &open_time, &create_time, &close_time); */ /* remove(file_name); */ /* } */ @@ -26237,7 +26237,7 @@ main(int argc, char **argv) /* char file_name[NC_MAX_NAME + 1]; */ /* nc_set_log_level(4); */ - /* sprintf(file_name, "%s_%d.nc", FILE_NAME, i); */ + /* snprintf(file_name, sizeof(file_name), "%s_%d.nc", FILE_NAME, i); */ /* run_test(1, file_name, cmode[c], &open_time, &create_time, &close_time); */ /* remove(file_name); */ /* } */ diff --git a/nc_test/large_files.c b/nc_test/large_files.c index 114fa3d2f..ec4f1f088 100644 --- a/nc_test/large_files.c +++ b/nc_test/large_files.c @@ -72,7 +72,7 @@ main(int argc, char **argv) { printf("\n*** Testing large files, slowly.\n"); - sprintf(file_name, "%s/%s", TEMP_LARGE, FILE_NAME); + snprintf(file_name, sizeof(file_name), "%s/%s", TEMP_LARGE, FILE_NAME); printf("*** Creating large file %s...", file_name); /* enter define mode */ diff --git a/nc_test/quick_large_files.c b/nc_test/quick_large_files.c index 756a6faa6..7d2e385de 100644 --- a/nc_test/quick_large_files.c +++ b/nc_test/quick_large_files.c @@ -65,7 +65,7 @@ main(int argc, char **argv) } /* Create a netCDF 64-bit offset format file. Write a value. */ - sprintf(file_name, "%s/%s", TEMP_LARGE, FILE_NAME); + snprintf(file_name, sizeof(file_name), "%s/%s", TEMP_LARGE, FILE_NAME); printf("*** Creating %s for 64-bit offset large file test...", file_name); { if ((res = nc_create(file_name, cflag|NC_64BIT_OFFSET, &ncid))) diff --git a/nc_test/testnc3perf.c b/nc_test/testnc3perf.c index 3f97c3f29..b4f0a8a87 100644 --- a/nc_test/testnc3perf.c +++ b/nc_test/testnc3perf.c @@ -298,7 +298,7 @@ test_slabs(ncid, sizes) edge[idim] = dims[idim].size; } - sprintf(time_mess,"ncvarput %ldx%ldx%ldx%ld", + snprintf(time_mess, sizeof(time_mess),"ncvarput %ldx%ldx%ldx%ld", edge[0], edge[1], edge[2], edge[3]); TIMING_START ; @@ -321,7 +321,7 @@ test_slabs(ncid, sizes) point[idim] = corner[idim]; } - sprintf(time_mess,"ncvarget %ldx%ldx%ldx%ld" + snprintf(time_mess, sizeof(time_mess),"ncvarget %ldx%ldx%ldx%ld" ,edge[0],edge[1],edge[2],edge[3]); TIMING_START ; @@ -343,7 +343,7 @@ test_slabs(ncid, sizes) corner[idim] = 0; /* get vector along dimension idim */ edge[idim] = dims[idim].size; - sprintf(time_mess,"ncvarget %ldx%ldx%ldx%ld" + snprintf(time_mess, sizeof(time_mess),"ncvarget %ldx%ldx%ldx%ld" ,edge[0],edge[1],edge[2],edge[3]); TIMING_START ; @@ -372,7 +372,7 @@ test_slabs(ncid, sizes) edge[idim] = dims[idim].size; edge[jdim] = dims[jdim].size; - sprintf(time_mess,"ncvarget %ldx%ldx%ldx%ld" + snprintf(time_mess, sizeof(time_mess),"ncvarget %ldx%ldx%ldx%ld" ,edge[0],edge[1],edge[2],edge[3]); TIMING_START ; @@ -411,7 +411,7 @@ test_slabs(ncid, sizes) edge[jdim] = dims[jdim].size; edge[kdim] = dims[kdim].size; - sprintf(time_mess,"ncvarget %ldx%ldx%ldx%ld" + snprintf(time_mess, sizeof(time_mess),"ncvarget %ldx%ldx%ldx%ld" ,edge[0],edge[1],edge[2],edge[3]); TIMING_START ; @@ -447,7 +447,7 @@ test_slabs(ncid, sizes) edge[idim] = dims[idim].size; } - sprintf(time_mess,"ncvarget %ldx%ldx%ldx%ld" + snprintf(time_mess, sizeof(time_mess),"ncvarget %ldx%ldx%ldx%ld" ,edge[0],edge[1],edge[2],edge[3]); TIMING_START ; diff --git a/nc_test/tst_addvar.c b/nc_test/tst_addvar.c index bde8bba25..01d6100b3 100644 --- a/nc_test/tst_addvar.c +++ b/nc_test/tst_addvar.c @@ -74,7 +74,7 @@ int main(int argc, char** argv) { for (i=0; i<3; i++) { char varname[32]; - sprintf(varname, "fixed_var_%d",2*i+1); + snprintf(varname, sizeof(varname), "fixed_var_%d",2*i+1); for (j=0; j<5; j++) { if (get_buf[i][j] != old_buf[i][j]) { printf("Error in %s line %d: expecting %s[%d]=%d but got %d\n", diff --git a/nc_test/tst_big_rvar.c b/nc_test/tst_big_rvar.c index dd885120a..5df0079f7 100644 --- a/nc_test/tst_big_rvar.c +++ b/nc_test/tst_big_rvar.c @@ -112,7 +112,7 @@ main(int argc, char **argv) { char testfile[NC_MAX_NAME + 1]; printf("\n*** Testing files with multidimensional variable with more than 2**32 values\n"); - sprintf(testfile, "%s/%s", TEMP_LARGE, FILE_NAME); + snprintf(testfile, sizeof(testfile), "%s/%s", TEMP_LARGE, FILE_NAME); for (i = NC_FORMAT_CLASSIC; i <= NUM_FORMATS; i++) { printf("*** testing format %d file with record variable with > 2**32 values...", i); diff --git a/nc_test/tst_big_var.c b/nc_test/tst_big_var.c index 98dc8dfc6..d5734ab07 100644 --- a/nc_test/tst_big_var.c +++ b/nc_test/tst_big_var.c @@ -70,7 +70,7 @@ main(int argc, char **argv) { char testfile[NC_MAX_NAME + 1]; printf("\n*** Testing files with one very big variable.\n"); - sprintf(testfile, "%s/%s", TEMP_LARGE, FILE_NAME); + snprintf(testfile, sizeof(testfile), "%s/%s", TEMP_LARGE, FILE_NAME); for (i = NC_FORMAT_CLASSIC; i <= NUM_FORMATS; i++) { printf("*** testing format %d file with byte variable with > 2**32 values...", i); diff --git a/nc_test/tst_big_var2.c b/nc_test/tst_big_var2.c index f3c2cf316..78c36bbfb 100644 --- a/nc_test/tst_big_var2.c +++ b/nc_test/tst_big_var2.c @@ -121,7 +121,7 @@ main(int argc, char **argv) { char testfile[NC_MAX_NAME + 1]; printf("\n*** Testing multidimensional variable with more than 2**32 values\n"); - sprintf(testfile, "%s/%s", TEMP_LARGE, FILE_NAME); + snprintf(testfile, sizeof(testfile), "%s/%s", TEMP_LARGE, FILE_NAME); for (i = NC_FORMAT_CLASSIC; i <= NUM_FORMATS; i++) { printf("*** testing format %d file with byte variable with > 2**32 values...", i); diff --git a/nc_test/tst_big_var6.c b/nc_test/tst_big_var6.c index b237a5031..ad85ede91 100644 --- a/nc_test/tst_big_var6.c +++ b/nc_test/tst_big_var6.c @@ -102,7 +102,7 @@ main(int argc, char **argv) { char testfile[NC_MAX_NAME + 1]; printf("\n*** Testing multidimensional variable with more than 2**32 values\n"); - sprintf(testfile, "%s/%s", TEMP_LARGE, FILE_NAME); + snprintf(testfile, sizeof(testfile), "%s/%s", TEMP_LARGE, FILE_NAME); for (i = NC_FORMAT_CLASSIC; i <= NUM_FORMATS; i++) { printf("*** testing format %d file with short variable with > 2**32 values...", i); diff --git a/nc_test/tst_cdf5format.c b/nc_test/tst_cdf5format.c index f5162ab78..68ebf9306 100644 --- a/nc_test/tst_cdf5format.c +++ b/nc_test/tst_cdf5format.c @@ -35,12 +35,12 @@ write2(int ncid, int parallel) { if (i % 2) { - sprintf(str, "fixed_var_%d",i); + snprintf(str, sizeof(str), "fixed_var_%d",i); if (nc_def_var(ncid, str, NC_INT, 1, &dimid[1], &varid[i])) ERR; } else { - sprintf(str, "record_var_%d",i); + snprintf(str, sizeof(str), "record_var_%d",i); if (nc_def_var(ncid, str, NC_INT, 2, dimid, &varid[i])) ERR; } } @@ -86,7 +86,7 @@ extend(int ncid) /* add attributes to make header grow */ for (i = 0; i < NVARS; i++) { - sprintf(str, "annotation_for_var_%d", i); + snprintf(str, sizeof(str), "annotation_for_var_%d", i); if (nc_put_att_text(ncid, i, "text_attr", strlen(str), str)) ERR; } if (nc_enddef(ncid)) ERR; diff --git a/nc_test/tst_diskless3.c b/nc_test/tst_diskless3.c index 2c428f33c..31765fa95 100644 --- a/nc_test/tst_diskless3.c +++ b/nc_test/tst_diskless3.c @@ -133,7 +133,7 @@ test_two_growing_with_att(const char *testfile) { count[0] = 1; start[0] = r; - sprintf(att_name, "a_%d", data[r]); + snprintf(att_name, sizeof(att_name), "a_%d", data[r]); for (v = 0; v < NUM_VARS; v++) { if((status=nc_put_vara_text(ncid, varid[v], start, count, &data[r]))) ERRSTAT(status); diff --git a/nc_test/tst_diskless4.c b/nc_test/tst_diskless4.c index be667fe74..8519f87b9 100644 --- a/nc_test/tst_diskless4.c +++ b/nc_test/tst_diskless4.c @@ -124,7 +124,7 @@ main(int argc, char **argv) for(iv=0;iv 0) { /* system error */ const char *cp = (const char *) strerror(err); if (cp == NULL) - sprintf(unknown_str,"Unknown error code %d",err); + snprintf(unknown_str,sizeof(unknown_str),"Unknown error code %d",err); else - sprintf(unknown_str,"Error code %d (%s)",err,cp); + snprintf(unknown_str,sizeof(unknown_str),"Error code %d (%s)",err,cp); return unknown_str; } @@ -1396,7 +1396,7 @@ char* nc_err_code_name(int err) #endif #endif default: - sprintf(unknown_str,"Unknown code %d",err); + snprintf(unknown_str,sizeof(unknown_str),"Unknown code %d",err); } return unknown_str; } diff --git a/nc_test4/tst_atts2.c b/nc_test4/tst_atts2.c index eb3201511..700e34ff6 100644 --- a/nc_test4/tst_atts2.c +++ b/nc_test4/tst_atts2.c @@ -133,7 +133,7 @@ main(int argc, char **argv) if (nc_create(FILE_NAME1, NC_NETCDF4, &ncid1)) ERR; for (a = 0; a < NUM_ATT; a++) { - sprintf(name[a], "atomic_att_type_%d", a + 1); + snprintf(name[a], sizeof(name[a]), "atomic_att_type_%d", a + 1); nc_put_att(ncid1, NC_GLOBAL, name[a], a + 1, ATT_LEN, (void *)&data); } diff --git a/nc_test4/tst_chunks.c b/nc_test4/tst_chunks.c index 1391f1eab..280c64402 100644 --- a/nc_test4/tst_chunks.c +++ b/nc_test4/tst_chunks.c @@ -90,7 +90,7 @@ main(int argc, char **argv) if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; for (d = 0; d < NUM_DIM; d++) { - sprintf(dim_name, "dim_%d", dim_len[d]); + snprintf(dim_name, sizeof(dim_name), "dim_%d", dim_len[d]); #ifdef PRINT_DEFAULT_CHUNKSIZE_TABLE printf("creating dim %s\n", dim_name); #endif @@ -99,7 +99,7 @@ main(int argc, char **argv) for (t = 0; t < NUM_TYPE; t++) { - sprintf(var_name, "var_%d", type_id[t]); + snprintf(var_name, sizeof(var_name), "var_%d", type_id[t]); if (nc_def_var(ncid, var_name, type_id[t], NUM_DIM, dimid, &varid[t])) ERR; if (nc_inq_var_chunking(ncid, varid[t], &contig, chunksize_in)) ERR; #ifdef PRINT_DEFAULT_CHUNKSIZE_TABLE @@ -120,7 +120,7 @@ main(int argc, char **argv) for (t = 0; t < NUM_TYPE; t++) { - sprintf(var_name, "var_%d", type_id[t]); + snprintf(var_name, sizeof(var_name), "var_%d", type_id[t]); if (nc_inq_var_chunking(ncid, varid[t], &contig, chunksize_in)) ERR; if (contig) ERR; #ifdef PRINT_DEFAULT_CHUNKSIZE_TABLE @@ -216,7 +216,7 @@ main(int argc, char **argv) /* Oh that tricky Cardinal Richelieu, he had many plans! */ for (i = 0; i < NUM_PLANS; i++) { - sprintf(plan_name, "Richelieu_sneaky_plan_%d", i); + snprintf(plan_name, sizeof(plan_name), "Richelieu_sneaky_plan_%d", i); if (nc_def_var(ncid, plan_name, i % (NC_STRING - 1) + 1, NDIMS_3, dimids, &varid[i])) ERR; if (i % 2 && nc_def_var_chunking(ncid, varid[i], 0, chunksize)) ERR; diff --git a/nc_test4/tst_chunks2.c b/nc_test4/tst_chunks2.c index 0499d6f39..3970ff243 100644 --- a/nc_test4/tst_chunks2.c +++ b/nc_test4/tst_chunks2.c @@ -161,7 +161,7 @@ main(int argc, char **argv) /* Create a few dimensions. */ for (d = 0; d < NDIMS3; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } @@ -199,7 +199,7 @@ main(int argc, char **argv) /* Create a few dimensions. */ for (d = 0; d < NDIMS3; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } @@ -237,7 +237,7 @@ main(int argc, char **argv) /* Create a few dimensions. */ for (d = 0; d < NDIMS3; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } @@ -278,7 +278,7 @@ main(int argc, char **argv) /* Create a few dimensions. */ for (d = 0; d < NDIMS3; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } @@ -318,7 +318,7 @@ main(int argc, char **argv) /* Create a few dimensions. */ for (d = 0; d < NDIMS3; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } @@ -360,7 +360,7 @@ main(int argc, char **argv) for (d = 0; d < NDIMS3; d++) { dim_len[d] = rand(); - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } @@ -399,7 +399,7 @@ main(int argc, char **argv) /* Create a few dimensions. */ for (d = 0; d < NDIMS3; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } @@ -438,7 +438,7 @@ main(int argc, char **argv) /* Create a few dimensions. */ for (d = 0; d < NDIMS3; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } diff --git a/nc_test4/tst_compounds.c b/nc_test4/tst_compounds.c index 731ed8bc4..a2c6da7de 100644 --- a/nc_test4/tst_compounds.c +++ b/nc_test4/tst_compounds.c @@ -545,7 +545,7 @@ main(int argc, char **argv) /* hr data */ hr_data_out[i].starfleet_id = i; hr_data_out[i].svc_rec = data[i]; - if (sprintf(hr_data_out[i].name, "alien_%d", i) < 0) ERR; + if (snprintf(hr_data_out[i].name, sizeof(hr_data_out[i].name), "alien_%d", i) < 0) ERR; hr_data_out[i].max_temp = 99.99f; hr_data_out[i].min_temp = -9.99f; hr_data_out[i].percent_transporter_errosion = .030303; @@ -862,7 +862,7 @@ main(int argc, char **argv) /* Create some phony data. */ for (i = 0; i < DIM1_LEN; i++) { - if (sprintf(hr_data_out[i].name, "alien_%d", i) < 0) ERR; + if (snprintf(hr_data_out[i].name, sizeof(hr_data_out[i].name), "alien_%d", i) < 0) ERR; hr_data_out[i].max_temp = 99.99f; } diff --git a/nc_test4/tst_compounds3.c b/nc_test4/tst_compounds3.c index d388658bb..ce4a495d4 100644 --- a/nc_test4/tst_compounds3.c +++ b/nc_test4/tst_compounds3.c @@ -173,11 +173,11 @@ main(int argc, char **argv) if (strcmp(name_in, TYPE2_NAME) || size_in != sizeof(g2_d_t)) ERR; /* This fails because it's not a fully-qualified name. */ - sprintf(full_name, "%s/%s", GROUP2_NAME, TYPE2_NAME); + snprintf(full_name, sizeof(full_name), "%s/%s", GROUP2_NAME, TYPE2_NAME); if (nc_inq_typeid(root_grp, full_name, &type2id) != NC_EINVAL) ERR; /* Check the type using it's full name. */ - sprintf(full_name, "/%s/%s", GROUP2_NAME, TYPE2_NAME); + snprintf(full_name, sizeof(full_name), "/%s/%s", GROUP2_NAME, TYPE2_NAME); /* if (nc_inq_typeid(root_grp, full_name, &type2id)) ERR; */ /* if (nc_inq_type(g2_grp, type2id, name_in, &size_in)) ERR; */ /* if (strcmp(name_in, TYPE2_NAME) || size_in != sizeof(g2_d_t)) ERR; */ diff --git a/nc_test4/tst_dims2.c b/nc_test4/tst_dims2.c index 5237d29c7..0af77d72b 100644 --- a/nc_test4/tst_dims2.c +++ b/nc_test4/tst_dims2.c @@ -433,7 +433,7 @@ main(int argc, char **argv) { char dim_name[NC_MAX_NAME + 1]; - sprintf(dim_name, "dim_%d", i); + snprintf(dim_name, sizeof(dim_name), "dim_%d", i); if (nc_def_dim(ncid, dim_name, 1, &dimids[i])) ERR; } diff --git a/nc_test4/tst_files.c b/nc_test4/tst_files.c index f2ad31bed..2a8417166 100644 --- a/nc_test4/tst_files.c +++ b/nc_test4/tst_files.c @@ -329,7 +329,7 @@ main(int argc, char **argv) /* Create a bunch of files. */ for (f = 0; f < NUM_FILES; f++) { - sprintf(file_name, "tst_files2_%d.nc", f); + snprintf(file_name, sizeof(file_name), "tst_files2_%d.nc", f); if (nc_create(file_name, NC_NETCDF4, &ncid[f])) ERR; if (nc_def_dim(ncid[f], D1_NAME, TEXT_LEN + 1, &dimid)) ERR; if (nc_def_var(ncid[f], VAR_NAME, NC_CHAR, NDIMS, &dimid, &varid)) ERR; diff --git a/nc_test4/tst_grps.c b/nc_test4/tst_grps.c index 9224c96df..30f60de15 100644 --- a/nc_test4/tst_grps.c +++ b/nc_test4/tst_grps.c @@ -1186,11 +1186,11 @@ main(int argc, char **argv) if (nc_create(FILE_NAME, NC_CLOBBER | NC_NETCDF4, &ncid)) ERR; for (g = 0; g < PARENT_NUM_GRPS; g++) { - sprintf(grp_name, "grp_%d", g); + snprintf(grp_name, sizeof(grp_name), "grp_%d", g); if (nc_def_grp(ncid, grp_name, &g1id)) ERR; for (s = 0; s < SUB_NUM_GRPS; s++) { - sprintf(grp_name, "sub_grp_%d", s); + snprintf(grp_name, sizeof(grp_name), "sub_grp_%d", s); if (nc_def_grp(g1id, grp_name, &sub_grpid)) ERR; } } diff --git a/nc_test4/tst_interops4.c b/nc_test4/tst_interops4.c index 535a80e4f..22fa42951 100644 --- a/nc_test4/tst_interops4.c +++ b/nc_test4/tst_interops4.c @@ -29,7 +29,7 @@ write_atts(int ncid, int varid) for (a = 0; a < NUM_ATTS; a++) { - sprintf(att_name, "att_%d", a); + snprintf(att_name, sizeof(att_name), "att_%d", a); if (nc_put_att_int(ncid, varid, att_name, NC_INT, ATT_LEN, att_data)) ERR_RET; } @@ -45,7 +45,7 @@ read_atts(int ncid, int varid) for (a = 0; a < NUM_ATTS; a++) { - sprintf(att_name, "att_%d", a); + snprintf(att_name, sizeof(att_name), "att_%d", a); if (nc_get_att_int(ncid, varid, att_name, att_data_in)) ERR_RET; for (i = 0; i < ATT_LEN; i++) @@ -67,7 +67,7 @@ write_vars(int ncid) if (nc_def_dim(ncid, DIM_NAME, VAR_LEN, NULL)) ERR; for (v = 0; v < NUM_VARS; v++) { - sprintf(var_name, "var_%d", v); + snprintf(var_name, sizeof(var_name), "var_%d", v); if (nc_def_var(ncid, var_name, NC_INT, NUM_DIMS, dimid, NULL)) ERR_RET; write_atts(ncid, v); @@ -89,7 +89,7 @@ read_vars(int ncid) { if (nc_inq_var(ncid, v, var_name_in, &xtype_in, &ndims_in, NULL, &natts_in)) ERR_RET; - sprintf(var_name, "var_%d", v); + snprintf(var_name, sizeof(var_name), "var_%d", v); if (strcmp(var_name, var_name_in) || xtype_in != NC_INT || ndims_in != NUM_DIMS || natts_in != NUM_ATTS) ERR_RET; read_atts(ncid, v); diff --git a/nc_test4/tst_interops5.c b/nc_test4/tst_interops5.c index d696eb09a..39ec19520 100644 --- a/nc_test4/tst_interops5.c +++ b/nc_test4/tst_interops5.c @@ -99,11 +99,11 @@ main(int argc, char **argv) if (H5Sclose(ydimSpaceId) < 0) ERR; /* Create xdim scale */ - sprintf(dimNameBuf, "%s%10d", dimNameBase, nrowCur); + snprintf(dimNameBuf, sizeof(dimNameBuf), "%s%10d", dimNameBase, nrowCur); if (H5DSset_scale(xdimId, dimNameBuf) < 0) ERR; /* Create ydim scale */ - sprintf(dimNameBuf, "%s%10d", dimNameBase, ncolCur); + snprintf(dimNameBuf, sizeof(dimNameBuf), "%s%10d", dimNameBase, ncolCur); if (H5DSset_scale(ydimId, dimNameBuf) < 0) ERR; /* Attach dimension scales to the dataset */ diff --git a/nc_test4/tst_large2.c b/nc_test4/tst_large2.c index 55fea5ec9..2c0c849c2 100644 --- a/nc_test4/tst_large2.c +++ b/nc_test4/tst_large2.c @@ -50,7 +50,7 @@ int main(int argc, char **argv) for (f = 0; f < NUM_FORMATS; f++) { printf("\t...testing with %s\n", format_name[f]); - sprintf(file_name, "%s/%s", TEMP_LARGE, FILE_NAME); + snprintf(file_name, sizeof(file_name), "%s/%s", TEMP_LARGE, FILE_NAME); if (nc_create(file_name, this_format[f], &ncid)) ERR; if (nc_def_dim(ncid, "lat", LAT_LEN, &dimids[1])) ERR; if (nc_def_dim(ncid, "lon", LON_LEN, &dimids[2])) ERR; diff --git a/nc_test4/tst_large3.c b/nc_test4/tst_large3.c index 296f68d32..5bea1478a 100644 --- a/nc_test4/tst_large3.c +++ b/nc_test4/tst_large3.c @@ -59,7 +59,7 @@ main(int argc, char **argv) int i; /* Create a netCDF netCDF-4/HDF5 format file, with 4 vars. */ - sprintf(file_name, "%s/%s", TEMP_LARGE, FILE_NAME); + snprintf(file_name, sizeof(file_name), "%s/%s", TEMP_LARGE, FILE_NAME); if (nc_create(file_name, NC_NETCDF4, &ncid)) ERR; if (nc_set_fill(ncid, NC_NOFILL, NULL)) ERR; if (nc_def_dim(ncid, DIM_NAME, QTR_CLASSIC_MAX, dimids)) ERR; diff --git a/nc_test4/tst_large5.c b/nc_test4/tst_large5.c index 2b3eaf824..20ff0447c 100644 --- a/nc_test4/tst_large5.c +++ b/nc_test4/tst_large5.c @@ -92,7 +92,7 @@ main(int argc, char **argv) for (f = 0; f < NUM_FORMATS; f++) { printf("\t...testing with %s\n", format_name[f]); - sprintf(file_name, "%s/%s", TEMP_LARGE, FILE_NAME); + snprintf(file_name, sizeof(file_name), "%s/%s", TEMP_LARGE, FILE_NAME); if (nc_create(file_name, this_format[f], &ncid)) ERR; if (nc_def_dim(ncid, "lat", LAT_LEN, &dimids[1])) ERR; if (nc_def_dim(ncid, "lon", LON_LEN, &dimids[2])) ERR; diff --git a/nc_test4/tst_nc4perf.c b/nc_test4/tst_nc4perf.c index af39e2094..ded16c908 100644 --- a/nc_test4/tst_nc4perf.c +++ b/nc_test4/tst_nc4perf.c @@ -53,7 +53,7 @@ int test_pio_2d(size_t cache_size, int access_flag, MPI_Comm comm, data[j * DIMSIZE1 / mpi_size + i] = (float)mpi_rank * (j + 1); /* Get the file name. */ - sprintf(file_name, "%s/%s", TEMP_LARGE, FILENAME); + snprintf(file_name, sizeof(file_name), "%s/%s", TEMP_LARGE, FILENAME); /* Set the cache size. */ if (nc_get_chunk_cache(NULL, &nelems_in, &preemption_in)) ERR; @@ -114,7 +114,7 @@ int test_pio_2d(size_t cache_size, int access_flag, MPI_Comm comm, /* What was our chunking? */ if (chunk_size[0]) - sprintf(chunk_string, "%dx%d ", (int)chunk_size[0], (int)chunk_size[1]); + snprintf(chunk_string, sizeof(chunk_string), "%dx%d ", (int)chunk_size[0], (int)chunk_size[1]); else strcat(chunk_string, "contiguous"); @@ -162,7 +162,7 @@ int test_pio_4d(size_t cache_size, int access_flag, MPI_Comm comm, } /* Get the file name. */ - sprintf(file_name, "%s/%s", TEMP_LARGE, FILENAME); + snprintf(file_name, sizeof(file_name), "%s/%s", TEMP_LARGE, FILENAME); /* Set the cache size. */ if (nc_get_chunk_cache(NULL, &nelems_in, &preemption_in)) ERR; @@ -226,7 +226,7 @@ int test_pio_4d(size_t cache_size, int access_flag, MPI_Comm comm, /* What was our chunking? */ if (chunk_size[0]) - sprintf(chunk_string, "%dx%dx%dx%d", (int)chunk_size[0], (int)chunk_size[1], + snprintf(chunk_string, sizeof(chunk_string), "%dx%dx%dx%d", (int)chunk_size[0], (int)chunk_size[1], (int)chunk_size[2], (int)chunk_size[3]); else strcat(chunk_string, "contiguous"); diff --git a/nc_test4/tst_parallel.c b/nc_test4/tst_parallel.c index ced8b7051..25cf4a55f 100644 --- a/nc_test4/tst_parallel.c +++ b/nc_test4/tst_parallel.c @@ -92,7 +92,7 @@ main(int argc, char **argv) /* Create a parallel netcdf-4 file. */ /*nc_set_log_level(3);*/ - sprintf(file_name, "%s/%s", TEMP_LARGE, FILE); + snprintf(file_name, sizeof(file_name), "%s/%s", TEMP_LARGE, FILE); if ((res = nc_create_par(file_name, NC_NETCDF4, comm, info, &ncid))) ERR; diff --git a/nc_test4/tst_parallel3.c b/nc_test4/tst_parallel3.c index 17f5e0bde..4d711bc9b 100644 --- a/nc_test4/tst_parallel3.c +++ b/nc_test4/tst_parallel3.c @@ -83,7 +83,7 @@ int main(int argc, char **argv) facc_type_open = 0; /* Create file name. */ - sprintf(file_name, "%s/%s", TEMP_LARGE, FILE_NAME); + snprintf(file_name, sizeof(file_name), "%s/%s", TEMP_LARGE, FILE_NAME); /* Test NetCDF4 with MPI-IO driver */ if (mpi_rank == 0) diff --git a/nc_test4/tst_parallel4.c b/nc_test4/tst_parallel4.c index b2e8df264..7ea3c78d4 100644 --- a/nc_test4/tst_parallel4.c +++ b/nc_test4/tst_parallel4.c @@ -106,7 +106,7 @@ main(int argc, char **argv) #endif /* USE_MPE */ /* Create a parallel netcdf-4 file. */ - sprintf(file_name, "%s/%s", TEMP_LARGE, FILE_NAME); + snprintf(file_name, sizeof(file_name), "%s/%s", TEMP_LARGE, FILE_NAME); if (nc_create_par(file_name, NC_NETCDF4, comm, info, &ncid)) ERR; /* A global attribute holds the number of processors that created diff --git a/nc_test4/tst_parallel_zlib.c b/nc_test4/tst_parallel_zlib.c index 6e99234e8..f60a7e067 100644 --- a/nc_test4/tst_parallel_zlib.c +++ b/nc_test4/tst_parallel_zlib.c @@ -103,8 +103,8 @@ main(int argc, char **argv) /* Create a parallel netcdf-4 file. */ /*nc_set_log_level(3);*/ - /* sprintf(file_name, "%s/%s", TEMP_LARGE, FILE); */ - sprintf(file_name, "%s", FILE); + /* snprintf(file_name, sizeof(file_name), "%s/%s", TEMP_LARGE, FILE); */ + snprintf(file_name, sizeof(file_name), "%s", FILE); if ((res = nc_create_par(file_name, NC_NETCDF4, comm, info, &ncid))) ERR; /* Create three dimensions. */ diff --git a/nc_test4/tst_quantize.c b/nc_test4/tst_quantize.c index eb43c3043..c2694e7a9 100644 --- a/nc_test4/tst_quantize.c +++ b/nc_test4/tst_quantize.c @@ -54,7 +54,7 @@ pf(float myf) uint32_t u; } fu; fu.f = myf; - sprintf(pf_str, "0x%x", fu.u); + snprintf(pf_str, sizeof(pf_str), "0x%x", fu.u); return pf_str; } @@ -67,7 +67,7 @@ pd(double myd) uint64_t u; } du; du.d = myd; - sprintf(pf_str, "0x%llx", (unsigned long long)du.u); + snprintf(pf_str, sizeof(pf_str), "0x%llx", (unsigned long long)du.u); return pf_str; } @@ -239,7 +239,7 @@ main(int argc, char **argv) printf("\t\t**** testing quantize algorithm %d...\n", quantize_mode[q]); for (t = 0; t < NTYPES; t++) { - sprintf(file_name, "%s_quantize_%d_type_%d.nc", TEST, quantize_mode[q], xtype[t]); + snprintf(file_name, sizeof(file_name), "%s_quantize_%d_type_%d.nc", TEST, quantize_mode[q], xtype[t]); #ifdef TESTNCZARR { char url[NC_MAX_FILENAME + 1]; diff --git a/nc_test4/tst_quantize_par.c b/nc_test4/tst_quantize_par.c index 9aad7c0a9..efc0d87c8 100644 --- a/nc_test4/tst_quantize_par.c +++ b/nc_test4/tst_quantize_par.c @@ -50,7 +50,7 @@ pf(float myf) uint32_t u; } fu; fu.f = myf; - sprintf(pf_str, "0x%x", fu.u); + snprintf(pf_str, sizeof(pf_str), "0x%x", fu.u); return pf_str; } @@ -63,7 +63,7 @@ pd(double myd) uint64_t u; } du; du.d = myd; - sprintf(pf_str, "0x%lx", du.u); + snprintf(pf_str, sizeof(pf_str), "0x%lx", du.u); return pf_str; } diff --git a/nc_test4/tst_rename2.c b/nc_test4/tst_rename2.c index a86f7ffb1..c366363fa 100644 --- a/nc_test4/tst_rename2.c +++ b/nc_test4/tst_rename2.c @@ -62,7 +62,7 @@ main(int argc, char **argv) for (enddef_setting = 0; enddef_setting < NUM_ENDDEF_SETTINGS; enddef_setting++) { - sprintf(filename, "%s_%d_%d.nc", TEST_NAME, formats[format], + snprintf(filename, sizeof(filename), "%s_%d_%d.nc", TEST_NAME, formats[format], enddef_setting); /* Create file with three dims. */ @@ -110,7 +110,7 @@ main(int argc, char **argv) if (nc_set_default_format(formats[format], NULL)) ERR; - sprintf(filename, "%s_data_%d.nc", TEST_NAME, formats[format]); + snprintf(filename, sizeof(filename), "%s_data_%d.nc", TEST_NAME, formats[format]); /* Create file with three dims. */ if (nc_create(filename, 0, &ncid)) ERR; @@ -168,7 +168,7 @@ main(int argc, char **argv) char name[NC_MAX_NAME + 1]; /* Create file with dim and associated coordinate var. */ - sprintf(file_name, "%s_sync.nc", TEST_NAME); + snprintf(file_name, sizeof(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_END, DIM1_LEN, &dimid)) ERR; if (nc_def_var(ncid, DIM_NAME_END, NC_INT, NDIM1, &dimid, &varid)) ERR; @@ -201,7 +201,7 @@ main(int argc, char **argv) char name[NC_MAX_NAME + 1]; /* Create file with dim and associated coordinate var. */ - sprintf(file_name, "%s_sync.nc", TEST_NAME); + snprintf(file_name, sizeof(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; @@ -244,7 +244,7 @@ main(int argc, char **argv) char file_name[NC_MAX_NAME + 1]; /* Create file with dim and associated coordinate var. */ - sprintf(file_name, "%s_non_coord_to_dim.nc", TEST_NAME); + snprintf(file_name, sizeof(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; @@ -280,7 +280,7 @@ main(int argc, char **argv) char file_name[NC_MAX_NAME + 1]; /* Create file with two scalar vars. */ - sprintf(file_name, "%s_rename_affect_varid_order.nc", TEST_NAME); + snprintf(file_name, sizeof(file_name), "%s_rename_affect_varid_order.nc", TEST_NAME); if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; if (nc_def_var(ncid, D1_NAME, NC_INT, 0, NULL, &varid1)) ERR; if (nc_def_var(ncid, D2_NAME, NC_INT, 0, NULL, &varid2)) ERR; diff --git a/nc_test4/tst_rename3.c b/nc_test4/tst_rename3.c index 6f8c95ae6..e17af6634 100644 --- a/nc_test4/tst_rename3.c +++ b/nc_test4/tst_rename3.c @@ -39,7 +39,7 @@ main(int argc, char **argv) char file_name[NC_MAX_NAME + 1]; /* Create file with two scalar vars. */ - sprintf(file_name, "%s_coord_to_non_coord.nc", TEST_NAME); + snprintf(file_name, sizeof(file_name), "%s_coord_to_non_coord.nc", TEST_NAME); if (nc_create(file_name, NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR; if (nc_def_var(ncid, D1_NAME, NC_INT, 0, NULL, &varid1)) ERR; if (nc_def_var(ncid, D2_NAME, NC_INT, 0, NULL, &varid2)) ERR; @@ -67,7 +67,7 @@ main(int argc, char **argv) char file_name[NC_MAX_NAME + 1]; /* Create file with two dims and associated coordinate vars. */ - sprintf(file_name, "%s_coord_to_non_coord.nc", TEST_NAME); + snprintf(file_name, sizeof(file_name), "%s_coord_to_non_coord.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; @@ -121,7 +121,7 @@ main(int argc, char **argv) char file_name[NC_MAX_NAME + 1]; /* Create file with dim and associated coordinate var. */ - sprintf(file_name, "%s_non_coord_to_dim.nc", TEST_NAME); + snprintf(file_name, sizeof(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; diff --git a/nc_test4/tst_simplerw_coll_r.c b/nc_test4/tst_simplerw_coll_r.c index bf6637df6..b91d2a383 100644 --- a/nc_test4/tst_simplerw_coll_r.c +++ b/nc_test4/tst_simplerw_coll_r.c @@ -236,7 +236,7 @@ main(int argc, char **argv) } /* Create a file name. */ - sprintf(file_name, "%s_type_%d_fv_%d.nc", TEST_NAME, test_type[tt], fv); + snprintf(file_name, sizeof(file_name), "%s_type_%d_fv_%d.nc", TEST_NAME, test_type[tt], fv); /* Create a parallel netcdf-4 file. */ if (nc_create_par(file_name, NC_NETCDF4, comm, info, &ncid)) ERR; diff --git a/nc_test4/tst_strings.c b/nc_test4/tst_strings.c index 301ca6cd7..ed78351a5 100644 --- a/nc_test4/tst_strings.c +++ b/nc_test4/tst_strings.c @@ -440,7 +440,7 @@ main(int argc, char **argv) char **string_fillp = dim_combo == 3 ? my_string_fill : &default_fill; char *data_in; - sprintf(filename, "%s_dim_combo_%d.nc", TEST_NAME, dim_combo); + snprintf(filename, sizeof(filename), "%s_dim_combo_%d.nc", TEST_NAME, dim_combo); if (nc_create(filename, NC_NETCDF4, &ncid)) ERR; /* Create an array of strings for the Universal Declaraion of Human Rights. */ diff --git a/nc_test4/tst_types.c b/nc_test4/tst_types.c index d4d82c30f..f565dda33 100644 --- a/nc_test4/tst_types.c +++ b/nc_test4/tst_types.c @@ -49,7 +49,7 @@ create_test_file(char *filename, int *varid, int *ncid) for (type = 0; type < NUM_TYPES; type++) { /* Create a var... */ - sprintf(varname, "var_%d", type); + snprintf(varname, sizeof(varname), "var_%d", type); if (nc_def_var(*ncid, varname, type + NC_UBYTE, 1, &dimid, &varid[type])) ERR; } return 0; @@ -101,7 +101,7 @@ int main(int argc, char *argv[]) for (type = 0; type < NUM_TYPES; type++) { /* Create a var... */ - sprintf(varname, "var_%d", type); + snprintf(varname, sizeof(varname), "var_%d", type); if (nc_def_var(ncid1, varname, type + NC_UBYTE, 1, &dimid, &varid[type])) ERR; if (nc_inq_type_equal(ncid1, type + NC_UBYTE, ncid2, type + NC_UBYTE, &equal)) ERR; if (!equal) ERR; diff --git a/nc_test4/tst_vars.c b/nc_test4/tst_vars.c index f94fc0dcb..0124291e9 100644 --- a/nc_test4/tst_vars.c +++ b/nc_test4/tst_vars.c @@ -1279,7 +1279,7 @@ main(int argc, char **argv) /* Create a large number of variables. */ for (i = 0; i < NUM_VARS; i++) { - sprintf(varname, "a_%d", i); + snprintf(varname, sizeof(varname), "a_%d", i); if (nc_def_var(ncid, varname, NC_FLOAT, 1, dimids, &varids[i])) { ERR; break; diff --git a/nc_test4/tst_vars3.c b/nc_test4/tst_vars3.c index 19d51de13..f0420bccd 100644 --- a/nc_test4/tst_vars3.c +++ b/nc_test4/tst_vars3.c @@ -314,7 +314,7 @@ main(int argc, char **argv) if (nc_def_dim(ncid, D0_NAME3, NC_UNLIMITED, &dimid)) ERR; for (v = 0; v < NUM_VARS; v++) { - sprintf(var_name, "var_%d", v); + snprintf(var_name, sizeof(var_name), "var_%d", v); if (nc_def_var(ncid, var_name, NC_INT, 1, &dimid, &varid)) ERR_RET; if (nc_set_var_chunk_cache(ncid, varid, 0, 0, 0.75)) ERR_RET; } diff --git a/ncdump/ncvalidator.c b/ncdump/ncvalidator.c index f3661269c..971629085 100644 --- a/ncdump/ncvalidator.c +++ b/ncdump/ncvalidator.c @@ -815,7 +815,7 @@ compute_var_shape(NC *ncp) ncp->recsize = 0; for (i=0; ivars.ndefined; i++) { - sprintf(xloc,"var %s:",ncp->vars.value[i]->name); + snprintf(xloc,sizeof(xloc),"var %s:",ncp->vars.value[i]->name); /* check if dimids are valid */ for (j=0; jvars.value[i]->ndims; j++) { if (ncp->vars.value[i]->dimids[j] < 0) { @@ -1464,7 +1464,7 @@ val_get_NC_attr(int fd, return status; } - sprintf(xloc,"%s \"%s\"",loc,name); + snprintf(xloc,sizeof(xloc),"%s \"%s\"",loc,name); err = val_get_nc_type(fd, gbp, &xtype, xloc); if (err != NC_NOERR) { if (name != NULL) free(name); @@ -1575,7 +1575,7 @@ val_get_NC_attrarray(int fd, } #endif } else { - sprintf(xloc, "%s attribute", loc); + snprintf(xloc, sizeof(xloc), "%s attribute", loc); if (tag != NC_ATTRIBUTE) { if (verbose) printf("Error @ [0x%8.8zx]:\n", tag_err_addr); if (verbose) printf("\t%s: Invalid NC component tag (%d), expecting NC_ATTRIBUTE (%d)\n",xloc,tag,NC_ATTRIBUTE); @@ -1698,7 +1698,7 @@ val_get_NC_var(int fd, if (trace) printf("\t\tname = \"%s\"\n", name); /* read number of dimensions */ - sprintf(xloc,"%s \"%s\"",loc,name); + snprintf(xloc,sizeof(xloc),"%s \"%s\"",loc,name); err_addr = ERR_ADDR; err = hdr_get_NON_NEG(fd, gbp, &ndims); if (err != NC_NOERR) { @@ -1760,7 +1760,7 @@ val_get_NC_var(int fd, /* var = name nelems [dimid ...] vatt_list nc_type vsize begin * ^^^^^^^^^ */ - sprintf(xloc,"%s \"%s\"",loc,name); + snprintf(xloc,sizeof(xloc),"%s \"%s\"",loc,name); err = val_get_NC_attrarray(fd, gbp, &varp->attrs, xloc); if (err != NC_NOERR && err != NC_ENULLPAD) { free_NC_var(varp); diff --git a/ncdump/ocprint.c b/ncdump/ocprint.c index 1e25f2daf..7c0abc47d 100755 --- a/ncdump/ocprint.c +++ b/ncdump/ocprint.c @@ -1033,7 +1033,7 @@ dumpdatanode(OClink link, OCdatanode datanode, size_t count, void* memory, NCbyt ncbytescat(path,id); if(entry->rank > 0) { for(i=0;irank;i++) { - sprintf(tmp,"[%lu]",(unsigned long)entry->indices[i]); + snprintf(tmp,sizeof(tmp),"[%lu]",(unsigned long)entry->indices[i]); ncbytescat(path,tmp); } } @@ -1047,7 +1047,7 @@ dumpdatanode(OClink link, OCdatanode datanode, size_t count, void* memory, NCbyt case OC_Sequence: ncbytescat(path,"/"); ncbytescat(path,id); - sprintf(tmp,"[%lu]",(unsigned long)entry->indices[0]); + snprintf(tmp,sizeof(tmp),"[%lu]",(unsigned long)entry->indices[0]); ncbytescat(path,tmp); break; diff --git a/ncgen/cmldata.c b/ncgen/cmldata.c index f2034b495..07931d0dc 100644 --- a/ncgen/cmldata.c +++ b/ncgen/cmldata.c @@ -288,37 +288,37 @@ xconst(Constant* ci) return result; } break; case NC_BYTE: - sprintf(tmp,"%hhd",ci->value.int8v); + snprintf(tmp,sizeof(tmp),"%hhd",ci->value.int8v); break; case NC_SHORT: - sprintf(tmp,"%hd",ci->value.int16v); + snprintf(tmp,sizeof(tmp),"%hd",ci->value.int16v); break; case NC_INT: - sprintf(tmp,"%d",ci->value.int32v); + snprintf(tmp,sizeof(tmp),"%d",ci->value.int32v); break; case NC_FLOAT: - sprintf(tmp,"%.8g",ci->value.floatv); + snprintf(tmp,sizeof(tmp),"%.8g",ci->value.floatv); break; case NC_DOUBLE: - sprintf(tmp,"%.16g",ci->value.doublev); + snprintf(tmp,sizeof(tmp),"%.16g",ci->value.doublev); break; case NC_UBYTE: - sprintf(tmp,"%hhu",ci->value.uint8v); + snprintf(tmp,sizeof(tmp),"%hhu",ci->value.uint8v); break; case NC_USHORT: - sprintf(tmp,"%hu",ci->value.uint16v); + snprintf(tmp,sizeof(tmp),"%hu",ci->value.uint16v); break; case NC_UINT: - sprintf(tmp,"%uU",ci->value.uint32v); + snprintf(tmp,sizeof(tmp),"%uU",ci->value.uint32v); break; case NC_INT64: - sprintf(tmp,"%lldLL",ci->value.int64v); + snprintf(tmp,sizeof(tmp),"%lldLL",ci->value.int64v); break; case NC_UINT64: - sprintf(tmp,"%lluLLU",ci->value.uint64v); + snprintf(tmp,sizeof(tmp),"%lluLLU",ci->value.uint64v); break; case NC_ECONST: - sprintf(tmp,"%s",cname(ci->value.enumv)); + snprintf(tmp,sizeof(tmp),"%s",cname(ci->value.enumv)); break; case NC_STRING: { diff --git a/ncgen/cvt.c b/ncgen/cvt.c index 8224ea6ad..29995d82f 100644 --- a/ncgen/cvt.c +++ b/ncgen/cvt.c @@ -459,57 +459,57 @@ case CASE(NC_STRING,NC_STRING): /* What is the proper conversion for T->STRING?*/ case CASE(NC_CHAR,NC_STRING): - sprintf(stmp,"%c",src->value.charv); + snprintf(stmp, sizeof(stmp),"%c",src->value.charv); tmp.stringv.len = nulllen(stmp); tmp.stringv.stringv = nulldup(stmp); break; case CASE(NC_BYTE,NC_STRING): - sprintf(stmp,"%hhd",src->value.uint8v); + snprintf(stmp, sizeof(stmp),"%hhd",src->value.uint8v); tmp.stringv.len = nulllen(stmp); tmp.stringv.stringv = nulldup(stmp); break; case CASE(NC_UBYTE,NC_STRING): - sprintf(stmp,"%hhu",src->value.uint8v); + snprintf(stmp, sizeof(stmp),"%hhu",src->value.uint8v); tmp.stringv.len = nulllen(stmp); tmp.stringv.stringv = nulldup(stmp); break; case CASE(NC_USHORT,NC_STRING): - sprintf(stmp,"%hu",src->value.uint16v); + snprintf(stmp, sizeof(stmp),"%hu",src->value.uint16v); tmp.stringv.len = nulllen(stmp); tmp.stringv.stringv = nulldup(stmp); break; case CASE(NC_UINT,NC_STRING): - sprintf(stmp,"%u",src->value.uint32v); + snprintf(stmp, sizeof(stmp),"%u",src->value.uint32v); tmp.stringv.len = nulllen(stmp); tmp.stringv.stringv = nulldup(stmp); break; case CASE(NC_UINT64,NC_STRING): - sprintf(stmp,"%llu",src->value.uint64v); + snprintf(stmp, sizeof(stmp),"%llu",src->value.uint64v); tmp.stringv.len = nulllen(stmp); tmp.stringv.stringv = nulldup(stmp); break; case CASE(NC_SHORT,NC_STRING): - sprintf(stmp,"%hd",src->value.int16v); + snprintf(stmp, sizeof(stmp),"%hd",src->value.int16v); tmp.stringv.len = nulllen(stmp); tmp.stringv.stringv = nulldup(stmp); break; case CASE(NC_INT,NC_STRING): - sprintf(stmp,"%d",src->value.int32v); + snprintf(stmp, sizeof(stmp),"%d",src->value.int32v); tmp.stringv.len = nulllen(stmp); tmp.stringv.stringv = nulldup(stmp); break; case CASE(NC_INT64,NC_STRING): - sprintf(stmp,"%lld",src->value.int64v); + snprintf(stmp, sizeof(stmp),"%lld",src->value.int64v); tmp.stringv.len = nulllen(stmp); tmp.stringv.stringv = nulldup(stmp); break; case CASE(NC_FLOAT,NC_STRING): - sprintf(stmp,"%.8g",src->value.floatv); + snprintf(stmp, sizeof(stmp),"%.8g",src->value.floatv); tmp.stringv.len = nulllen(stmp); tmp.stringv.stringv = nulldup(stmp); break; case CASE(NC_DOUBLE,NC_STRING): - sprintf(stmp,"%.8g",src->value.doublev); + snprintf(stmp, sizeof(stmp),"%.8g",src->value.doublev); tmp.stringv.len = nulllen(stmp); tmp.stringv.stringv = nulldup(stmp); break; diff --git a/ncgen/dump.c b/ncgen/dump.c index bd4d775b8..024f92c41 100644 --- a/ncgen/dump.c +++ b/ncgen/dump.c @@ -83,7 +83,7 @@ bufdump(Datalist* list, Bytebuffer* buf) dumpdataprim(dp,buf); } else { char tmp[64]; - sprintf(tmp,"?%d? ",dp->nctype); + snprintf(tmp,sizeof(tmp),"?%d? ",dp->nctype); bbCat(buf,tmp); } break; } @@ -104,47 +104,47 @@ dumpdataprim(NCConstant* ci, Bytebuffer* buf) bbCat(buf,"'"); } break; case NC_BYTE: - sprintf(tmp,"%hhd",ci->value.int8v); + snprintf(tmp,sizeof(tmp),"%hhd",ci->value.int8v); bbCat(buf,tmp); break; case NC_SHORT: - sprintf(tmp,"%hd",ci->value.int16v); + snprintf(tmp,sizeof(tmp),"%hd",ci->value.int16v); bbCat(buf,tmp); break; case NC_INT: - sprintf(tmp,"%d",ci->value.int32v); + snprintf(tmp,sizeof(tmp),"%d",ci->value.int32v); bbCat(buf,tmp); break; case NC_FLOAT: - sprintf(tmp,"%g",ci->value.floatv); + snprintf(tmp,sizeof(tmp),"%g",ci->value.floatv); bbCat(buf,tmp); break; case NC_DOUBLE: - sprintf(tmp,"%lg",ci->value.doublev); + snprintf(tmp,sizeof(tmp),"%lg",ci->value.doublev); bbCat(buf,tmp); break; case NC_UBYTE: - sprintf(tmp,"%hhu",ci->value.int8v); + snprintf(tmp,sizeof(tmp),"%hhu",ci->value.int8v); bbCat(buf,tmp); break; case NC_USHORT: - sprintf(tmp,"%hu",ci->value.uint16v); + snprintf(tmp,sizeof(tmp),"%hu",ci->value.uint16v); bbCat(buf,tmp); break; case NC_UINT: - sprintf(tmp,"%u",ci->value.uint32v); + snprintf(tmp,sizeof(tmp),"%u",ci->value.uint32v); bbCat(buf,tmp); break; case NC_INT64: - sprintf(tmp,"%lld",ci->value.int64v); + snprintf(tmp,sizeof(tmp),"%lld",ci->value.int64v); bbCat(buf,tmp); break; case NC_UINT64: - sprintf(tmp,"%llu",ci->value.uint64v); + snprintf(tmp,sizeof(tmp),"%llu",ci->value.uint64v); bbCat(buf,tmp); break; case NC_ECONST: - sprintf(tmp,"%s",ci->value.enumv->fqn); + snprintf(tmp,sizeof(tmp),"%s",ci->value.enumv->fqn); bbCat(buf,tmp); break; case NC_STRING: diff --git a/ncgen/f77data.c b/ncgen/f77data.c index e4863af2a..28521890a 100644 --- a/ncgen/f77data.c +++ b/ncgen/f77data.c @@ -35,26 +35,26 @@ f77_constant(Generator* generator, Symbol* sym, NCConstant* ci, Bytebuffer* code case NC_CHAR: if(ci->value.charv == '\'') - sprintf(tmp,"'\\''"); + snprintf(tmp,sizeof(tmp),"'\\''"); else - sprintf(tmp,"'%c'",ci->value.charv); + snprintf(tmp,sizeof(tmp),"'%c'",ci->value.charv); break; case NC_BYTE: - sprintf(tmp,"%hhd",ci->value.int8v); + snprintf(tmp,sizeof(tmp),"%hhd",ci->value.int8v); break; case NC_SHORT: - sprintf(tmp,"%hd",ci->value.int16v); + snprintf(tmp,sizeof(tmp),"%hd",ci->value.int16v); break; case NC_INT: - sprintf(tmp,"%d",ci->value.int32v); + snprintf(tmp,sizeof(tmp),"%d",ci->value.int32v); break; case NC_FLOAT: - sprintf(tmp,"%.8g",ci->value.floatv); + snprintf(tmp,sizeof(tmp),"%.8g",ci->value.floatv); break; case NC_DOUBLE: { char* p = tmp; /* FORTRAN requires e|E->D */ - sprintf(tmp,"%.16g",ci->value.doublev); + snprintf(tmp,sizeof(tmp),"%.16g",ci->value.doublev); while(*p) {if(*p == 'e' || *p == 'E') {*p = 'D';}; p++;} } break; case NC_STRING: diff --git a/ncgen/gencml.c b/ncgen/gencml.c index b88b08017..912cc4975 100644 --- a/ncgen/gencml.c +++ b/ncgen/gencml.c @@ -316,7 +316,7 @@ definextype(Symbol* tsym) if(j > 0) bbCat(dimbuf," "); dim = efield->typ.dimset.dimsyms[j]; ASSERT(dim->dim.isconstant); - sprintf(tmp,"%lu",(unsigned long)dim->dim.size); + snprintf(tmp,sizeof(tmp),"%lu",(unsigned long)dim->dim.size); bbCat(dimbuf,tmp); } bbCat(dimbuf,"\""); diff --git a/ncgen/genjjni.c b/ncgen/genjjni.c index 86c8682b4..03e0166f7 100644 --- a/ncgen/genjjni.c +++ b/ncgen/genjjni.c @@ -838,7 +838,7 @@ genjjni_deftype(Symbol* tsym) char tmp[256]; Symbol* e = efield->typ.dimset.dimsyms[j]; ASSERT(e->dim.isconstant); - sprintf(tmp,"%u",e->dim.size); + snprintf(tmp,sizeof(tmp),"%u",e->dim.size); strcat(stmt,(j==0?"":", ")); strcat(stmt,tmp); } @@ -849,7 +849,7 @@ genjjni_deftype(Symbol* tsym) Symbol* efield = (Symbol*)listget(tsym->subnodes,i); char tmp[1024]; ASSERT(efield->subclass == NC_FIELD); - sprintf(tmp,"%lu",efield->typ.offset); + snprintf(tmp,sizeof(tmp),"%lu",efield->typ.offset); if(efield->typ.dimset.ndims > 0){ nprintf(stmt,sizeof(stmt),"check_err(nc_insert_array_compound(%s, %s, \"%s\", %s, %s, %d, %s_dims));", jgroupncid(tsym->container), @@ -1449,39 +1449,39 @@ jconst(Constant* ci) } break; case NC_BYTE: - sprintf(tmp,"%hhd",ci->value.int8v); + snprintf(tmp,sizeof(tmp),"%hhd",ci->value.int8v); break; case NC_SHORT: - sprintf(tmp,"%hd",ci->value.int16v); + snprintf(tmp,sizeof(tmp),"%hd",ci->value.int16v); break; case NC_INT: - sprintf(tmp,"%d",ci->value.int32v); + snprintf(tmp,sizeof(tmp),"%d",ci->value.int32v); break; case NC_FLOAT: - sprintf(tmp,"%.8g",ci->value.floatv); + snprintf(tmp,sizeof(tmp),"%.8g",ci->value.floatv); break; case NC_DOUBLE: - sprintf(tmp,"%.16g",ci->value.doublev); + snprintf(tmp,sizeof(tmp),"%.16g",ci->value.doublev); break; case NC_UBYTE: - sprintf(tmp,"%hhu",ci->value.uint8v); + snprintf(tmp,sizeof(tmp),"%hhu",ci->value.uint8v); break; case NC_USHORT: - sprintf(tmp,"%hu",ci->value.uint16v); + snprintf(tmp,sizeof(tmp),"%hu",ci->value.uint16v); break; case NC_UINT: - sprintf(tmp,"%uL",ci->value.uint32v); /* upgrade to long */ + snprintf(tmp,sizeof(tmp),"%uL",ci->value.uint32v); /* upgrade to long */ break; case NC_INT64: - sprintf(tmp,"%lldL",ci->value.int64v); + snprintf(tmp,sizeof(tmp),"%lldL",ci->value.int64v); break; case NC_UINT64: { /* HACK to handle unsigned values */ long long l = (long)ci->value.uint64v; - sprintf(tmp,"%lldL",l); + snprintf(tmp,sizeof(tmp),"%lldL",l); } break; case NC_ECONST: - sprintf(tmp,"%s",jname(ci->value.enumv)); + snprintf(tmp,sizeof(tmp),"%s",jname(ci->value.enumv)); break; case NC_STRING: { diff --git a/ncgen/jdatajni.c b/ncgen/jdatajni.c index f5edb8d7e..9faf6ae4f 100644 --- a/ncgen/jdatajni.c +++ b/ncgen/jdatajni.c @@ -244,13 +244,13 @@ genjjni_data(Symbol* tsym, Datasrc* datasrc, Datalist* fillsrc, semerror(srcline(datasrc),"Vlen data must be enclosed in {..}"); } cp = srcnext(datasrc); - sprintf(vlenname,"vlen_%u",cp->value.compoundv->vlen.uid); + snprintf(vlenname,sizeof(vlenname),"vlen_%u",cp->value.compoundv->vlen.uid); /* Use special alignment */ nprintf(stmt,sizeof(stmt),"Memory.align(%s,%d);\n", vlenname,jvlenalignment()); bbCat(databuf,stmt); /* generate and store the nc_vlen_t instance*/ - sprintf(stmt,"Memory.put_vlen(%s,new long[]{%lld, %s_addr});\n", + snprintf(stmt,sizeof(stmt),"Memory.put_vlen(%s,new long[]{%lld, %s_addr});\n", memname, (long long)cp->value.compoundv->vlen.count, vlenname); @@ -336,7 +336,7 @@ genjjni_vlendata(List* vlenconstants, Bytebuffer* databuf) Symbol* basetype = tsym->typ.basetype; int typecode = basetype->typ.typecode; - sprintf(memname,"vlen_%u",cmpd->value.compoundv->vlen.uid); + snprintf(memname,sizeof(memname),"vlen_%u",cmpd->value.compoundv->vlen.uid); count = 0; vlensrc = datalist2src(cmpd->value.compoundv); @@ -362,7 +362,7 @@ genjjni_vlendata(List* vlenconstants, Bytebuffer* databuf) bbCat(databuf,bbContents(vlenbuf)); } /* Now store the address */ - sprintf(tmp,"%s_addr = Memory.address(%s);\n", + snprintf(tmp,sizeof(tmp),"%s_addr = Memory.address(%s);\n", memname,memname); bbCat(databuf,tmp); } @@ -380,11 +380,11 @@ genjjni_vlenconstants(List* vlenconstants, Bytebuffer* databuf) for(i=0;ivalue.compoundv->vlen.uid); + snprintf(memname,sizeof(memname),"vlen_%u",cmpd->value.compoundv->vlen.uid); /* Define the memory buffer and a place to stick its address */ - sprintf(tmp,"static long %s = Memory.create();\n",memname); + snprintf(tmp,sizeof(tmp),"static long %s = Memory.create();\n",memname); bbCat(databuf,tmp); - sprintf(tmp,"static long %s_addr = 0L;\n",memname); + snprintf(tmp,sizeof(tmp),"static long %s_addr = 0L;\n",memname); bbCat(databuf,tmp); } } diff --git a/ncgen/ncgen.l b/ncgen/ncgen.l index c46fb3863..963ecefcc 100644 --- a/ncgen/ncgen.l +++ b/ncgen/ncgen.l @@ -243,7 +243,7 @@ yytext[MAXTRST-1] = '\0'; */ len = unescape((char *)yytext+1,yyleng-2,!ISIDENT,&s); if(len < 0) { - sprintf(errstr,"Illegal character: %s",yytext); + snprintf(errstr, sizeof(errstr),"Illegal character: %s",yytext); yyerror(errstr); } bbClear(lextext); @@ -411,7 +411,7 @@ NIL|nil|Nil { /* capture the tag string */ tag = collecttag(pos,&stag); if(tag == NC_NAT) { - sprintf(errstr,"Illegal integer suffix: %s",stag); + snprintf(errstr, sizeof(errstr),"Illegal integer suffix: %s",stag); yyerror(errstr); goto done; } @@ -433,13 +433,13 @@ NIL|nil|Nil { radix = 10; if(isneg && hasU) { - sprintf(errstr,"Unsigned integer cannot be signed: %s",ncgtext); + snprintf(errstr, sizeof(errstr),"Unsigned integer cannot be signed: %s",ncgtext); yyerror(errstr); goto done; } uint64_val = parseULL(radix, pos,&fail); if(fail) { - sprintf(errstr,"integer constant out of range: %s",ncgtext); + snprintf(errstr, sizeof(errstr),"integer constant out of range: %s",ncgtext); yyerror(errstr); goto done; } @@ -453,7 +453,7 @@ NIL|nil|Nil { case NC_FORMAT_64BIT_OFFSET: case NC_FORMAT_NETCDF4_CLASSIC: if(nct > NC_INT) { - sprintf(errstr,"Illegal integer constant for classic format: %s",ncgtext); + snprintf(errstr, sizeof(errstr),"Illegal integer constant for classic format: %s",ncgtext); yyerror(errstr); goto done; } @@ -479,7 +479,7 @@ done: return 0; /* capture the tag string */ tag = collecttag(yytext,&stag); if(tag == NC_NAT) { - sprintf(errstr,"Illegal integer suffix: %s",stag); + snprintf(errstr, sizeof(errstr),"Illegal integer suffix: %s",stag); yyerror(errstr); //goto done; return 0; @@ -507,7 +507,7 @@ done: return 0; break; default: /* should never happen */ if (sscanf((char*)yytext, "%i", &uint32_val) != 1) { - sprintf(errstr,"bad unsigned int constant: %s",(char*)yytext); + snprintf(errstr, sizeof(errstr),"bad unsigned int constant: %s",(char*)yytext); yyerror(errstr); } token = UINT_CONST; @@ -516,14 +516,14 @@ done: return 0; } {DBLNUMBER} { if (sscanf((char*)yytext, "%le", &double_val) != 1) { - sprintf(errstr,"bad long or double constant: %s",(char*)yytext); + snprintf(errstr, sizeof(errstr),"bad long or double constant: %s",(char*)yytext); yyerror(errstr); } return lexdebug(DOUBLE_CONST); } {FLTNUMBER} { if (sscanf((char*)yytext, "%e", &float_val) != 1) { - sprintf(errstr,"bad float constant: %s",(char*)yytext); + snprintf(errstr, sizeof(errstr),"bad float constant: %s",(char*)yytext); yyerror(errstr); } return lexdebug(FLOAT_CONST); @@ -535,7 +535,7 @@ done: return 0; \'\\[0-7][0-7][0-7]\' { int oct = unescapeoct(&yytext[2]); if(oct < 0) { - sprintf(errstr,"bad octal character constant: %s",(char*)yytext); + snprintf(errstr, sizeof(errstr),"bad octal character constant: %s",(char*)yytext); yyerror(errstr); } byte_val = (unsigned int)oct; @@ -544,7 +544,7 @@ done: return 0; \'\\[xX][0-9a-fA-F][0-9a-fA-F]\' { int hex = unescapehex(&yytext[3]); if(byte_val < 0) { - sprintf(errstr,"bad hex character constant: %s",(char*)yytext); + snprintf(errstr, sizeof(errstr),"bad hex character constant: %s",(char*)yytext); yyerror(errstr); } byte_val = (unsigned int)hex; @@ -647,7 +647,7 @@ makepath(char* text0) refsym = lookupingroup(NC_GRP,ident,container); if(!lastident) { if(refsym == NULL) { - sprintf(errstr,"Undefined or forward referenced group: %s",ident); + snprintf(errstr, sizeof(errstr),"Undefined or forward referenced group: %s",ident); yyerror(errstr); refsym = rootgroup; } else diff --git a/ncgen/ncgen.y b/ncgen/ncgen.y index 10f3e36ea..c8c2d5ac6 100644 --- a/ncgen/ncgen.y +++ b/ncgen/ncgen.y @@ -650,7 +650,7 @@ fielddim: { /* Anonymous integer dimension. Can only occur in type definitions*/ char anon[32]; - sprintf(anon,"const%u",uint32_val); + snprintf(anon, sizeof(anon),"const%u",uint32_val); $$ = install(anon); $$->objectclass = NC_DIM; $$->dim.isconstant = 1; @@ -664,7 +664,7 @@ fielddim: derror("field dimension must be positive"); YYABORT; } - sprintf(anon,"const%d",int32_val); + snprintf(anon, sizeof(anon),"const%d",int32_val); $$ = install(anon); $$->objectclass = NC_DIM; $$->dim.isconstant = 1; diff --git a/ncgen/ncgenl.c b/ncgen/ncgenl.c index 6ea3a2270..af03296e1 100644 --- a/ncgen/ncgenl.c +++ b/ncgen/ncgenl.c @@ -2081,7 +2081,7 @@ yytext[MAXTRST-1] = '\0'; */ len = unescape((char *)yytext+1,yyleng-2,!ISIDENT,&s); if(len < 0) { - sprintf(errstr,"Illegal character: %s",yytext); + snprintf(errstr,sizeof(errstr),"Illegal character: %s",yytext); yyerror(errstr); } bbClear(lextext); @@ -2385,7 +2385,7 @@ YY_RULE_SETUP /* capture the tag string */ tag = collecttag(pos,&stag); if(tag == NC_NAT) { - sprintf(errstr,"Illegal integer suffix: %s",stag); + snprintf(errstr,sizeof(errstr),"Illegal integer suffix: %s",stag); yyerror(errstr); goto done; } @@ -2407,13 +2407,13 @@ YY_RULE_SETUP radix = 10; if(isneg && hasU) { - sprintf(errstr,"Unsigned integer cannot be signed: %s",ncgtext); + snprintf(errstr,sizeof(errstr),"Unsigned integer cannot be signed: %s",ncgtext); yyerror(errstr); goto done; } uint64_val = parseULL(radix, pos,&fail); if(fail) { - sprintf(errstr,"integer constant out of range: %s",ncgtext); + snprintf(errstr,sizeof(errstr),"integer constant out of range: %s",ncgtext); yyerror(errstr); goto done; } @@ -2427,7 +2427,7 @@ YY_RULE_SETUP case NC_FORMAT_64BIT_OFFSET: case NC_FORMAT_NETCDF4_CLASSIC: if(nct > NC_INT) { - sprintf(errstr,"Illegal integer constant for classic format: %s",ncgtext); + snprintf(errstr,sizeof(errstr),"Illegal integer constant for classic format: %s",ncgtext); yyerror(errstr); goto done; } @@ -2456,7 +2456,7 @@ YY_RULE_SETUP /* capture the tag string */ tag = collecttag(yytext,&stag); if(tag == NC_NAT) { - sprintf(errstr,"Illegal integer suffix: %s",stag); + snprintf(errstr,sizeof(errstr),"Illegal integer suffix: %s",stag); yyerror(errstr); //goto done; return 0; @@ -2484,7 +2484,7 @@ YY_RULE_SETUP break; default: /* should never happen */ if (sscanf((char*)yytext, "%i", &uint32_val) != 1) { - sprintf(errstr,"bad unsigned int constant: %s",(char*)yytext); + snprintf(errstr,sizeof(errstr),"bad unsigned int constant: %s",(char*)yytext); yyerror(errstr); } token = UINT_CONST; @@ -2497,7 +2497,7 @@ YY_RULE_SETUP #line 517 "ncgen.l" { if (sscanf((char*)yytext, "%le", &double_val) != 1) { - sprintf(errstr,"bad long or double constant: %s",(char*)yytext); + snprintf(errstr,sizeof(errstr),"bad long or double constant: %s",(char*)yytext); yyerror(errstr); } return lexdebug(DOUBLE_CONST); @@ -2508,7 +2508,7 @@ YY_RULE_SETUP #line 524 "ncgen.l" { if (sscanf((char*)yytext, "%e", &float_val) != 1) { - sprintf(errstr,"bad float constant: %s",(char*)yytext); + snprintf(errstr,sizeof(errstr),"bad float constant: %s",(char*)yytext); yyerror(errstr); } return lexdebug(FLOAT_CONST); @@ -2529,7 +2529,7 @@ YY_RULE_SETUP { int oct = unescapeoct(&yytext[2]); if(oct < 0) { - sprintf(errstr,"bad octal character constant: %s",(char*)yytext); + snprintf(errstr,sizeof(errstr),"bad octal character constant: %s",(char*)yytext); yyerror(errstr); } byte_val = (unsigned int)oct; @@ -2542,7 +2542,7 @@ YY_RULE_SETUP { int hex = unescapehex(&yytext[3]); if(byte_val < 0) { - sprintf(errstr,"bad hex character constant: %s",(char*)yytext); + snprintf(errstr,sizeof(errstr),"bad hex character constant: %s",(char*)yytext); yyerror(errstr); } byte_val = (unsigned int)hex; @@ -3681,7 +3681,7 @@ makepath(char* text0) refsym = lookupingroup(NC_GRP,ident,container); if(!lastident) { if(refsym == NULL) { - sprintf(errstr,"Undefined or forward referenced group: %s",ident); + snprintf(errstr,sizeof(errstr),"Undefined or forward referenced group: %s",ident); yyerror(errstr); refsym = rootgroup; } else diff --git a/ncgen/ncgeny.c b/ncgen/ncgeny.c index 105a221b4..ae2c0a81e 100644 --- a/ncgen/ncgeny.c +++ b/ncgen/ncgeny.c @@ -1543,7 +1543,7 @@ yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, return -1; } - /* Avoid sprintf, as that infringes on the user's name space. + /* Avoid snprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { @@ -2409,7 +2409,7 @@ fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); { /* Anonymous integer dimension. Can only occur in type definitions*/ char anon[32]; - sprintf(anon,"const%u",uint32_val); + snprintf(anon,sizeof(anon),"const%u",uint32_val); (yyval.sym) = install(anon); (yyval.sym)->objectclass = NC_DIM; (yyval.sym)->dim.isconstant = 1; @@ -2427,7 +2427,7 @@ fprintf(stderr,"dimension: %s = UNLIMITED\n",(yyvsp[-2].sym)->name); derror("field dimension must be positive"); YYABORT; } - sprintf(anon,"const%d",int32_val); + snprintf(anon,sizeof(anon),"const%d",int32_val); (yyval.sym) = install(anon); (yyval.sym)->objectclass = NC_DIM; (yyval.sym)->dim.isconstant = 1; diff --git a/ncgen/odom.c b/ncgen/odom.c index 1f96828d6..93e9a34ec 100644 --- a/ncgen/odom.c +++ b/ncgen/odom.c @@ -70,7 +70,7 @@ odometerprint(Odometer* odom) strcat(line,"[]"); } else for(i=0;irank;i++) { int ioffset = i + odom->offset; - sprintf(tmp,"[%lu/%lu..%lu:%lu]", + snprintf(tmp,sizeof(tmp),"[%lu/%lu..%lu:%lu]", (unsigned long)odom->origin->index[ioffset], (unsigned long)odom->origin->start[ioffset], (unsigned long)odom->origin->declsize[ioffset], diff --git a/ncgen3/genlib.c b/ncgen3/genlib.c index 1e728502e..ead98b08d 100644 --- a/ncgen3/genlib.c +++ b/ncgen3/genlib.c @@ -225,7 +225,7 @@ gen_c( cline("}"); cline(""); cline("int"); - sprintf(stmnt, "main() {\t\t\t/* create %s */", filename); + snprintf(stmnt, sizeof(stmnt), "main() {\t\t\t/* create %s */", filename); cline(stmnt); /* create necessary declarations */ @@ -237,7 +237,7 @@ gen_c( cline(""); cline(" /* dimension ids */"); for (idim = 0; idim < ndims; idim++) { - sprintf(stmnt, " int %s_dim;", dims[idim].lname); + snprintf(stmnt, sizeof(stmnt), " int %s_dim;", dims[idim].lname); cline(stmnt); } @@ -245,10 +245,10 @@ gen_c( cline(" /* dimension lengths */"); for (idim = 0; idim < ndims; idim++) { if (dims[idim].size == NC_UNLIMITED) { - sprintf(stmnt, " size_t %s_len = NC_UNLIMITED;", + snprintf(stmnt, sizeof(stmnt), " size_t %s_len = NC_UNLIMITED;", dims[idim].lname); } else { - sprintf(stmnt, " size_t %s_len = %lu;", + snprintf(stmnt, sizeof(stmnt), " size_t %s_len = %lu;", dims[idim].lname, (unsigned long) dims[idim].size); } @@ -265,14 +265,14 @@ gen_c( cline(""); cline(" /* variable ids */"); for (ivar = 0; ivar < nvars; ivar++) { - sprintf(stmnt, " int %s_id;", vars[ivar].lname); + snprintf(stmnt, sizeof(stmnt), " int %s_id;", vars[ivar].lname); cline(stmnt); } cline(""); cline(" /* rank (number of dimensions) for each variable */"); for (ivar = 0; ivar < nvars; ivar++) { - sprintf(stmnt, "# define RANK_%s %d", vars[ivar].lname, + snprintf(stmnt, sizeof(stmnt), "# define RANK_%s %d", vars[ivar].lname, vars[ivar].ndims); cline(stmnt); } @@ -281,7 +281,7 @@ gen_c( cline(" /* variable shapes */"); for (ivar = 0; ivar < nvars; ivar++) { if (vars[ivar].ndims > 0) { - sprintf(stmnt, " int %s_dims[RANK_%s];", + snprintf(stmnt, sizeof(stmnt), " int %s_dims[RANK_%s];", vars[ivar].lname, vars[ivar].lname); cline(stmnt); } @@ -302,7 +302,7 @@ gen_c( cline(" /* attribute vectors */"); for (iatt = 0; iatt < natts; iatt++) { if (atts[iatt].type != NC_CHAR) { - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), " %s %s_%s[%lu];", ncatype(atts[iatt].type), atts[iatt].var == -1 ? "cdf" : vars[atts[iatt].var].lname, @@ -318,20 +318,20 @@ gen_c( cline(" /* enter define mode */"); if (!cmode_modifier) { - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), " stat = nc_create(\"%s\", NC_CLOBBER, &ncid);", filename); } else if (cmode_modifier & NC_64BIT_OFFSET) { - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), " stat = nc_create(\"%s\", NC_CLOBBER|NC_64BIT_OFFSET, &ncid);", filename); #ifdef USE_NETCDF4 } else if (cmode_modifier & NC_CLASSIC_MODEL) { - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), " stat = nc_create(\"%s\", NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid);", filename); } else if (cmode_modifier & NC_NETCDF4) { - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), " stat = nc_create(\"%s\", NC_CLOBBER|NC_NETCDF4, &ncid);", filename); #endif @@ -347,7 +347,7 @@ gen_c( cline(" /* define dimensions */"); } for (idim = 0; idim < ndims; idim++) { - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), " stat = nc_def_dim(ncid, \"%s\", %s_len, &%s_dim);", dims[idim].name, dims[idim].lname, dims[idim].lname); cline(stmnt); @@ -361,7 +361,7 @@ gen_c( for (ivar = 0; ivar < nvars; ivar++) { cline(""); for (idim = 0; idim < vars[ivar].ndims; idim++) { - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), " %s_dims[%d] = %s_dim;", vars[ivar].lname, idim, @@ -369,7 +369,7 @@ gen_c( cline(stmnt); } if (vars[ivar].ndims > 0) { /* a dimensioned variable */ - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), " stat = nc_def_var(ncid, \"%s\", %s, RANK_%s, %s_dims, &%s_id);", vars[ivar].name, nctype(vars[ivar].type), @@ -377,7 +377,7 @@ gen_c( vars[ivar].lname, vars[ivar].lname); } else { /* a scalar */ - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), " stat = nc_def_var(ncid, \"%s\", %s, RANK_%s, 0, &%s_id);", vars[ivar].name, nctype(vars[ivar].type), @@ -396,7 +396,7 @@ gen_c( for (iatt = 0; iatt < natts; iatt++) { if (atts[iatt].type == NC_CHAR) { /* string */ val_string = cstrstr((char *) atts[iatt].val, atts[iatt].len); - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), " stat = nc_put_att_text(ncid, %s%s, \"%s\", %lu, %s);", atts[iatt].var == -1 ? "NC_GLOBAL" : vars[atts[iatt].var].lname, atts[iatt].var == -1 ? "" : "_id", @@ -409,7 +409,7 @@ gen_c( else { /* vector attribute */ for (jatt = 0; jatt < atts[iatt].len ; jatt++) { val_string = cstring(atts[iatt].type,atts[iatt].val,jatt); - sprintf(stmnt, " %s_%s[%d] = %s;", + snprintf(stmnt, sizeof(stmnt), " %s_%s[%d] = %s;", atts[iatt].var == -1 ? "cdf" : vars[atts[iatt].var].lname, atts[iatt].lname, jatt, @@ -418,7 +418,7 @@ gen_c( free (val_string); } - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), " stat = nc_put_att_%s(ncid, %s%s, \"%s\", %s, %lu, %s_%s);", ncatype(atts[iatt].type), atts[iatt].var == -1 ? "NC_GLOBAL" : vars[atts[iatt].var].lname, @@ -610,21 +610,21 @@ gen_fortran( if (ndims > 0) { fline("* dimension ids"); for (idim = 0; idim < ndims; idim++) { - sprintf(stmnt, "integer %s_dim", dims[idim].lname); + snprintf(stmnt, sizeof(stmnt), "integer %s_dim", dims[idim].lname); fline(stmnt); } fline("* dimension lengths"); for (idim = 0; idim < ndims; idim++) { - sprintf(stmnt, "integer %s_len", dims[idim].lname); + snprintf(stmnt, sizeof(stmnt), "integer %s_len", dims[idim].lname); fline(stmnt); } for (idim = 0; idim < ndims; idim++) { if (dims[idim].size == NC_UNLIMITED) { - sprintf(stmnt, "parameter (%s_len = NF_UNLIMITED)", + snprintf(stmnt, sizeof(stmnt), "parameter (%s_len = NF_UNLIMITED)", dims[idim].lname); } else { - sprintf(stmnt, "parameter (%s_len = %lu)", + snprintf(stmnt, sizeof(stmnt), "parameter (%s_len = %lu)", dims[idim].lname, (unsigned long) dims[idim].size); } @@ -641,17 +641,17 @@ gen_fortran( if (nvars > 0) { fline("* variable ids"); for (ivar = 0; ivar < nvars; ivar++) { - sprintf(stmnt, "integer %s_id", vars[ivar].lname); + snprintf(stmnt, sizeof(stmnt), "integer %s_id", vars[ivar].lname); fline(stmnt); } fline("* rank (number of dimensions) for each variable"); for (ivar = 0; ivar < nvars; ivar++) { - sprintf(stmnt, "integer %s_rank", vars[ivar].lname); + snprintf(stmnt, sizeof(stmnt), "integer %s_rank", vars[ivar].lname); fline(stmnt); } for (ivar = 0; ivar < nvars; ivar++) { - sprintf(stmnt, "parameter (%s_rank = %d)", vars[ivar].lname, + snprintf(stmnt, sizeof(stmnt), "parameter (%s_rank = %d)", vars[ivar].lname, vars[ivar].ndims); fline(stmnt); } @@ -659,7 +659,7 @@ gen_fortran( fline("* variable shapes"); for (ivar = 0; ivar < nvars; ivar++) { if (vars[ivar].ndims > 0) { - sprintf(stmnt, "integer %s_dims(%s_rank)", + snprintf(stmnt, sizeof(stmnt), "integer %s_dims(%s_rank)", vars[ivar].lname, vars[ivar].lname); fline(stmnt); } @@ -683,14 +683,14 @@ gen_fortran( continue; } if (v->ndims == 0) { /* scalar */ - sprintf(stmnt, "%s %s", ncftype(v->type), + snprintf(stmnt, sizeof(stmnt), "%s %s", ncftype(v->type), v->lname); } else { - sprintf(stmnt, "%s %s(", ncftype(v->type), + snprintf(stmnt, sizeof(stmnt), "%s %s(", ncftype(v->type), v->lname); /* reverse dimensions for FORTRAN */ for (idim = v->ndims-1; idim >= 0; idim--) { - sprintf(s2, "%s_len, ", + snprintf(s2, sizeof(s2), "%s_len, ", dims[v->dims[idim]].lname); strcat(stmnt, s2); } @@ -719,7 +719,7 @@ gen_fortran( fline("* attribute vectors"); for (itype = 0; itype < ntypes; itype++) { if (types[itype] != NC_CHAR && max_atts[(int)types[itype]] > 0) { - sprintf(stmnt, "%s %sval(%lu)", ncftype(types[itype]), + snprintf(stmnt, sizeof(stmnt), "%s %sval(%lu)", ncftype(types[itype]), nfstype(types[itype]), (unsigned long) max_atts[(int)types[itype]]); fline(stmnt); @@ -730,14 +730,14 @@ gen_fortran( /* create netCDF file, uses NC_CLOBBER mode */ fline("* enter define mode"); if (!cmode_modifier) { - sprintf(stmnt, "iret = nf_create(\'%s\', NF_CLOBBER, ncid)", filename); + snprintf(stmnt, sizeof(stmnt), "iret = nf_create(\'%s\', NF_CLOBBER, ncid)", filename); } else if (cmode_modifier & NC_64BIT_OFFSET) { - sprintf(stmnt, "iret = nf_create(\'%s\', OR(NF_CLOBBER,NF_64BIT_OFFSET), ncid)", filename); + snprintf(stmnt, sizeof(stmnt), "iret = nf_create(\'%s\', OR(NF_CLOBBER,NF_64BIT_OFFSET), ncid)", filename); #ifdef USE_NETCDF4 } else if (cmode_modifier & NC_CLASSIC_MODEL) { - sprintf(stmnt, "iret = nf_create(\'%s\', OR(NF_CLOBBER,NC_NETCDF4,NC_CLASSIC_MODEL), ncid)", filename); + snprintf(stmnt, sizeof(stmnt), "iret = nf_create(\'%s\', OR(NF_CLOBBER,NC_NETCDF4,NC_CLASSIC_MODEL), ncid)", filename); } else if (cmode_modifier & NC_NETCDF4) { - sprintf(stmnt, "iret = nf_create(\'%s\', OR(NF_CLOBBER,NF_NETCDF4), ncid)", filename); + snprintf(stmnt, sizeof(stmnt), "iret = nf_create(\'%s\', OR(NF_CLOBBER,NF_NETCDF4), ncid)", filename); #endif } else { derror("unknown cmode modifier"); @@ -750,10 +750,10 @@ gen_fortran( fline("* define dimensions"); for (idim = 0; idim < ndims; idim++) { if (dims[idim].size == NC_UNLIMITED) - sprintf(stmnt, "iret = nf_def_dim(ncid, \'%s\', NF_UNLIMITED, %s_dim)", + snprintf(stmnt, sizeof(stmnt), "iret = nf_def_dim(ncid, \'%s\', NF_UNLIMITED, %s_dim)", dims[idim].name, dims[idim].lname); else - sprintf(stmnt, "iret = nf_def_dim(ncid, \'%s\', %lu, %s_dim)", + snprintf(stmnt, sizeof(stmnt), "iret = nf_def_dim(ncid, \'%s\', %lu, %s_dim)", dims[idim].name, (unsigned long) dims[idim].size, dims[idim].lname); fline(stmnt); @@ -765,14 +765,14 @@ gen_fortran( fline("* define variables"); for (ivar = 0; ivar < nvars; ivar++) { for (idim = 0; idim < vars[ivar].ndims; idim++) { - sprintf(stmnt, "%s_dims(%d) = %s_dim", + snprintf(stmnt, sizeof(stmnt), "%s_dims(%d) = %s_dim", vars[ivar].lname, vars[ivar].ndims - idim, /* reverse dimensions */ dims[vars[ivar].dims[idim]].lname); fline(stmnt); } if (vars[ivar].ndims > 0) { /* a dimensioned variable */ - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), "iret = nf_def_var(ncid, \'%s\', %s, %s_rank, %s_dims, %s_id)", vars[ivar].name, ftypename(vars[ivar].type), @@ -780,7 +780,7 @@ gen_fortran( vars[ivar].lname, vars[ivar].lname); } else { /* a scalar */ - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), "iret = nf_def_var(ncid, \'%s\', %s, %s_rank, 0, %s_id)", vars[ivar].name, ftypename(vars[ivar].type), @@ -798,7 +798,7 @@ gen_fortran( for (iatt = 0; iatt < natts; iatt++) { if (atts[iatt].type == NC_CHAR) { /* string */ val_string = fstrstr((char *) atts[iatt].val, atts[iatt].len); - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), "iret = nf_put_att_text(ncid, %s%s, \'%s\', %lu, %s)", atts[iatt].var == -1 ? "NF_GLOBAL" : vars[atts[iatt].var].lname, atts[iatt].var == -1 ? "" : "_id", @@ -811,7 +811,7 @@ gen_fortran( } else { for (jatt = 0; jatt < atts[iatt].len ; jatt++) { val_string = fstring(atts[iatt].type,atts[iatt].val,jatt); - sprintf(stmnt, "%sval(%d) = %s", + snprintf(stmnt, sizeof(stmnt), "%sval(%d) = %s", nfstype(atts[iatt].type), jatt+1, val_string); @@ -819,7 +819,7 @@ gen_fortran( free (val_string); } - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), "iret = nf_put_att_%s(ncid, %s%s, \'%s\', %s, %lu, %sval)", nfftype(atts[iatt].type), atts[iatt].var == -1 ? "NCGLOBAL" : vars[atts[iatt].var].lname, @@ -1206,7 +1206,7 @@ fstrstr( *cp = '\0'; was_print = 1; } else { - sprintf(tstr, "char(%d)", (unsigned char)*istr); + snprintf(tstr, sizeof(tstr), "char(%d)", (unsigned char)*istr); strcat(cp, tstr); cp += strlen(tstr); was_print = 0; @@ -1239,7 +1239,7 @@ fstrstr( *cp++ = '\''; *cp = '\0'; } - sprintf(tstr, "//char(%d)", (unsigned char)*istr); + snprintf(tstr, sizeof(tstr), "//char(%d)", (unsigned char)*istr); strcat(cp, tstr); cp += strlen(tstr); was_print = 0; @@ -1346,13 +1346,13 @@ cl_fortran(void) if (have_rec_var) { fline(" "); fline("* Write record variables"); - sprintf(stmnt, "call writerecs(ncid,"); + snprintf(stmnt, sizeof(stmnt), "call writerecs(ncid,"); /* generate parameter list for subroutine to write record vars */ for (ivar = 0; ivar < nvars; ivar++) { struct vars *v = &vars[ivar]; /* if a record variable, include id in parameter list */ if (v->ndims > 0 && v->dims[0] == rec_dim) { - sprintf(s2, "%s_id,", v->lname); + snprintf(s2, sizeof(s2), "%s_id,", v->lname); strcat(stmnt, s2); } } @@ -1372,11 +1372,11 @@ cl_fortran(void) fline(" "); if (have_rec_var) { - sprintf(stmnt, "subroutine writerecs(ncid,"); + snprintf(stmnt, sizeof(stmnt), "subroutine writerecs(ncid,"); for (ivar = 0; ivar < nvars; ivar++) { struct vars *v = &vars[ivar]; if (v->ndims > 0 && v->dims[0] == rec_dim) { - sprintf(s2, "%s_id,", v->lname); + snprintf(s2, sizeof(s2), "%s_id,", v->lname); strcat(stmnt, s2); } } @@ -1394,7 +1394,7 @@ cl_fortran(void) for (ivar = 0; ivar < nvars; ivar++) { struct vars *v = &vars[ivar]; if (v->ndims > 0 && v->dims[0] == rec_dim) { - sprintf(stmnt, "integer %s_id", v->lname); + snprintf(stmnt, sizeof(stmnt), "integer %s_id", v->lname); fline(stmnt); } } @@ -1413,9 +1413,9 @@ cl_fortran(void) for (idim = 0; idim < ndims; idim++) { /* if used in a record variable and not record dimension */ if (used_in_rec_var(idim) && dims[idim].size != NC_UNLIMITED) { - sprintf(stmnt, "integer %s_len", dims[idim].lname); + snprintf(stmnt, sizeof(stmnt), "integer %s_len", dims[idim].lname); fline(stmnt); - sprintf(stmnt, "parameter (%s_len = %lu)", + snprintf(stmnt, sizeof(stmnt), "parameter (%s_len = %lu)", dims[idim].lname, (unsigned long) dims[idim].size); fline(stmnt); } @@ -1426,14 +1426,14 @@ cl_fortran(void) for (ivar = 0; ivar < nvars; ivar++) { struct vars *v = &vars[ivar]; if (v->ndims > 0 && v->dims[0] == rec_dim) { - sprintf(stmnt, "integer %s_rank", v->lname); + snprintf(stmnt, sizeof(stmnt), "integer %s_rank", v->lname); fline(stmnt); } } for (ivar = 0; ivar < nvars; ivar++) { struct vars *v = &vars[ivar]; if (v->ndims > 0 && v->dims[0] == rec_dim) { - sprintf(stmnt, "parameter (%s_rank = %d)", v->lname, + snprintf(stmnt, sizeof(stmnt), "parameter (%s_rank = %d)", v->lname, v->ndims); fline(stmnt); } @@ -1443,7 +1443,7 @@ cl_fortran(void) for (ivar = 0; ivar < nvars; ivar++) { struct vars *v = &vars[ivar]; if (v->ndims > 0 && v->dims[0] == rec_dim) { - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), "integer %s_start(%s_rank), %s_count(%s_rank)", v->lname, v->lname, v->lname, v->lname); fline(stmnt); @@ -1459,25 +1459,25 @@ cl_fortran(void) char *sp; fline(" "); - sprintf(stmnt, "integer %s_nr", v->lname); + snprintf(stmnt, sizeof(stmnt), "integer %s_nr", v->lname); fline(stmnt); if (v->nrecs > 0) { - sprintf(stmnt, "parameter (%s_nr = %lu)", + snprintf(stmnt, sizeof(stmnt), "parameter (%s_nr = %lu)", v->lname, (unsigned long) v->nrecs); } else { - sprintf(stmnt, "parameter (%s_nr = 1)", + snprintf(stmnt, sizeof(stmnt), "parameter (%s_nr = 1)", v->lname); } fline(stmnt); if (v->type != NC_CHAR) { - sprintf(stmnt, "%s %s(", ncftype(v->type), + snprintf(stmnt, sizeof(stmnt), "%s %s(", ncftype(v->type), v->lname); /* reverse dimensions for FORTRAN */ for (idim = v->ndims-1; idim >= 0; idim--) { if(v->dims[idim] == rec_dim) { - sprintf(s2, "%s_nr, ", v->lname); + snprintf(s2, sizeof(s2), "%s_nr, ", v->lname); } else { - sprintf(s2, "%s_len, ", + snprintf(s2, sizeof(s2), "%s_len, ", dims[v->dims[idim]].lname); } strcat(stmnt, s2); @@ -1507,7 +1507,7 @@ cl_fortran(void) for (idim = 1; idim < v->ndims; idim++) { rec_len *= dims[v->dims[idim]].size; } - sprintf(stmnt,"data %s /%lu * %s/", v->lname, + snprintf(stmnt, sizeof(stmnt),"data %s /%lu * %s/", v->lname, (unsigned long) rec_len, f_fill_name(v->type)); fline(stmnt); @@ -1521,28 +1521,28 @@ cl_fortran(void) if (v->ndims > 0 && v->dims[0] == rec_dim) { if (!v->has_data) continue; - sprintf(stmnt, "* store %s", v->name); + snprintf(stmnt, sizeof(stmnt), "* store %s", v->name); fline(stmnt); for (idim = 0; idim < v->ndims; idim++) { - sprintf(stmnt, "%s_start(%d) = 1", v->lname, idim+1); + snprintf(stmnt, sizeof(stmnt), "%s_start(%d) = 1", v->lname, idim+1); fline(stmnt); } for (idim = v->ndims-1; idim > 0; idim--) { - sprintf(stmnt, "%s_count(%d) = %s_len", v->lname, + snprintf(stmnt, sizeof(stmnt), "%s_count(%d) = %s_len", v->lname, v->ndims - idim, dims[v->dims[idim]].lname); fline(stmnt); } - sprintf(stmnt, "%s_count(%d) = %s_nr", v->lname, + snprintf(stmnt, sizeof(stmnt), "%s_count(%d) = %s_nr", v->lname, v->ndims, v->lname); fline(stmnt); if (v->type != NC_CHAR) { - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), "iret = nf_put_vara_%s(ncid, %s_id, %s_start, %s_count, %s)", nfftype(v->type), v->lname, v->lname, v->lname, v->lname); } else { - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), "iret = nf_put_vara_%s(ncid, %s_id, %s_start, %s_count, %s)", nfftype(v->type), v->lname, v->lname, v->lname, v->data_stmnt); diff --git a/ncgen3/load.c b/ncgen3/load.c index 634751d66..df0db88ee 100644 --- a/ncgen3/load.c +++ b/ncgen3/load.c @@ -77,22 +77,22 @@ gen_load_c( return; cline(""); - sprintf(stmnt, " {\t\t\t/* store %s */", vars[varnum].name); + snprintf(stmnt, sizeof(stmnt), " {\t\t\t/* store %s */", vars[varnum].name); cline(stmnt); if (vars[varnum].ndims > 0) { if (vars[varnum].dims[0] == rec_dim) { - sprintf(stmnt, " static size_t %s_start[RANK_%s];", + snprintf(stmnt, sizeof(stmnt), " static size_t %s_start[RANK_%s];", vars[varnum].lname, vars[varnum].lname); cline(stmnt); - sprintf(stmnt, " static size_t %s_count[RANK_%s];", + snprintf(stmnt, sizeof(stmnt), " static size_t %s_count[RANK_%s];", vars[varnum].lname, vars[varnum].lname); cline(stmnt); } /* load variable with data values using static initialization */ - sprintf(stmnt, " static %s %s[] = {", + snprintf(stmnt, sizeof(stmnt), " static %s %s[] = {", ncctype(vars[varnum].type), vars[varnum].lname); @@ -100,7 +100,7 @@ gen_load_c( switch (vars[varnum].type) { case NC_CHAR: val_string = cstrstr((char *) rec_start, var_len); - sprintf(s2, "%s", val_string); + snprintf(s2, sizeof(s2), "%s", val_string); strlcat(stmnt, s2, C_MAX_STMNT); free(val_string); break; @@ -127,23 +127,23 @@ gen_load_c( switch (vars[varnum].type) { case NC_BYTE: assert(charvalp != NULL); - sprintf(s2, "%d, ", *charvalp++); + snprintf(s2, sizeof(s2), "%d, ", *charvalp++); break; case NC_SHORT: assert(shortvalp != NULL); - sprintf(s2, "%d, ", *shortvalp++); + snprintf(s2, sizeof(s2), "%d, ", *shortvalp++); break; case NC_INT: assert(intvalp != NULL); - sprintf(s2, "%ld, ", (long)*intvalp++); + snprintf(s2, sizeof(s2), "%ld, ", (long)*intvalp++); break; case NC_FLOAT: assert(floatvalp != NULL); - sprintf(s2, "%.8g, ", *floatvalp++); + snprintf(s2, sizeof(s2), "%.8g, ", *floatvalp++); break; case NC_DOUBLE: assert(doublevalp != NULL); - sprintf(s2, "%#.16g", *doublevalp++); + snprintf(s2, sizeof(s2), "%#.16g", *doublevalp++); tztrim(s2); strcat(s2, ", "); break; @@ -162,23 +162,23 @@ gen_load_c( switch (vars[varnum].type) { case NC_BYTE: assert(charvalp != NULL); - sprintf(s2, "%d", *charvalp); + snprintf(s2, sizeof(s2), "%d", *charvalp); break; case NC_SHORT: assert(shortvalp != NULL); - sprintf(s2, "%d", *shortvalp); + snprintf(s2, sizeof(s2), "%d", *shortvalp); break; case NC_INT: assert(intvalp != NULL); - sprintf(s2, "%ld", (long)*intvalp); + snprintf(s2, sizeof(s2), "%ld", (long)*intvalp); break; case NC_FLOAT: assert(floatvalp != NULL); - sprintf(s2, "%.8g", *floatvalp); + snprintf(s2, sizeof(s2), "%.8g", *floatvalp); break; case NC_DOUBLE: assert(doublevalp != NULL); - sprintf(s2, "%#.16g", *doublevalp++); + snprintf(s2, sizeof(s2), "%#.16g", *doublevalp++); tztrim(s2); break; default: break; @@ -198,7 +198,7 @@ gen_load_c( cline(stmnt); if (vars[varnum].dims[0] == rec_dim) { - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), " %s_len = %lu; /* number of records of %s data */", dims[rec_dim].lname, (unsigned long)vars[varnum].nrecs, /* number of recs for this variable */ @@ -206,14 +206,14 @@ gen_load_c( cline(stmnt); for (idim = 0; idim < vars[varnum].ndims; idim++) { - sprintf(stmnt, " %s_start[%d] = 0;", + snprintf(stmnt, sizeof(stmnt), " %s_start[%d] = 0;", vars[varnum].lname, idim); cline(stmnt); } for (idim = 0; idim < vars[varnum].ndims; idim++) { - sprintf(stmnt, " %s_count[%d] = %s_len;", + snprintf(stmnt, sizeof(stmnt), " %s_count[%d] = %s_len;", vars[varnum].lname, idim, dims[vars[varnum].dims[idim]].lname); @@ -222,7 +222,7 @@ gen_load_c( } if (vars[varnum].dims[0] == rec_dim) { - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), " stat = nc_put_vara_%s(ncid, %s_id, %s_start, %s_count, %s);", ncstype(vars[varnum].type), vars[varnum].lname, @@ -230,7 +230,7 @@ gen_load_c( vars[varnum].lname, vars[varnum].lname); } else { /* non-record variables */ - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), " stat = nc_put_var_%s(ncid, %s_id, %s);", ncstype(vars[varnum].type), vars[varnum].lname, @@ -239,7 +239,7 @@ gen_load_c( cline(stmnt); } else { /* scalar variables */ /* load variable with data values using static initialization */ - sprintf(stmnt, " static %s %s = ", + snprintf(stmnt, sizeof(stmnt), " static %s %s = ", ncctype(vars[varnum].type), vars[varnum].lname); @@ -247,28 +247,28 @@ gen_load_c( case NC_CHAR: val_string = cstrstr((char *) rec_start, var_len); val_string[strlen(val_string)-1] = '\0'; - sprintf(s2, "'%s'", &val_string[1]); + snprintf(s2, sizeof(s2), "'%s'", &val_string[1]); free(val_string); break; case NC_BYTE: charvalp = (char *) rec_start; - sprintf(s2, "%d", *charvalp); + snprintf(s2, sizeof(s2), "%d", *charvalp); break; case NC_SHORT: shortvalp = (short *) rec_start; - sprintf(s2, "%d", *shortvalp); + snprintf(s2, sizeof(s2), "%d", *shortvalp); break; case NC_INT: intvalp = (int *) rec_start; - sprintf(s2, "%ld", (long)*intvalp); + snprintf(s2, sizeof(s2), "%ld", (long)*intvalp); break; case NC_FLOAT: floatvalp = (float *) rec_start; - sprintf(s2, "%.8g", *floatvalp); + snprintf(s2, sizeof(s2), "%.8g", *floatvalp); break; case NC_DOUBLE: doublevalp = (double *) rec_start; - sprintf(s2, "%#.16g", *doublevalp++); + snprintf(s2, sizeof(s2), "%#.16g", *doublevalp++); tztrim(s2); break; default: break; @@ -276,7 +276,7 @@ gen_load_c( strlcat(stmnt, s2, C_MAX_STMNT); strlcat(stmnt,";", C_MAX_STMNT); cline(stmnt); - sprintf(stmnt, + snprintf(stmnt, sizeof(stmnt), " stat = nc_put_var_%s(ncid, %s_id, &%s);", ncstype(vars[varnum].type), vars[varnum].lname, @@ -345,14 +345,14 @@ f_var_init( int ival; /* load variable with data values */ - sprintf(stmnt, "data %s /",vars[varnum].lname); + snprintf(stmnt, sizeof(stmnt), "data %s /",vars[varnum].lname); stmnt_len = strlen(stmnt); switch (vars[varnum].type) { case NC_BYTE: charvalp = (char *) rec_start; for (ival = 0; ival < var_len-1; ival++) { val_string = fstring(NC_BYTE,(void *)charvalp++,0); - sprintf(s2, "%s, ", val_string); + snprintf(s2, sizeof(s2), "%s, ", val_string); fstrcat(stmnt, s2, &stmnt_len); free(val_string); } @@ -363,40 +363,40 @@ f_var_init( case NC_SHORT: shortvalp = (short *) rec_start; for (ival = 0; ival < var_len-1; ival++) { - sprintf(s2, "%d, ", *shortvalp++); + snprintf(s2, sizeof(s2), "%d, ", *shortvalp++); fstrcat(stmnt, s2, &stmnt_len); } - sprintf(s2, "%d", *shortvalp); + snprintf(s2, sizeof(s2), "%d", *shortvalp); fstrcat(stmnt, s2, &stmnt_len); break; case NC_INT: intvalp = (int *) rec_start; for (ival = 0; ival < var_len-1; ival++) { - sprintf(s2, "%ld, ", (long)*intvalp++); + snprintf(s2, sizeof(s2), "%ld, ", (long)*intvalp++); fstrcat(stmnt, s2, &stmnt_len); } - sprintf(s2, "%ld", (long)*intvalp); + snprintf(s2, sizeof(s2), "%ld", (long)*intvalp); fstrcat(stmnt, s2, &stmnt_len); break; case NC_FLOAT: floatvalp = (float *) rec_start; for (ival = 0; ival < var_len-1; ival++) { - sprintf(s2, "%.8g, ", *floatvalp++); + snprintf(s2, sizeof(s2), "%.8g, ", *floatvalp++); fstrcat(stmnt, s2, &stmnt_len); } - sprintf(s2, "%.8g", *floatvalp); + snprintf(s2, sizeof(s2), "%.8g", *floatvalp); fstrcat(stmnt, s2, &stmnt_len); break; case NC_DOUBLE: doublevalp = (double *) rec_start; for (ival = 0; ival < var_len-1; ival++) { - sprintf(s2, "%#.16g", *doublevalp++); + snprintf(s2, sizeof(s2), "%#.16g", *doublevalp++); tztrim(s2); expe2d(s2); /* change 'e' to 'd' in exponent */ fstrcat(s2, ", ", &stmnt_len); fstrcat(stmnt, s2, &stmnt_len); } - sprintf(s2, "%#.16g", *doublevalp++); + snprintf(s2, sizeof(s2), "%#.16g", *doublevalp++); tztrim(s2); expe2d(s2); fstrcat(stmnt, s2, &stmnt_len); @@ -432,7 +432,7 @@ gen_load_fortran( return; if (v->ndims == 0 || v->dims[0] != rec_dim) { - sprintf(stmnt, "* store %s", v->name); + snprintf(stmnt, sizeof(stmnt), "* store %s", v->name); fline(stmnt); } @@ -447,7 +447,7 @@ gen_load_fortran( return; } if (v->type != NC_CHAR) { - sprintf(stmnt, "iret = nf_put_var_%s(ncid, %s_id, %s)", + snprintf(stmnt, sizeof(stmnt), "iret = nf_put_var_%s(ncid, %s_id, %s)", nfftype(v->type), v->lname, v->lname); } else { char *char_expr = fstrstr(rec_start, valnum); @@ -459,7 +459,7 @@ gen_load_fortran( v->lname); exit(9); } - sprintf(stmnt, "iret = nf_put_var_%s(ncid, %s_id, %s)", + snprintf(stmnt, sizeof(stmnt), "iret = nf_put_var_%s(ncid, %s_id, %s)", nfftype(v->type), v->lname, char_expr); free(char_expr); } diff --git a/ncgen3/ncgen.l b/ncgen3/ncgen.l index 42490f72b..9c304f403 100644 --- a/ncgen3/ncgen.l +++ b/ncgen3/ncgen.l @@ -181,12 +181,12 @@ FloatInf|-?Inff { /* missing value (pre-2.4 backward compatibility) */ [+-]?[0-9]*[0-9][Bb] { int ii; if (sscanf((char*)yytext, "%d", &ii) != 1) { - sprintf(errstr,"bad byte constant: %s",(char*)yytext); + snprintf(errstr, sizeof(errstr),"bad byte constant: %s",(char*)yytext); yyerror(errstr); } byte_val = ii; if (ii != (int)byte_val) { - sprintf(errstr,"byte constant out of range (-128,127): %s",(char*)yytext); + snprintf(errstr, sizeof(errstr),"byte constant out of range (-128,127): %s",(char*)yytext); yyerror(errstr); } return (BYTE_CONST); @@ -194,14 +194,14 @@ FloatInf|-?Inff { /* missing value (pre-2.4 backward compatibility) */ [+-]?[0-9]*\.[0-9]*{exp}?[LlDd]?|[+-]?[0-9]*{exp}[LlDd]? { if (sscanf((char*)yytext, "%le", &double_val) != 1) { - sprintf(errstr,"bad long or double constant: %s",(char*)yytext); + snprintf(errstr, sizeof(errstr),"bad long or double constant: %s",(char*)yytext); yyerror(errstr); } return (DOUBLE_CONST); } [+-]?[0-9]*\.[0-9]*{exp}?[Ff]|[+-]?[0-9]*{exp}[Ff] { if (sscanf((char*)yytext, "%e", &float_val) != 1) { - sprintf(errstr,"bad float constant: %s",(char*)yytext); + snprintf(errstr, sizeof(errstr),"bad float constant: %s",(char*)yytext); yyerror(errstr); } return (FLOAT_CONST); @@ -209,7 +209,7 @@ FloatInf|-?Inff { /* missing value (pre-2.4 backward compatibility) */ [+-]?[0-9]+[sS]|0[xX][0-9a-fA-F]+[sS] { int tmp = 0; if (sscanf((char*)yytext, "%d", &tmp) != 1) { - sprintf(errstr,"bad short constant: %s",(char*)yytext); + snprintf(errstr, sizeof(errstr),"bad short constant: %s",(char*)yytext); yyerror(errstr); } short_val = (short)tmp; @@ -220,7 +220,7 @@ FloatInf|-?Inff { /* missing value (pre-2.4 backward compatibility) */ errno = 0; double_val = strtod((char*)yytext, &ptr); if (errno != 0 && double_val == 0.0) { - sprintf(errstr,"bad numerical constant: %s",(char*)yytext); + snprintf(errstr, sizeof(errstr),"bad numerical constant: %s",(char*)yytext); yyerror(errstr); } if (double_val < XDR_INT_MIN ||double_val > XDR_INT_MAX) { @@ -236,7 +236,7 @@ FloatInf|-?Inff { /* missing value (pre-2.4 backward compatibility) */ errno = 0; long_val = strtol((char*)yytext, &ptr, 0); if (errno != 0) { - sprintf(errstr,"bad long constant: %s",(char*)yytext); + snprintf(errstr, sizeof(errstr),"bad long constant: %s",(char*)yytext); yyerror(errstr); } if (long_val < XDR_INT_MIN || long_val > XDR_INT_MAX) { diff --git a/ncgen3/ncgenl.c b/ncgen3/ncgenl.c index 6178f25d0..1db8ff1d6 100644 --- a/ncgen3/ncgenl.c +++ b/ncgen3/ncgenl.c @@ -1347,12 +1347,12 @@ YY_RULE_SETUP { int ii; if (sscanf((char*)ncgtext, "%d", &ii) != 1) { - sprintf(errstr,"bad byte constant: %s",(char*)ncgtext); + snprintf(errstr,sizeof(errstr),"bad byte constant: %s",(char*)ncgtext); yyerror(errstr); } byte_val = ii; if (ii != (int)byte_val) { - sprintf(errstr,"byte constant out of range (-128,127): %s",(char*)ncgtext); + snprintf(errstr,sizeof(errstr),"byte constant out of range (-128,127): %s",(char*)ncgtext); yyerror(errstr); } return (BYTE_CONST); @@ -1363,7 +1363,7 @@ YY_RULE_SETUP #line 195 "ncgen.l" { if (sscanf((char*)ncgtext, "%le", &double_val) != 1) { - sprintf(errstr,"bad long or double constant: %s",(char*)ncgtext); + snprintf(errstr,sizeof(errstr),"bad long or double constant: %s",(char*)ncgtext); yyerror(errstr); } return (DOUBLE_CONST); @@ -1374,7 +1374,7 @@ YY_RULE_SETUP #line 202 "ncgen.l" { if (sscanf((char*)ncgtext, "%e", &float_val) != 1) { - sprintf(errstr,"bad float constant: %s",(char*)ncgtext); + snprintf(errstr,sizeof(errstr),"bad float constant: %s",(char*)ncgtext); yyerror(errstr); } return (FLOAT_CONST); @@ -1386,7 +1386,7 @@ YY_RULE_SETUP { int tmp = 0; if (sscanf((char*)ncgtext, "%d", &tmp) != 1) { - sprintf(errstr,"bad short constant: %s",(char*)ncgtext); + snprintf(errstr,sizeof(errstr),"bad short constant: %s",(char*)ncgtext); yyerror(errstr); } short_val = (short)tmp; @@ -1401,7 +1401,7 @@ YY_RULE_SETUP errno = 0; double_val = strtod((char*)ncgtext, &ptr); if (errno != 0 && double_val == 0.0) { - sprintf(errstr,"bad numerical constant: %s",(char*)ncgtext); + snprintf(errstr,sizeof(errstr),"bad numerical constant: %s",(char*)ncgtext); yyerror(errstr); } if (double_val < XDR_INT_MIN ||double_val > XDR_INT_MAX) { @@ -1421,7 +1421,7 @@ YY_RULE_SETUP errno = 0; long_val = strtol((char*)ncgtext, &ptr, 0); if (errno != 0) { - sprintf(errstr,"bad long constant: %s",(char*)ncgtext); + snprintf(errstr,sizeof(errstr),"bad long constant: %s",(char*)ncgtext); yyerror(errstr); } if (long_val < XDR_INT_MIN || long_val > XDR_INT_MAX) { diff --git a/ncgen3/ncgeny.c b/ncgen3/ncgeny.c index 494a62642..2e87109d0 100644 --- a/ncgen3/ncgeny.c +++ b/ncgen3/ncgeny.c @@ -1082,7 +1082,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, return 1; } - /* Avoid sprintf, as that infringes on the user's name space. + /* Avoid snprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { diff --git a/nctest/driver.c b/nctest/driver.c index 716a17809..20c68b103 100644 --- a/nctest/driver.c +++ b/nctest/driver.c @@ -86,7 +86,7 @@ main(int argc, char **argv) continue; /* Come up with a test file name. */ - sprintf(testfile, "nctest_%s.nc", format_name[i]); + snprintf(testfile, sizeof(testfile), "nctest_%s.nc", format_name[i]); printf("Testing %s with file %s.\n", format_name[i], testfile); /* Set the default format. */ diff --git a/nczarr_test/bm_chunks3.c b/nczarr_test/bm_chunks3.c index 9a34bda33..66d0b64a0 100644 --- a/nczarr_test/bm_chunks3.c +++ b/nczarr_test/bm_chunks3.c @@ -348,10 +348,10 @@ test(Tag tag, int reading, int ncid, int varid, int rank, int index, size_t* dim count[index] = 1; if(chunks != NULL) - sprintf(time_mess,"%s %s %3ld %3ld %3ld %3ld %3ld %3ld", tagnames[tag], rwnames[reading], + snprintf(time_mess, sizeof(time_mess),"%s %s %3ld %3ld %3ld %3ld %3ld %3ld", tagnames[tag], rwnames[reading], count[0], count[1], count[2], chunks[0], chunks[1], chunks[2]); else - sprintf(time_mess,"%s %s %3ld %3ld %3ld", tagnames[tag], rwnames[reading], + snprintf(time_mess, sizeof(time_mess),"%s %s %3ld %3ld %3ld", tagnames[tag], rwnames[reading], count[0], count[1], count[2]); TIMING_START ; diff --git a/nczarr_test/test_zchunks.c b/nczarr_test/test_zchunks.c index 7307910af..5e7cf6213 100644 --- a/nczarr_test/test_zchunks.c +++ b/nczarr_test/test_zchunks.c @@ -110,7 +110,7 @@ main(int argc, char **argv) for (d = 0; d < NUM_DIM; d++) { - sprintf(dim_name, "dim_%d", dim_len[d]); + snprintf(dim_name, sizeof(dim_name), "dim_%d", dim_len[d]); #ifdef PRINT_DEFAULT_CHUNKSIZE_TABLE printf("creating dim[%d] %s = %d\n", d, dim_name, dim_len[d]); #endif @@ -119,7 +119,7 @@ main(int argc, char **argv) for (t = 0; t < NUM_TYPE; t++) { - sprintf(var_name, "var_%d", type_id[t]); + snprintf(var_name, sizeof(var_name), "var_%d", type_id[t]); if (nc_def_var(ncid, var_name, type_id[t], NUM_DIM, dimid, &varid[t])) ERR; if (nc_inq_var_chunking(ncid, varid[t], &storage, chunksize_in)) ERR; #ifdef PRINT_DEFAULT_CHUNKSIZE_TABLE @@ -142,7 +142,7 @@ main(int argc, char **argv) for (t = 0; t < NUM_TYPE; t++) { - sprintf(var_name, "var_%d", type_id[t]); + snprintf(var_name, sizeof(var_name), "var_%d", type_id[t]); if (nc_inq_var_chunking(ncid, varid[t], &storage, chunksize_in)) ERR; if (storage) ERR; #ifdef PRINT_DEFAULT_CHUNKSIZE_TABLE @@ -242,7 +242,7 @@ main(int argc, char **argv) /* Oh that tricky Cardinal Richelieu, he had many plans! */ for (i = 0; i < NUM_PLANS; i++) { - sprintf(plan_name, "Richelieu_sneaky_plan_%d", i); + snprintf(plan_name, sizeof(plan_name), "Richelieu_sneaky_plan_%d", i); if (nc_def_var(ncid, plan_name, i % (NC_STRING - 1) + 1, NDIMS_3, dimids, &varid[i])) ERR; if (nc_def_var_chunking(ncid, varid[i], 0, chunksize)) ERR; diff --git a/nczarr_test/test_zchunks2.c b/nczarr_test/test_zchunks2.c index 54963761c..271756d13 100644 --- a/nczarr_test/test_zchunks2.c +++ b/nczarr_test/test_zchunks2.c @@ -165,7 +165,7 @@ main(int argc, char **argv) /* Create a few dimensions. */ for (d = 0; d < NDIMS3; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } @@ -203,7 +203,7 @@ main(int argc, char **argv) /* Create a few dimensions. */ for (d = 0; d < NDIMS3; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } @@ -241,7 +241,7 @@ main(int argc, char **argv) /* Create a few dimensions. */ for (d = 0; d < NDIMS3; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } @@ -282,7 +282,7 @@ main(int argc, char **argv) /* Create a few dimensions. */ for (d = 0; d < NDIMS3; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } @@ -322,7 +322,7 @@ main(int argc, char **argv) /* Create a few dimensions. */ for (d = 0; d < NDIMS3; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } @@ -364,7 +364,7 @@ main(int argc, char **argv) for (d = 0; d < NDIMS3; d++) { dim_len[d] = rand(); - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } @@ -403,7 +403,7 @@ main(int argc, char **argv) /* Create a few dimensions. */ for (d = 0; d < NDIMS3; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } @@ -442,7 +442,7 @@ main(int argc, char **argv) /* Create a few dimensions. */ for (d = 0; d < NDIMS3; d++) { - sprintf(dim_name, "dim_%d", d); + snprintf(dim_name, sizeof(dim_name), "dim_%d", d); if (nc_def_dim(ncid, dim_name, dim_len[d], &dimids[d])) ERR; } diff --git a/oc2/dapparse.c b/oc2/dapparse.c index 8d039ad55..9a4517f79 100644 --- a/oc2/dapparse.c +++ b/oc2/dapparse.c @@ -104,7 +104,7 @@ dap_unrecognizedresponse(DAPparsestate* state) int i; char iv[32]; (void)sscanf(state->lexstate->input,"%u ",&httperr); - sprintf(iv,"%u",httperr); + snprintf(iv,sizeof(iv),"%u",httperr); state->lexstate->next = state->lexstate->input; /* Limit the amount of input to prevent runaway */ for(i=0;i<4096;i++) {if(state->lexstate->input[i] == '\0') break;} @@ -256,7 +256,7 @@ char* dimnameanon(char* basename, unsigned int index) { char name[64]; - sprintf(name,"%s_%d",basename,index); + snprintf(name,sizeof(name),"%s_%d",basename,index); return strdup(name); } diff --git a/oc2/dapy.c b/oc2/dapy.c index fc7c45d1f..c9883f980 100644 --- a/oc2/dapy.c +++ b/oc2/dapy.c @@ -1110,7 +1110,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, return 1; } - /* Avoid sprintf, as that infringes on the user's name space. + /* Avoid snprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { diff --git a/oc2/ocdump.c b/oc2/ocdump.c index cde4df3fd..a87dca972 100644 --- a/oc2/ocdump.c +++ b/oc2/ocdump.c @@ -259,27 +259,27 @@ dumpfield(size_t index, char* n8, int isxdr) line[0] = '\0'; /* offset */ - sprintf(tmp,"%6zd",index); + snprintf(tmp,sizeof(tmp),"%6zd",index); addfield(tmp,sizeof(line),line,5); memcpy(form.cv,n8,4); /* straight hex*/ - sprintf(tmp,"%08x",form.uv); + snprintf(tmp,sizeof(tmp),"%08x",form.uv); addfield(tmp,sizeof(line),line,8); if(isxdr) {swapinline32(&form.uv);} /* unsigned integer */ - sprintf(tmp,"%12u",form.uv); + snprintf(tmp,sizeof(tmp),"%12u",form.uv); addfield(tmp,sizeof(line),line,12); /* signed integer */ - sprintf(tmp,"%12d",form.sv); + snprintf(tmp,sizeof(tmp),"%12d",form.sv); addfield(tmp,sizeof(line),line,12); /* float */ - sprintf(tmp,"%#g",form.fv); + snprintf(tmp,sizeof(tmp),"%#g",form.fv); addfield(tmp,sizeof(line),line,12); /* char[4] */ @@ -303,7 +303,7 @@ dumpfield(size_t index, char* n8, int isxdr) /* double */ memcpy(dform.cv,n8,(size_t)(2*XDRUNIT)); if(isxdr) xxdrntohdouble(dform.cv,&dform.d); - sprintf(tmp,"%#g",dform.d); + snprintf(tmp,sizeof(tmp),"%#g",dform.d); addfield(tmp,sizeof(line),line,12); fprintf(stdout,"%s\n",line); @@ -378,11 +378,11 @@ simplememorydump(char* memory, size_t len, int fromxdr) unsigned int v = vx; if(!xxdr_network_order) swapinline32(&v); line[0] = '\0'; - sprintf(tmp,"%6d",i); + snprintf(tmp,sizeof(tmp),"%6d",i); addfield(tmp,sizeof(line),line,6); - sprintf(tmp,"%08x",vx); + snprintf(tmp,sizeof(tmp),"%08x",vx); addfield(tmp,sizeof(line),line,9); - sprintf(tmp,"%08x",v); + snprintf(tmp,sizeof(tmp),"%08x",v); addfield(tmp,sizeof(line),line,10); fprintf(stdout,"%s\n",line); } From adc4dc143514fb498cfd92c74fc00e18ada74c16 Mon Sep 17 00:00:00 2001 From: Sean McBride Date: Sun, 30 Apr 2023 18:36:39 -0400 Subject: [PATCH 20/35] Replaced some sprintf with snprintf with aid of new variable containing size One case required slightly complicated accounting of how much space is left in the buffer. --- libhdf5/hdf5var.c | 7 ++--- libnczarr/zvar.c | 7 ++--- nc_test/tst_def_var_fill.c | 5 ++-- ncdump/dumplib.c | 6 +++-- ncgen/util.c | 10 +++++--- ncgen3/genlib.c | 52 +++++++++++++++++++++++--------------- 6 files changed, 53 insertions(+), 34 deletions(-) diff --git a/libhdf5/hdf5var.c b/libhdf5/hdf5var.c index 6d37fe909..6c2303ec4 100644 --- a/libhdf5/hdf5var.c +++ b/libhdf5/hdf5var.c @@ -121,11 +121,12 @@ give_var_secret_name(NC_VAR_INFO_T *var, const char *name) * clash. */ if (strlen(name) + strlen(NON_COORD_PREPEND) > NC_MAX_NAME) return NC_EMAXNAME; - if (!(var->alt_name = malloc((strlen(NON_COORD_PREPEND) + - strlen(name) + 1) * sizeof(char)))) + size_t alt_name_size = (strlen(NON_COORD_PREPEND) + strlen(name) + 1) * + sizeof(char); + if (!(var->alt_name = malloc(alt_name_size))) return NC_ENOMEM; - sprintf(var->alt_name, "%s%s", NON_COORD_PREPEND, name); + snprintf(var->alt_name, alt_name_size, "%s%s", NON_COORD_PREPEND, name); return NC_NOERR; } diff --git a/libnczarr/zvar.c b/libnczarr/zvar.c index 27e30a9f1..5076ff740 100644 --- a/libnczarr/zvar.c +++ b/libnczarr/zvar.c @@ -239,11 +239,12 @@ give_var_secret_name(NC_VAR_INFO_T *var, const char *name) * clash. */ if (strlen(name) + strlen(NON_COORD_PREPEND) > NC_MAX_NAME) return NC_EMAXNAME; - if (!(var->ncz_name = malloc((strlen(NON_COORD_PREPEND) + - strlen(name) + 1) * sizeof(char)))) + size_t ncz_name_size = (strlen(NON_COORD_PREPEND) + strlen(name) + 1) * + sizeof(char); + if (!(var->ncz_name = malloc(ncz_name_size))) return NC_ENOMEM; - sprintf(var->ncz_name, "%s%s", NON_COORD_PREPEND, name); + snprintf(var->ncz_name, ncz_name_size, "%s%s", NON_COORD_PREPEND, name); return NC_NOERR; } diff --git a/nc_test/tst_def_var_fill.c b/nc_test/tst_def_var_fill.c index 5c3248542..425d563c8 100644 --- a/nc_test/tst_def_var_fill.c +++ b/nc_test/tst_def_var_fill.c @@ -46,8 +46,9 @@ int main(int argc, char** argv) { if (argc == 2) snprintf(filename, 256, "%s", argv[1]); else strcpy(filename, "tst_def_var_fill.nc"); - char *cmd_str = (char*)malloc(strlen(argv[0]) + 256); - sprintf(cmd_str, "*** TESTING C %s for def_var_fill ", argv[0]); + size_t cmd_str_len = strlen(argv[0]) + 256; + char *cmd_str = (char*)malloc(cmd_str_len); + snprintf(cmd_str, cmd_str_len, "*** TESTING C %s for def_var_fill ", argv[0]); printf("%-66s ------ ", cmd_str); fflush(stdout); free(cmd_str); diff --git a/ncdump/dumplib.c b/ncdump/dumplib.c index 03fe3b278..b157937d1 100644 --- a/ncdump/dumplib.c +++ b/ncdump/dumplib.c @@ -1034,7 +1034,8 @@ chars_tostring( { long iel; const char *sp; - char *sout = (char *)emalloc(4*len + 5); /* max len of string */ + size_t sout_size = 4*len + 5; /* max len of string */ + char *sout = (char *)emalloc(sout_size); char *cp = sout; *cp++ = '"'; @@ -1061,7 +1062,8 @@ chars_tostring( if (isprint(uc)) *cp++ = *(char *)&uc; /* just copy, even if char is signed */ else { - sprintf(cp,"\\%.3o",uc); + size_t remaining = sout_size - (cp - sout); + snprintf(cp,remaining,"\\%.3o",uc); cp += 4; } break; diff --git a/ncgen/util.c b/ncgen/util.c index 108fff044..589582c61 100644 --- a/ncgen/util.c +++ b/ncgen/util.c @@ -174,8 +174,9 @@ nctypename(nc_type nctype) return nctypenamesextend[(nctype - NC_GRP)]; if(nctype == NC_FILLVALUE) return "NC_FILL"; if(nctype == NC_NIL) return "NC_NIL"; - s = poolalloc(128); - sprintf(s,"NC_<%d>",nctype); + const size_t s_size = 128; + s = poolalloc(s_size); + snprintf(s,s_size,"NC_<%d>",nctype); return s; } @@ -195,8 +196,9 @@ ncclassname(nc_class ncc) if(ncc == NC_FILLVALUE) return "NC_FILL"; if(ncc >= NC_GRP && ncc <= NC_PRIM) return ncclassnames[ncc - NC_GRP]; - s = poolalloc(128); - sprintf(s,"NC_<%d>",ncc); + const size_t s_size = 128; + s = poolalloc(s_size); + snprintf(s,s_size,"NC_<%d>",ncc); return s; } diff --git a/ncgen3/genlib.c b/ncgen3/genlib.c index ead98b08d..9c9f987c6 100644 --- a/ncgen3/genlib.c +++ b/ncgen3/genlib.c @@ -129,6 +129,7 @@ cstring( int *intp; float *floatp; double *doublep; + size_t cp_size; switch (type) { case NC_CHAR: @@ -162,34 +163,39 @@ cstring( return sp; case NC_BYTE: - cp = (char *) emalloc (7); + cp_size = 7; + cp = (char *) emalloc (cp_size); bytep = (signed char *)valp; /* Need to convert '\377' to -1, for example, on all platforms */ - (void) sprintf(cp,"%d", (signed char) *(bytep+num)); + (void) snprintf(cp,cp_size,"%d", (signed char) *(bytep+num)); return cp; case NC_SHORT: - cp = (char *) emalloc (10); + cp_size = 10; + cp = (char *) emalloc (cp_size); shortp = (short *)valp; - (void) sprintf(cp,"%d",* (shortp + num)); + (void) snprintf(cp,cp_size,"%d",* (shortp + num)); return cp; case NC_INT: - cp = (char *) emalloc (20); + cp_size = 20; + cp = (char *) emalloc (cp_size); intp = (int *)valp; - (void) sprintf(cp,"%d",* (intp + num)); + (void) snprintf(cp,cp_size,"%d",* (intp + num)); return cp; case NC_FLOAT: - cp = (char *) emalloc (20); + cp_size = 20; + cp = (char *) emalloc (cp_size); floatp = (float *)valp; - (void) sprintf(cp,"%.8g",* (floatp + num)); + (void) snprintf(cp,cp_size,"%.8g",* (floatp + num)); return cp; case NC_DOUBLE: - cp = (char *) emalloc (20); + cp_size = 20; + cp = (char *) emalloc (cp_size); doublep = (double *)valp; - (void) sprintf(cp,"%.16g",* (doublep + num)); + (void) snprintf(cp,cp_size,"%.16g",* (doublep + num)); return cp; default: @@ -1046,36 +1052,42 @@ fstring( int *intp; float *floatp; double *doublep; + size_t cp_size; switch (type) { case NC_BYTE: - cp = (char *) emalloc (10); + cp_size = 10; + cp = (char *) emalloc (cp_size); schp = (signed char *)valp; - sprintf(cp,"%d", schp[num]); + snprintf(cp,cp_size,"%d", schp[num]); return cp; case NC_SHORT: - cp = (char *) emalloc (10); + cp_size = 10; + cp = (char *) emalloc (cp_size); shortp = (short *)valp; - (void) sprintf(cp,"%d",* (shortp + num)); + (void) snprintf(cp,cp_size,"%d",* (shortp + num)); return cp; case NC_INT: - cp = (char *) emalloc (20); + cp_size = 20; + cp = (char *) emalloc (cp_size); intp = (int *)valp; - (void) sprintf(cp,"%d",* (intp + num)); + (void) snprintf(cp,cp_size,"%d",* (intp + num)); return cp; case NC_FLOAT: - cp = (char *) emalloc (20); + cp_size = 20; + cp = (char *) emalloc (cp_size); floatp = (float *)valp; - (void) sprintf(cp,"%.8g",* (floatp + num)); + (void) snprintf(cp,cp_size,"%.8g",* (floatp + num)); return cp; case NC_DOUBLE: - cp = (char *) emalloc (25); + cp_size = 25; + cp = (char *) emalloc (cp_size); doublep = (double *)valp; - (void) sprintf(cp,"%.16g",* (doublep + num)); + (void) snprintf(cp,cp_size,"%.16g",* (doublep + num)); expe2d(cp); /* change 'e' to 'd' in exponent */ return cp; From 4f15a9265e70cf5d8e4b43964cc15bff01358dee Mon Sep 17 00:00:00 2001 From: Sean McBride Date: Sun, 30 Apr 2023 21:04:05 -0400 Subject: [PATCH 21/35] Removed a use of sprintf that required changing a function signature --- include/nctime.h | 4 ++-- libdispatch/nctime.c | 26 +++++++++++++------------- ncdump/dumplib.c | 2 +- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/include/nctime.h b/include/nctime.h index bbab97228..04419efe8 100644 --- a/include/nctime.h +++ b/include/nctime.h @@ -150,14 +150,14 @@ typedef struct timeinfo_t { # define MSC_NCTIME_EXTRA __declspec(dllimport) # endif -MSC_NCTIME_EXTRA extern void cdRel2Iso(cdCalenType timetype, char* relunits, int separator, double reltime, char* chartime); +MSC_NCTIME_EXTRA extern void cdRel2Iso(cdCalenType timetype, char* relunits, int separator, double reltime, char* chartime, size_t chartime_size); MSC_NCTIME_EXTRA extern void cdChar2Comp(cdCalenType timetype, char* chartime, cdCompTime* comptime); MSC_NCTIME_EXTRA extern void Cdh2e(CdTime *htime, double *etime); MSC_NCTIME_EXTRA extern void Cde2h(double etime, CdTimeType timeType, long baseYear, CdTime *htime); MSC_NCTIME_EXTRA extern int cdParseRelunits(cdCalenType timetype, char* relunits, cdUnitTime* unit, cdCompTime* base_comptime); MSC_NCTIME_EXTRA extern int cdSetErrOpts(int opts); #else -extern void cdRel2Iso(cdCalenType timetype, char* relunits, int separator, double reltime, char* chartime); +extern void cdRel2Iso(cdCalenType timetype, char* relunits, int separator, double reltime, char* chartime, size_t chartime_size); extern void cdChar2Comp(cdCalenType timetype, char* chartime, cdCompTime* comptime); extern void Cdh2e(CdTime *htime, double *etime); extern void Cde2h(double etime, CdTimeType timeType, long baseYear, CdTime *htime); diff --git a/libdispatch/nctime.c b/libdispatch/nctime.c index e265ba1f4..cdde2db00 100644 --- a/libdispatch/nctime.c +++ b/libdispatch/nctime.c @@ -1085,7 +1085,7 @@ cdRel2Comp(cdCalenType timetype, char* relunits, double reltime, cdCompTime* com /* rkr: output as ISO 8601 strings */ static void -cdComp2Iso(cdCalenType timetype, int separator, cdCompTime comptime, char* time) +cdComp2Iso(cdCalenType timetype, int separator, cdCompTime comptime, char* time, size_t time_size) { double dtmp, sec; int ihr, imin, isec; @@ -1121,23 +1121,23 @@ cdComp2Iso(cdCalenType timetype, int separator, cdCompTime comptime, char* time) if(timetype & cdStandardCal){ switch (nskip) { case 0: /* sec != 0 && (int)sec != sec */ - sprintf(time,"%4.4ld-%2.2hd-%2.2hd%c%2.2d:%2.2d:%lf", + snprintf(time,time_size,"%4.4ld-%2.2hd-%2.2hd%c%2.2d:%2.2d:%lf", comptime.year,comptime.month,comptime.day,separator,ihr,imin,sec); break; case 1: - sprintf(time,"%4.4ld-%2.2hd-%2.2hd%c%2.2d:%2.2d:%2.2d", + snprintf(time,time_size,"%4.4ld-%2.2hd-%2.2hd%c%2.2d:%2.2d:%2.2d", comptime.year,comptime.month,comptime.day,separator,ihr,imin,isec); break; case 2: - sprintf(time,"%4.4ld-%2.2hd-%2.2hd%c%2.2d:%2.2d", + snprintf(time,time_size,"%4.4ld-%2.2hd-%2.2hd%c%2.2d:%2.2d", comptime.year,comptime.month,comptime.day,separator,ihr,imin); break; case 3: - sprintf(time,"%4.4ld-%2.2hd-%2.2hd%c%2.2d", + snprintf(time,time_size,"%4.4ld-%2.2hd-%2.2hd%c%2.2d", comptime.year,comptime.month,comptime.day,separator,ihr); break; case 4: - sprintf(time,"%4.4ld-%2.2hd-%2.2hd", + snprintf(time,time_size,"%4.4ld-%2.2hd-%2.2hd", comptime.year,comptime.month,comptime.day); break; } @@ -1145,23 +1145,23 @@ cdComp2Iso(cdCalenType timetype, int separator, cdCompTime comptime, char* time) else { /* Climatological */ switch (nskip) { case 0: /* sec != 0 && (int)sec != sec */ - sprintf(time,"%2.2hd-%2.2hd%c%2.2d:%2.2d:%lf", + snprintf(time,time_size,"%2.2hd-%2.2hd%c%2.2d:%2.2d:%lf", comptime.month,comptime.day,separator,ihr,imin,sec); break; case 1: - sprintf(time,"%2.2hd-%2.2hd%c%2.2d:%2.2d:%2.2d", + snprintf(time,time_size,"%2.2hd-%2.2hd%c%2.2d:%2.2d:%2.2d", comptime.month,comptime.day,separator,ihr,imin,isec); break; case 2: - sprintf(time,"%2.2hd-%2.2hd%c%2.2d:%2.2d", + snprintf(time,time_size,"%2.2hd-%2.2hd%c%2.2d:%2.2d", comptime.month,comptime.day,separator,ihr,imin); break; case 3: - sprintf(time,"%2.2hd-%2.2hd%c%2.2d", + snprintf(time,time_size,"%2.2hd-%2.2hd%c%2.2d", comptime.month,comptime.day,separator,ihr); break; case 4: - sprintf(time,"%2.2hd-%2.2hd", + snprintf(time,time_size,"%2.2hd-%2.2hd", comptime.month,comptime.day); break; } @@ -1171,12 +1171,12 @@ cdComp2Iso(cdCalenType timetype, int separator, cdCompTime comptime, char* time) /* rkr: added for output closer to ISO 8601 */ void -cdRel2Iso(cdCalenType timetype, char* relunits, int separator, double reltime, char* chartime) +cdRel2Iso(cdCalenType timetype, char* relunits, int separator, double reltime, char* chartime, size_t chartime_size) { cdCompTime comptime; cdRel2Comp(timetype, relunits, reltime, &comptime); - cdComp2Iso(timetype, separator, comptime, chartime); + cdComp2Iso(timetype, separator, comptime, chartime, chartime_size); return; } diff --git a/ncdump/dumplib.c b/ncdump/dumplib.c index 03fe3b278..e6ca79a9c 100644 --- a/ncdump/dumplib.c +++ b/ncdump/dumplib.c @@ -1270,7 +1270,7 @@ nctime_val_tostring(const ncvar_t *varp, safebuf_t *sfbf, const void *valp) { oldopts = cdSetErrOpts(0); newopts = oldopts | CU_VERBOSE; cdSetErrOpts(newopts); - cdRel2Iso(varp->timeinfo->calendar, varp->timeinfo->units, separator, vv, &sout[1]); + cdRel2Iso(varp->timeinfo->calendar, varp->timeinfo->units, separator, vv, &sout[1], sizeof(sout) - 1); cdSetErrOpts(oldopts); res = strlen(sout); sout[res++] = '"'; From 05cd5565e86881dcf0affa1a45f5269505d44ef6 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Tue, 12 Dec 2023 09:24:49 -0700 Subject: [PATCH 22/35] Fix typo in nc-config.cmake.in --- nc-config.cmake.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nc-config.cmake.in b/nc-config.cmake.in index 8588665d2..144d9b65b 100644 --- a/nc-config.cmake.in +++ b/nc-config.cmake.in @@ -118,7 +118,7 @@ fi has_multifilters="yes" -has_zstd="@HAS_ZSTD" +has_zstd="@HAS_ZSTD@" if [ -z "$has_zstd" -o "$has_zstd" = "OFF" -o "$has_zstd" = "FALSE" ]; then has_zstd="no" else From ed90d500784125755a067de01bdc9e5876f69558 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Tue, 12 Dec 2023 10:04:18 -0700 Subject: [PATCH 23/35] Typo fix in support of gh2824.wif --- CMakeLists.txt | 5 +++-- nc-config.cmake.in | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 189f6d87c..51d84cd19 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1160,7 +1160,8 @@ set_std_filter(Szip) SET(HAVE_SZ ${Szip_FOUND}) set_std_filter(Blosc) IF(Zstd_FOUND) -set_std_filter(Zstd) + set_std_filter(Zstd) + SET(HAVE_ZSTD ON CACHE) ENDIF() IF(Bz2_FOUND) set_std_filter(Bz2) @@ -1168,7 +1169,7 @@ ELSE() # The reason we use a local version is to support a more comples test case MESSAGE("libbz2 not found using built-in version") SET(HAVE_LOCAL_BZ2 ON) - SET(HAVE_BZ2 ON) + SET(HAVE_BZ2 ON CACHE BOOL "") set(STD_FILTERS "${STD_FILTERS} bz2") ENDIF() diff --git a/nc-config.cmake.in b/nc-config.cmake.in index 144d9b65b..15ea967d4 100644 --- a/nc-config.cmake.in +++ b/nc-config.cmake.in @@ -118,7 +118,7 @@ fi has_multifilters="yes" -has_zstd="@HAS_ZSTD@" +has_zstd="@HAVE_ZSTD@" if [ -z "$has_zstd" -o "$has_zstd" = "OFF" -o "$has_zstd" = "FALSE" ]; then has_zstd="no" else From 61c9a8641d7a4cd55f4ecf95dbd7bf0650a50050 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Tue, 12 Dec 2023 10:06:55 -0700 Subject: [PATCH 24/35] Fix cmake syntax typo. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 51d84cd19..c666b4211 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1161,7 +1161,7 @@ SET(HAVE_SZ ${Szip_FOUND}) set_std_filter(Blosc) IF(Zstd_FOUND) set_std_filter(Zstd) - SET(HAVE_ZSTD ON CACHE) + SET(HAVE_ZSTD ON) ENDIF() IF(Bz2_FOUND) set_std_filter(Bz2) From 4673c55a6c53066a55b9de504fc3a2a91e8beded Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Tue, 12 Dec 2023 14:03:36 -0700 Subject: [PATCH 25/35] Catching up on PRs, this is 2431 on the current 'main' --- plugins/Makefile.am | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 5bfdad03c..fc7a98408 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -9,17 +9,7 @@ include $(top_srcdir)/lib_flags.am # for information regarding incrementing `-version-info`. plugin_version_info = -version-info 0:0:0 -AM_LDFLAGS += -module -shared -export-dynamic $(NOUNDEFINED) - -if ISMINGW - AM_LDFLAGS += -avoid-version -else !ISMINGW -if ISCYGWIN -AM_LDFLAGS += -avoid-version -else !ISCYGWIN -AM_LDFLAGS += $(plugin_version_info) -endif !ISCYGWIN -endif !ISMINGW +AM_LDFLAGS += -module -avoid-version -shared -export-dynamic $(NOUNDEFINED) # Create an alternate directory if not installing. ALTPLUGINDIR = ${abs_top_builddir}/plugins/plugindir From 7a2813be7242f736e73f6c84c539ca06048be169 Mon Sep 17 00:00:00 2001 From: JohnD Date: Tue, 12 Dec 2023 18:16:31 -0500 Subject: [PATCH 26/35] Add H5FD_http_finalize function and call on hdf5 finalize Fixes Unidata#2617 --- libhdf5/H5FDhttp.c | 28 +++++++++++++++++++++++++--- libhdf5/H5FDhttp.h | 2 ++ libhdf5/hdf5dispatch.c | 3 +++ 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/libhdf5/H5FDhttp.c b/libhdf5/H5FDhttp.c index c6658f46f..d48aeb8c3 100644 --- a/libhdf5/H5FDhttp.c +++ b/libhdf5/H5FDhttp.c @@ -239,6 +239,31 @@ H5FD_http_init(void) return H5FD_HTTP_g; } /* end H5FD_http_init() */ + +/*------------------------------------------------------------------------- + * Function: H5FD_http_finalize + * + * Purpose: Free this driver by unregistering the driver with the + * library. + * + * Returns: Non-negative on success or negative on failure + * + * Programmer: John Donoghue + * Tuesday, December 12, 2023 + * + *------------------------------------------------------------------------- + */ +EXTERNL hid_t +H5FD_http_finalize(void) +{ + /* Reset VFL ID */ + if (H5FD_HTTP_g) + H5FDunregister(H5FD_HTTP_g); + H5FD_HTTP_g = 0; + + return H5FD_HTTP_g; +} /* end H5FD_http_finalize() */ + /*--------------------------------------------------------------------------- * Function: H5FD_http_term @@ -256,9 +281,6 @@ H5FD_http_init(void) static herr_t H5FD_http_term(void) { - /* Reset VFL ID */ - H5FD_HTTP_g = 0; - return 0; } /* end H5FD_http_term() */ #endif diff --git a/libhdf5/H5FDhttp.h b/libhdf5/H5FDhttp.h index f3c46dca5..ee3d28370 100644 --- a/libhdf5/H5FDhttp.h +++ b/libhdf5/H5FDhttp.h @@ -44,9 +44,11 @@ extern "C" { #if 0 H5_DLL hid_t H5FD_http_init(void); +H5_DLL hid_t H5FD_http_finalize(void); H5_DLL herr_t H5Pset_fapl_http(hid_t fapl_id); #else EXTERNL hid_t H5FD_http_init(void); +EXTERNL hid_t H5FD_http_finalize(void); EXTERNL herr_t H5Pset_fapl_http(hid_t fapl_id); #endif diff --git a/libhdf5/hdf5dispatch.c b/libhdf5/hdf5dispatch.c index 130f0f076..1e8f980da 100644 --- a/libhdf5/hdf5dispatch.c +++ b/libhdf5/hdf5dispatch.c @@ -142,6 +142,9 @@ NC_HDF5_initialize(void) int NC_HDF5_finalize(void) { +#ifdef ENABLE_BYTERANGE + (void)H5FD_http_finalize(); +#endif (void)nc4_hdf5_finalize(); return NC_NOERR; } From 52198b3f123774a9dcfb87b374383872c3a85708 Mon Sep 17 00:00:00 2001 From: wkliao Date: Wed, 20 Apr 2022 00:10:24 -0500 Subject: [PATCH 27/35] count argument in H5Sselect_hyperslab Argument 'count' in NetCDF is not exactly the same as the 'count' in H5Sselect_hyperslabs(space_id, op, start, stride, count, block). When the argument 'stride' is NULL, NetCDF's 'count' should be used in argument 'block', for example, H5Sselect_hyperslabs(space_id, op, start, NULL, ones, count); where 'one' is an array of all 1s. Although using NULL 'block' below H5Sselect_hyperslabs(space_id, op, start, NULL, count, NULL); has the same effect, HDF5 internally stores the space of a subarray as a list of single elements, instead of a "block", which can affect the performance. --- h5_test/tst_h_dimscales2.c | 5 +-- h5_test/tst_h_enums.c | 4 +-- h5_test/tst_h_files.c | 10 +++--- h5_test/tst_h_par.c | 8 +++-- h5_test/tst_h_par_compress.c | 8 +++-- h5_test/tst_h_strings2.c | 7 ++-- h5_test/tst_h_vars.c | 5 +-- libhdf5/hdf5var.c | 37 +++++++++++++++----- libnczarr/zvar.c | 66 +++++++++++++++++++++++++++++++++--- nc_perf/tst_files3.c | 3 +- 10 files changed, 121 insertions(+), 32 deletions(-) diff --git a/h5_test/tst_h_dimscales2.c b/h5_test/tst_h_dimscales2.c index 07592e206..eb7b2dfb5 100644 --- a/h5_test/tst_h_dimscales2.c +++ b/h5_test/tst_h_dimscales2.c @@ -633,6 +633,7 @@ main() hsize_t h5dimlen[DIMS2], h5dimlenmax[DIMS2], xtend_size[DIMS2] = {1, NUM_VALS}; hsize_t start[DIMS2] = {0, 0}; hsize_t count[DIMS2] = {1, NUM_VALS}; + hsize_t ones[DIMS2] = {1, 1}; double value[NUM_VALS]; int dataset_ndims; int i; @@ -661,7 +662,7 @@ main() /* Set up the file and memory spaces. */ if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; if ((mem_spaceid = H5Screate_simple(DIMS2, count, NULL)) < 0) ERR; /* Write a slice of data. */ @@ -683,7 +684,7 @@ main() /* Set up the file and memory spaces for a second slice. */ start[0]++; if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; if ((mem_spaceid = H5Screate_simple(DIMS2, count, NULL)) < 0) ERR; /* Write a second slice of data. */ diff --git a/h5_test/tst_h_enums.c b/h5_test/tst_h_enums.c index 352b4dce3..a107023a4 100644 --- a/h5_test/tst_h_enums.c +++ b/h5_test/tst_h_enums.c @@ -154,7 +154,7 @@ main() char lang[NUM_LANG][STR_LEN + 1] = {"C", "Fortran", "C++", "MISSING"}; enum langs {CLANG=0, Fortran=1, CPP=2, MISSING=255}; short the_value, fill_value = MISSING, data_point = CLANG; - hsize_t start[1] = {1}, count[1] = {1}; + hsize_t start[1] = {1}, count[1] = {1}, one[1] = {1}; int num_members; size_t size; hid_t base_hdf_typeid; @@ -197,7 +197,7 @@ main() if ((mem_spaceid = H5Screate(H5S_SCALAR)) < 0) ERR; if ((file_spaceid = H5Screate_simple(1, dims, NULL)) < 0) ERR; if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, one, count) < 0) ERR; if (H5Dwrite(datasetid, typeid, mem_spaceid, file_spaceid, H5P_DEFAULT, &data_point) < 0) ERR; diff --git a/h5_test/tst_h_files.c b/h5_test/tst_h_files.c index 15765ea5b..51d04ca79 100644 --- a/h5_test/tst_h_files.c +++ b/h5_test/tst_h_files.c @@ -174,7 +174,7 @@ main() #define MILLION 1000000 hid_t fileid, write_spaceid, datasetid, mem_spaceid; - hsize_t start[NDIMS], count[NDIMS]; + hsize_t start[NDIMS], count[NDIMS], ones[NDIMS]; hsize_t dims[1]; int *data; int num_steps; @@ -210,8 +210,9 @@ main() { /* Select hyperslab for write of one slice. */ start[0] = s * SC; + ones[0] = 1; if (H5Sselect_hyperslab(write_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; if (H5Dwrite(datasetid, H5T_NATIVE_INT, mem_spaceid, write_spaceid, H5P_DEFAULT, data) < 0) ERR; @@ -242,7 +243,7 @@ main() hid_t mem_spaceid, xfer_plistid, native_typeid; hsize_t *chunksize, dims[1], maxdims[1], *dimsize, *maxdimsize; hsize_t fdims[MAX_DIMS], fmaxdims[MAX_DIMS]; - hsize_t start[MAX_DIMS], count[MAX_DIMS]; + hsize_t start[MAX_DIMS], count[MAX_DIMS], ones[MAX_DIMS]; char file_name[STR_LEN + 1]; char dimscale_wo_var[STR_LEN]; void *bufr; @@ -342,7 +343,8 @@ main() start[1] = 0; count[0] = 1; count[1] = 2097153; - if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, start, NULL, count, NULL) < 0) ERR; + ones[0] = ones[1] = 1; + if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, start, NULL, ones, count) < 0) ERR; if ((mem_spaceid = H5Screate_simple(NDIMS2, count, NULL)) < 0) ERR; if ((xfer_plistid = H5Pcreate(H5P_DATASET_XFER)) < 0) ERR; if ((native_typeid = H5Tget_native_type(H5T_NATIVE_SCHAR, H5T_DIR_DEFAULT)) < 0) ERR; diff --git a/h5_test/tst_h_par.c b/h5_test/tst_h_par.c index 2d350a453..e8c9c2291 100644 --- a/h5_test/tst_h_par.c +++ b/h5_test/tst_h_par.c @@ -66,7 +66,7 @@ main(int argc, char **argv) printf("*** Creating file for parallel I/O read, and rereading it..."); { hid_t fapl_id, fileid, whole_spaceid, dsid, slice_spaceid, whole_spaceid1, xferid; - hsize_t start[NDIMS], count[NDIMS]; + hsize_t start[NDIMS], count[NDIMS], ones[NDIMS]; hsize_t dims[1]; int data[SC1], data_in[SC1]; int num_steps; @@ -126,8 +126,9 @@ main(int argc, char **argv) /* Select hyperslab for write of one slice. */ start[0] = s * SC1 * p + my_rank * SC1; count[0] = SC1; + ones[0] = 1; if (H5Sselect_hyperslab(whole_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; if (H5Dwrite(dsid, H5T_NATIVE_INT, slice_spaceid, whole_spaceid, xferid, data) < 0) ERR; @@ -185,8 +186,9 @@ main(int argc, char **argv) /* Select hyperslab for read of one slice. */ start[0] = s * SC1 * p + my_rank * SC1; count[0] = SC1; + ones[0] = 1; if (H5Sselect_hyperslab(whole_spaceid1, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) + start, NULL, ones, count) < 0) { ERR; return 2; diff --git a/h5_test/tst_h_par_compress.c b/h5_test/tst_h_par_compress.c index 6a15e6a81..e63475803 100644 --- a/h5_test/tst_h_par_compress.c +++ b/h5_test/tst_h_par_compress.c @@ -51,7 +51,7 @@ main(int argc, char **argv) { hid_t fapl_id, fileid, whole_spaceid, dsid, slice_spaceid, whole_spaceid1, xferid; hid_t plistid; - hsize_t start[NDIMS], count[NDIMS]; + hsize_t start[NDIMS], count[NDIMS], ones[NDIMS]; hsize_t dims[1], chunksize = SC1; int data[SC1], data_in[SC1]; int num_steps; @@ -120,8 +120,9 @@ main(int argc, char **argv) /* Select hyperslab for write of one slice. */ start[0] = s * SC1 * p + my_rank * SC1; count[0] = SC1; + ones[0] = 1; if (H5Sselect_hyperslab(whole_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; if (H5Dwrite(dsid, H5T_NATIVE_INT, slice_spaceid, whole_spaceid, xferid, data) < 0) ERR; @@ -160,8 +161,9 @@ main(int argc, char **argv) /* Select hyperslab for read of one slice. */ start[0] = s * SC1 * p + my_rank * SC1; count[0] = SC1; + ones[0] = 1; if (H5Sselect_hyperslab(whole_spaceid1, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) + start, NULL, ones, count) < 0) { ERR; return 2; diff --git a/h5_test/tst_h_strings2.c b/h5_test/tst_h_strings2.c index 1d03a983c..a451a6ac6 100644 --- a/h5_test/tst_h_strings2.c +++ b/h5_test/tst_h_strings2.c @@ -30,6 +30,7 @@ main() hid_t file_spaceid, mem_spaceid; hsize_t dims[1] = {0}, max_dims[1] = {H5S_UNLIMITED}, chunk_dims[1] = {1}; hsize_t xtend_size[NDIMS] = {2}, start[NDIMS] = {1}, count[NDIMS] = {1}; + hsize_t ones[NDIMS] = {1}; /* void *fillp;*/ char *data = "A man who carries a cat by the tail learns " "something he can learn in no other way."; @@ -91,7 +92,7 @@ main() /* Select space in file to write a record. */ if ((file_spaceid = H5Dget_space(datasetid)) < 0) ERR; if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; /* Select space in memory to read from. */ if ((mem_spaceid = H5Screate_simple(NDIMS, count, NULL)) < 0) ERR; @@ -126,7 +127,7 @@ main() hid_t typeid, datasetid, plistid; hid_t file_spaceid, mem_spaceid; hsize_t dims[1] = {2}, chunk_dims[1] = {1}; - hsize_t start[NDIMS] = {1}, count[NDIMS] = {1}; + hsize_t start[NDIMS] = {1}, count[NDIMS] = {1}, ones[NDIMS] = {1}; /* void *fillp;*/ char *data = "A man who carries a cat by the tail learns " "something he can learn in no other way."; @@ -179,7 +180,7 @@ To be good is noble; but to show others how to be good is nobler and no trouble. /* Select space in file to write a record. */ if ((file_spaceid = H5Dget_space(datasetid)) < 0) ERR; if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; /* Select space in memory to read from. */ if ((mem_spaceid = H5Screate_simple(NDIMS, count, NULL)) < 0) diff --git a/h5_test/tst_h_vars.c b/h5_test/tst_h_vars.c index 7fa840f41..a74ab5047 100644 --- a/h5_test/tst_h_vars.c +++ b/h5_test/tst_h_vars.c @@ -69,7 +69,7 @@ main() float float_data_out[LAT_LEN][LON_LEN]; hsize_t dims[NDIMS], max_dims[NDIMS]; hsize_t dims_in[NDIMS], max_dims_in[NDIMS]; - hsize_t start[MAX_DIMS], count[MAX_DIMS]; + hsize_t start[MAX_DIMS], count[MAX_DIMS], ones[MAX_DIMS]; int lat, lon; /* Set up some phoney data, 1 record's worth. In C, first @@ -153,8 +153,9 @@ main() start[0] = 1; start[1] = 0; start[2] = 0; + ones[0] = ones[1] = ones[2] = 1; if (H5Sselect_hyperslab(write_spaceid, H5S_SELECT_SET, - start, NULL, count, NULL) < 0) ERR; + start, NULL, ones, count) < 0) ERR; /* Write second record of data to each dataset. */ if (H5Dwrite(pres_dsid, H5T_IEEE_F32LE, mem_spaceid, write_spaceid, diff --git a/libhdf5/hdf5var.c b/libhdf5/hdf5var.c index 6c2303ec4..d08cfca8a 100644 --- a/libhdf5/hdf5var.c +++ b/libhdf5/hdf5var.c @@ -1542,11 +1542,12 @@ NC4_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, NC_VAR_INFO_T *var; NC_DIM_INFO_T *dim; NC_HDF5_VAR_INFO_T *hdf5_var; + herr_t herr; hid_t file_spaceid = 0, mem_spaceid = 0, xfer_plistid = 0; long long unsigned xtend_size[NC_MAX_VAR_DIMS]; hsize_t fdims[NC_MAX_VAR_DIMS], fmaxdims[NC_MAX_VAR_DIMS]; hsize_t start[NC_MAX_VAR_DIMS], count[NC_MAX_VAR_DIMS]; - hsize_t stride[NC_MAX_VAR_DIMS]; + hsize_t stride[NC_MAX_VAR_DIMS], ones[NC_MAX_VAR_DIMS]; int need_to_extend = 0; #ifdef USE_PARALLEL4 int extend_possible = 0; @@ -1597,6 +1598,7 @@ NC4_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, start[i] = startp[i]; count[i] = countp ? countp[i] : var->dim[i]->len; stride[i] = stridep ? stridep[i] : 1; + ones[i] = 1; LOG((4, "start[%d] %ld count[%d] %ld stride[%d] %ld", i, start[i], i, count[i], i, stride[i])); /* Check to see if any counts are zero. */ @@ -1647,8 +1649,13 @@ NC4_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, } else { - if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, start, stride, - count, NULL) < 0) + if (stridep == NULL) + herr = H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, start, + NULL, ones, count); + else + herr = H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, start, + stride, count, NULL); + if (herr < 0) BAIL(NC_EHDFERR); /* Create a space for the memory, just big enough to hold the slab @@ -1773,8 +1780,14 @@ NC4_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, BAIL2(NC_EHDFERR); if ((file_spaceid = H5Dget_space(hdf5_var->hdf_datasetid)) < 0) BAIL(NC_EHDFERR); - if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, stride, count, NULL) < 0) + + if (stridep == NULL) + herr = H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, + start, NULL, ones, count); + else + herr = H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, + start, stride, count, NULL); + if (herr < 0) BAIL(NC_EHDFERR); } } @@ -1873,7 +1886,7 @@ NC4_get_vars(int ncid, int varid, const size_t *startp, const size_t *countp, hsize_t count[NC_MAX_VAR_DIMS]; hsize_t fdims[NC_MAX_VAR_DIMS], fmaxdims[NC_MAX_VAR_DIMS]; hsize_t start[NC_MAX_VAR_DIMS]; - hsize_t stride[NC_MAX_VAR_DIMS]; + hsize_t stride[NC_MAX_VAR_DIMS], ones[NC_MAX_VAR_DIMS]; void *fillvalue = NULL; int no_read = 0, provide_fill = 0; hssize_t fill_value_size[NC_MAX_VAR_DIMS]; @@ -1924,6 +1937,7 @@ NC4_get_vars(int ncid, int varid, const size_t *startp, const size_t *countp, start[i] = startp[i]; count[i] = countp[i]; stride[i] = stridep ? stridep[i] : 1; + ones[i] = 1; /* if any of the count values are zero don't actually read. */ if (count[i] == 0) @@ -2053,9 +2067,16 @@ NC4_get_vars(int ncid, int varid, const size_t *startp, const size_t *countp, } else { - if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, stride, count, NULL) < 0) + herr_t herr; + if (stridep == NULL) + herr = H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, + start, NULL, ones, count); + else + herr = H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, + start, stride, count, NULL); + if (herr < 0) BAIL(NC_EHDFERR); + /* Create a space for the memory, just big enough to hold the slab we want. */ if ((mem_spaceid = H5Screate_simple(var->ndims, count, NULL)) < 0) diff --git a/libnczarr/zvar.c b/libnczarr/zvar.c index 5076ff740..df06d9dfb 100644 --- a/libnczarr/zvar.c +++ b/libnczarr/zvar.c @@ -1546,7 +1546,7 @@ NCZ_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, #endif size64_t fdims[NC_MAX_VAR_DIMS]; size64_t start[NC_MAX_VAR_DIMS], count[NC_MAX_VAR_DIMS]; - size64_t stride[NC_MAX_VAR_DIMS]; + size64_t stride[NC_MAX_VAR_DIMS], ones[NC_MAX_VAR_DIMS]; int retval, range_error = 0, i, d2; void *bufr = NULL; int bufrd = 0; /* 1 => we allocated bufr */ @@ -1591,6 +1591,7 @@ NCZ_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, start[0] = 0; count[0] = 1; stride[0] = 1; + ones[0] = 1; } else { for (i = 0; i < var->ndims; i++) { @@ -1602,6 +1603,7 @@ NCZ_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, start[i] = startp[i]; count[i] = countp ? countp[i] : fdims[i]; stride[i] = stridep ? stridep[i] : 1; + ones[i] = 1; /* Check to see if any counts are zero. */ if (!count[i]) @@ -1633,6 +1635,31 @@ NCZ_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, } } + +#ifdef LOOK + /* Now you would think that no one would be crazy enough to write + a scalar dataspace with one of the array function calls, but you + would be wrong. So let's check to see if the dataset is + scalar. If it is, we won't try to set up a hyperslab. */ + if (H5Sget_simple_extent_type(file_spaceid) == H5S_SCALAR) + { + if ((mem_spaceid = H5Screate(H5S_SCALAR)) < 0) + BAIL(NC_EHDFERR); + } + else + { + if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, start, stride, + ones, count) < 0) + BAIL(NC_EHDFERR); + + /* Create a space for the memory, just big enough to hold the slab + we want. */ + if ((mem_spaceid = H5Screate_simple(var->ndims, count, NULL)) < 0) + BAIL(NC_EHDFERR); + } +#endif + + /* Are we going to convert any data? (No converting of compound or * opaque or vlen types.) We also need to call this code if we are doing * quantization. */ @@ -1699,6 +1726,30 @@ NCZ_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, } } } + +#endif + +#ifdef LOOK + /* If we need to extend it, we also need a new file_spaceid + to reflect the new size of the space. */ + if (need_to_extend) + { + LOG((4, "extending dataset")); + /* Convert xtend_size back to hsize_t for use with + * H5Dset_extent. */ + for (d2 = 0; d2 < var->ndims; d2++) + fdims[d2] = (size64_t)xtend_size[d2]; + if (H5Dset_extent(ncz_var->hdf_datasetid, fdims) < 0) + BAIL(NC_EHDFERR); + if (file_spaceid > 0 && H5Sclose(file_spaceid) < 0) + BAIL2(NC_EHDFERR); + if ((file_spaceid = H5Dget_space(ncz_var->hdf_datasetid)) < 0) + BAIL(NC_EHDFERR); + if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, + start, stride, ones, count) < 0) + BAIL(NC_EHDFERR); + } +#endif } /* Do we need to convert the data? */ @@ -1801,8 +1852,8 @@ NCZ_get_vars(int ncid, int varid, const size_t *startp, const size_t *countp, size64_t fdims[NC_MAX_VAR_DIMS]; /* size of the dimensions */ size64_t start[NC_MAX_VAR_DIMS]; size64_t stride[NC_MAX_VAR_DIMS]; - int no_read = 0; - int provide_fill = 0; + size64_t ones[NC_MAX_VAR_DIMS]; + int no_read = 0, provide_fill = 0; int fill_value_size[NC_MAX_VAR_DIMS]; int retval, range_error = 0, i, d2; void *bufr = NULL; @@ -1834,6 +1885,7 @@ NCZ_get_vars(int ncid, int varid, const size_t *startp, const size_t *countp, start[0] = 0; count[0] = 1; stride[0] = 1; + ones[0] = 1; } else { for (i = 0; i < var->ndims; i++) { @@ -1843,6 +1895,12 @@ NCZ_get_vars(int ncid, int varid, const size_t *startp, const size_t *countp, start[i] = startp[i]; count[i] = countp[i]; stride[i] = stridep ? stridep[i] : 1; + + ones[i] = 1; + /* if any of the count values are zero don't actually read. */ + if (count[i] == 0) + no_read++; + /* Get dimension sizes also */ fdims[i] = var->dim[i]->len; /* if any of the counts are zero don't actually read. */ @@ -1960,7 +2018,7 @@ NCZ_get_vars(int ncid, int varid, const size_t *startp, const size_t *countp, else { if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, - start, stride, count, NULL) < 0) + start, stride, ones, count) < 0) BAIL(NC_EHDFERR); /* Create a space for the memory, just big enough to hold the slab we want. */ diff --git a/nc_perf/tst_files3.c b/nc_perf/tst_files3.c index ab04f7ec0..f4404e053 100644 --- a/nc_perf/tst_files3.c +++ b/nc_perf/tst_files3.c @@ -100,6 +100,7 @@ int dump_hdf_file(const float *data, int docompression) hsize_t dims[NDIMS] = {X_LEN, Y_LEN, Z_LEN}; hsize_t start[NDIMS] = {0, 0, 0}; hsize_t count[NDIMS] = {1, 1, Z_LEN}; + hsize_t ones[NDIMS] = {1, 1, 1}; /* create file */ file_id = H5Fcreate(FILE_NAME, H5F_ACC_TRUNC, @@ -138,7 +139,7 @@ int dump_hdf_file(const float *data, int docompression) for (start[1] = 0; start[1] < Y_LEN; start[1]++) { if (H5Sselect_hyperslab(file_spaceid, H5S_SELECT_SET, start, NULL, - count, NULL) < 0) ERR_RET; + ones, count) < 0) ERR_RET; if (H5Dwrite(dataset_id, H5T_NATIVE_FLOAT, mem_spaceid, file_spaceid, xfer_plistid, data) < 0) ERR_RET; } From 6a628b9ca7b8c027d6d6dd0327ab41597f0b0447 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Tue, 12 Dec 2023 16:49:13 -0700 Subject: [PATCH 28/35] Rebased PR by hand against main. --- libnczarr/zvar.c | 3 ++- nc_test4/tst_virtual_datasets.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/libnczarr/zvar.c b/libnczarr/zvar.c index df06d9dfb..607a35185 100644 --- a/libnczarr/zvar.c +++ b/libnczarr/zvar.c @@ -1703,6 +1703,7 @@ NCZ_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, do no harm to reextend it to that size. */ if (var->ndims) { + for (d2 = 0; d2 < var->ndims; d2++) { size64_t endindex = start[d2] + stride[d2] * (count[d2] - 1); /* last index written */ @@ -1727,7 +1728,7 @@ NCZ_put_vars(int ncid, int varid, const size_t *startp, const size_t *countp, } } -#endif + #ifdef LOOK /* If we need to extend it, we also need a new file_spaceid diff --git a/nc_test4/tst_virtual_datasets.c b/nc_test4/tst_virtual_datasets.c index acc3c1ce3..ff278a3dd 100644 --- a/nc_test4/tst_virtual_datasets.c +++ b/nc_test4/tst_virtual_datasets.c @@ -54,7 +54,7 @@ int read_back_contents(const char* filename) { int ncid, varid, ndims; size_t i; float data[VARIABLE_SIZE]; - size_t i; + char var_name[NC_MAX_NAME+1]; int dimids_var[1], var_type, natts; From 56844001f57c1417938fd8a5a53b02ec3a334a63 Mon Sep 17 00:00:00 2001 From: Sean McBride Date: Mon, 6 Nov 2023 21:06:15 -0500 Subject: [PATCH 29/35] Replaced ancient K&R function declarations to be C23 compatible --- libdispatch/dcrc32.c | 5 +---- nc_perf/tst_ar4_4d.c | 3 +-- nc_perf/tst_utils.c | 3 +-- nctest/add.c | 31 +++++++------------------------ nctest/atttests.c | 24 +++++++++--------------- nctest/cdftests.c | 24 ++++++++---------------- nctest/dimtests.c | 12 ++++-------- nctest/emalloc.c | 7 ++----- nctest/rec.c | 38 +++++++++----------------------------- nctest/slabs.c | 23 +++++++++++------------ nctest/val.c | 34 +++++++++++++++++----------------- nctest/vardef.c | 3 +-- nctest/varget.c | 3 +-- nctest/vargetg.c | 3 +-- nctest/varput.c | 3 +-- nctest/varputg.c | 3 +-- nctest/vartests.c | 18 ++++++------------ nctest/vputget.c | 3 +-- nctest/vputgetg.c | 3 +-- 19 files changed, 83 insertions(+), 160 deletions(-) diff --git a/libdispatch/dcrc32.c b/libdispatch/dcrc32.c index d804774e3..fb98a1b19 100644 --- a/libdispatch/dcrc32.c +++ b/libdispatch/dcrc32.c @@ -260,10 +260,7 @@ local const z_crc_t FAR * ZEXPORT get_crc_table() #define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 /* ========================================================================= */ -local unsigned long ZEXPORT crc32_z(crc, buf, len) - unsigned long crc; - const unsigned char FAR *buf; - z_size_t len; +local unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, z_size_t len) { if (buf == Z_NULL) return 0UL; diff --git a/nc_perf/tst_ar4_4d.c b/nc_perf/tst_ar4_4d.c index 398686e60..85e1db4cd 100644 --- a/nc_perf/tst_ar4_4d.c +++ b/nc_perf/tst_ar4_4d.c @@ -150,8 +150,7 @@ variables: RESULT. Return 1 if the difference is negative, otherwise 0. This function from the GNU documentation. */ static int -timeval_subtract (result, x, y) - struct timeval *result, *x, *y; +timeval_subtract (struct timeval *result, struct timeval *x, struct timeval *y) { /* Perform the carry for the later subtraction by updating Y. */ if (x->tv_usec < y->tv_usec) { diff --git a/nc_perf/tst_utils.c b/nc_perf/tst_utils.c index 96a16294e..b27f43373 100644 --- a/nc_perf/tst_utils.c +++ b/nc_perf/tst_utils.c @@ -21,8 +21,7 @@ See \ref copyright file for more info. RESULT. Return 1 if the difference is negative, otherwise 0. This function from the GNU documentation. */ int -nc4_timeval_subtract (result, x, y) - struct timeval *result, *x, *y; +nc4_timeval_subtract (struct timeval *result, struct timeval *x, struct timeval *y) { /* Perform the carry for the later subtraction by updating Y. */ if (x->tv_usec < y->tv_usec) { diff --git a/nctest/add.c b/nctest/add.c index 5a6ee58d2..0007baa13 100644 --- a/nctest/add.c +++ b/nctest/add.c @@ -23,9 +23,7 @@ struct netcdf test; /* */ void -add_dim (test, idim) /* add the dimension idim to the netcdf test */ - struct netcdf *test; - struct cdfdim *idim; +add_dim (struct netcdf *test, struct cdfdim *idim) /* add the dimension idim to the netcdf test */ { static char pname[] = "add_dim"; @@ -43,9 +41,7 @@ add_dim (test, idim) /* add the dimension idim to the netcdf test */ } void -add_var (test, ivar) /* add the variable ivar to the netcdf test */ - struct netcdf *test; - struct cdfvar *ivar; +add_var (struct netcdf *test, struct cdfvar *ivar) /* add the variable ivar to the netcdf test */ { static char pname[] = "add_var"; int i; @@ -68,10 +64,7 @@ add_var (test, ivar) /* add the variable ivar to the netcdf test */ } void -add_att (test, varid, iatt) /* add attribute iatt to the netcdf test */ - struct netcdf *test; - int varid; /* variable id */ - struct cdfatt *iatt; +add_att (struct netcdf *test, int varid, struct cdfatt *iatt) /* add attribute iatt to the netcdf test */ { static char pname[] = "add_att"; int ia; /* attribute number */ @@ -108,8 +101,7 @@ add_att (test, varid, iatt) /* add attribute iatt to the netcdf test */ void -add_reset(test) /* reset in-memory netcdf test to empty */ - struct netcdf *test; +add_reset(struct netcdf *test) /* reset in-memory netcdf test to empty */ { test->ndims = 0; test->nvars = 0; @@ -120,10 +112,7 @@ add_reset(test) /* reset in-memory netcdf test to empty */ void -del_att (test, varid, iatt) /* delete attribute iatt in the netcdf test */ - struct netcdf *test; - int varid; /* variable id */ - struct cdfatt *iatt; +del_att (struct netcdf *test, int varid, struct cdfatt *iatt) /* delete attribute iatt in the netcdf test */ { static char pname[] = "del_att"; int ia, ib; /* attribute number */ @@ -153,11 +142,7 @@ del_att (test, varid, iatt) /* delete attribute iatt in the netcdf test */ } void -add_data(test, varid, start, edges) /* keep max record written updated */ - struct netcdf *test; - int varid; - long start[]; - long edges[]; +add_data(struct netcdf *test, int varid, long start[], long edges[]) /* keep max record written updated */ { if (varid != test->xdimid) /* not a record variable */ return; @@ -167,9 +152,7 @@ add_data(test, varid, start, edges) /* keep max record written updated */ void -errvar(cdfp, varp) - struct netcdf *cdfp; - struct cdfvar *varp; +errvar(struct netcdf *cdfp, struct cdfvar *varp) { const char *types; int id; diff --git a/nctest/atttests.c b/nctest/atttests.c index f9d263ffe..77079bb88 100644 --- a/nctest/atttests.c +++ b/nctest/atttests.c @@ -41,8 +41,7 @@ * try with bad netCDF handle, check error */ int -test_ncattput(path) - const char *path; /* name of writable netcdf file to open */ +test_ncattput(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncattput"; @@ -341,8 +340,7 @@ test_ncattput(path) * try with bad netCDF handle, check error */ int -test_ncattinq(path) - const char *path; /* name of writable netcdf file to open */ +test_ncattinq(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncattinq"; @@ -456,8 +454,7 @@ test_ncattinq(path) * try with bad netCDF handle, check error */ int -test_ncattget(path) - const char *path; /* name of writable netcdf file to open */ +test_ncattget(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; int cdfid; /* netcdf id */ @@ -627,10 +624,10 @@ test_ncattget(path) * try with bad source or target netCDF handles, check error * try with bad source or target variable handle, check error */ +/* path1: name of input netcdf file to open */ +/* path2: name of output netcdf file to create */ int -test_ncattcopy(path1, path2) - const char *path1; /* name of input netcdf file to open */ - const char *path2; /* name of output netcdf file to create */ +test_ncattcopy(const char *path1, const char *path2) { int nerrs = 0; static char pname[] = "test_ncattcopy"; @@ -905,8 +902,7 @@ test_ncattcopy(path1, path2) * try with bad attribute number, check error */ int -test_ncattname(path) - const char *path; /* name of writable netcdf file to open */ +test_ncattname(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncattname"; @@ -1091,8 +1087,7 @@ test_ncattname(path) * try with bad netCDF handle, check error */ int -test_ncattrename(path) - const char *path; /* name of writable netcdf file to open */ +test_ncattrename(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncattrename"; @@ -1234,8 +1229,7 @@ test_ncattrename(path) * try in data mode, check error */ int -test_ncattdel(path) - const char *path; /* name of writable netcdf file to open */ +test_ncattdel(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncattdel"; diff --git a/nctest/cdftests.c b/nctest/cdftests.c index 5f3a637ce..aaab75baf 100644 --- a/nctest/cdftests.c +++ b/nctest/cdftests.c @@ -28,8 +28,7 @@ * Uses: nccreate, ncendef, ncclose, ncopen. */ int -test_nccreate(path) - const char *path; /* name of netCDF file to create */ +test_nccreate(const char *path) /* name of netCDF file to create */ { int nerrs = 0; static char pname[] = "test_nccreate"; @@ -94,8 +93,7 @@ test_nccreate(path) #define DATA_LEN 32 #define TEMP_FILE_NAME "temp.tmp" int -test_ncopen(path) - const char *path; /* name of writable netcdf file to open */ +test_ncopen(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncopen"; @@ -240,8 +238,7 @@ test_ncopen(path) * Uses: ncopen, ncredef, ncdimdef, ncvardef, ncattput, ncclose */ int -test_ncredef(path) - const char *path; /* name of writable netcdf file to open */ +test_ncredef(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncredef"; @@ -328,8 +325,7 @@ test_ncredef(path) * Uses: ncopen, ncredef, ncdimdef, ncvardef, ncattput, ncendef, ncclose */ int -test_ncendef(path) - const char *path; /* name of writable netcdf file to open */ +test_ncendef(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncendef"; @@ -422,8 +418,7 @@ test_ncendef(path) * On exit netcdf files are closed. */ int -test_ncclose(path) - const char *path; /* name of writable netcdf file to open */ +test_ncclose(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncclose"; @@ -476,8 +471,7 @@ test_ncclose(path) * On exit netcdf files are closed. */ int -test_ncinquire(path) - const char *path; /* name of writable netcdf file to open */ +test_ncinquire(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncinquire"; @@ -640,8 +634,7 @@ test_ncinquire(path) * On exit netcdf files are closed. */ int -test_ncsync(path) - const char *path; /* name of writable netcdf file to open */ +test_ncsync(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncsync"; @@ -781,8 +774,7 @@ test_ncsync(path) * On exit netcdf files are closed. */ int -test_ncabort(path) - const char *path; /* name of writable netcdf file to open */ +test_ncabort(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncabort"; diff --git a/nctest/dimtests.c b/nctest/dimtests.c index 26bce98d2..4e3ae4187 100644 --- a/nctest/dimtests.c +++ b/nctest/dimtests.c @@ -25,8 +25,7 @@ * try to define a second unlimited dimension, check error */ int -test_ncdimdef(path) - const char *path; /* name of writable netcdf to open */ +test_ncdimdef(const char *path) /* name of writable netcdf to open */ { int nerrs = 0; static char pname[] = "test_ncdimdef"; @@ -129,8 +128,7 @@ test_ncdimdef(path) * try with bad handle, check error */ int -test_ncdimid(path) - const char *path; /* name of writable netcdf file to open */ +test_ncdimid(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncdimid"; @@ -206,8 +204,7 @@ test_ncdimid(path) * try with bad netCDF handle, check error */ int -test_ncdiminq(path) - const char *path; /* name of writable netcdf file to open */ +test_ncdiminq(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncdiminq"; @@ -303,8 +300,7 @@ test_ncdiminq(path) * try with bad netCDF handle, check error */ int -test_ncdimrename(path) - const char *path; /* name of writable netcdf file to open */ +test_ncdimrename(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncdimrename"; diff --git a/nctest/emalloc.c b/nctest/emalloc.c index 05dc1c51c..570a419a7 100644 --- a/nctest/emalloc.c +++ b/nctest/emalloc.c @@ -12,8 +12,7 @@ #include "emalloc.h" void * -emalloc (size) /* check return from malloc */ - size_t size; +emalloc (size_t size) /* check return from malloc */ { void *p; @@ -32,9 +31,7 @@ emalloc (size) /* check return from malloc */ } void * -erealloc (ptr, size) /* check return from realloc */ - void *ptr; - size_t size; +erealloc (void *ptr, size_t size) /* check return from realloc */ { void *p; diff --git a/nctest/rec.c b/nctest/rec.c index a56c6aafd..6dc1484b7 100644 --- a/nctest/rec.c +++ b/nctest/rec.c @@ -20,9 +20,7 @@ * error. */ static int -numrecvars(ncid, recvarids) - int ncid; - int *recvarids; +numrecvars(int ncid, int *recvarids) { int ndims, iv, nvars; int nrecvars; @@ -52,9 +50,7 @@ numrecvars(ncid, recvarids) * variable id. Returns 0 if not a record variable. Returns -1 on error. */ static long -ncrecsize(ncid,vid) - int ncid; - int vid; +ncrecsize(int ncid,int vid) { int recdimid; nc_type type; @@ -87,11 +83,7 @@ ncrecsize(ncid,vid) * errors better. */ static int -recinq(ncid, nrecvars, recvarids, recsizes) - int ncid; - int *nrecvars; - int *recvarids; - long *recsizes; +recinq(int ncid, int *nrecvars, int *recvarids, long *recsizes) { int iv; int rvarids[MAX_NC_VARS]; @@ -119,8 +111,7 @@ recinq(ncid, nrecvars, recvarids, recsizes) * try with bad netCDF handle, check error */ int -test_ncrecinq(path) - const char *path; /* name of netcdf file to open */ +test_ncrecinq(const char *path) /* name of netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncrecinq"; @@ -225,10 +216,7 @@ test_ncrecinq(path) * an open netCDF file. Returns -1 on error. */ static int -dimsizes(ncid, varid, sizes) - int ncid; - int varid; - long *sizes; +dimsizes(int ncid, int varid, long *sizes) { int ndims; int id; @@ -251,10 +239,7 @@ dimsizes(ncid, varid, sizes) * better. */ static int -recput(ncid, recnum, datap) - int ncid; - long recnum; - void **datap; +recput(int ncid, long recnum, void **datap) { int iv; int rvids[MAX_NC_VARS]; @@ -288,10 +273,7 @@ recput(ncid, recnum, datap) * better. */ static int -recget(ncid, recnum, datap) - int ncid; - long recnum; - void **datap; +recget(int ncid, long recnum, void **datap) { int iv; int rvids[MAX_NC_VARS]; @@ -327,8 +309,7 @@ recget(ncid, recnum, datap) * try with bad netCDF handle, check error */ int -test_ncrecput(path) - const char *path; /* name of writable netcdf file to open */ +test_ncrecput(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncrecput"; @@ -485,8 +466,7 @@ test_ncrecput(path) * try with bad netCDF handle, check error */ int -test_ncrecget(path) - const char *path; /* name of netcdf file to open */ +test_ncrecget(const char *path) /* name of netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncrecget"; diff --git a/nctest/slabs.c b/nctest/slabs.c index 48b4d1de7..f6992ca8e 100644 --- a/nctest/slabs.c +++ b/nctest/slabs.c @@ -30,12 +30,12 @@ * * v[ii] = val; */ +/* type: netcdf type of v, NC_BYTE, ..., NC_DOUBLE */ +/* v: array of specified type */ +/* ii: it's v[ii] we want to store into */ +/* val: value to store */ static void -val_stuff(type, v, ii, val) /* v[ii] = val */ - nc_type type; /* netcdf type of v, NC_BYTE, ..., NC_DOUBLE */ - void *v; /* array of specified type */ - int ii; /* it's v[ii] we want to store into */ - long val; /* value to store */ +val_stuff(nc_type type, void *v, int ii, long val) /* v[ii] = val */ { static char pname[] = "val_stuff"; @@ -70,12 +70,12 @@ val_stuff(type, v, ii, val) /* v[ii] = val */ * returns 0 if equal, 1 if not equal */ +/* type: netcdf type of v, NC_BYTE, ..., NC_DOUBLE */ +/* v: array of specified type */ +/* ii: it's v[ii] we want to compare */ +/* val: value to compare with */ static int -val_diff(type, v, ii, val) /* v[ii] != val */ - nc_type type; /* netcdf type of v, NC_BYTE, ..., NC_DOUBLE */ - void *v; /* array of specified type */ - int ii; /* it's v[ii] we want to compare */ - long val; /* value to compare with */ +val_diff(nc_type type, void *v, int ii, long val) /* v[ii] != val */ { static char pname[] = "val_diff"; @@ -109,8 +109,7 @@ val_diff(type, v, ii, val) /* v[ii] != val */ */ int -test_slabs(cdfid) - int cdfid; /* handle of netcdf open and in data mode */ +test_slabs(int cdfid) /* handle of netcdf open and in data mode */ { int nerrs = 0; static char pname[] = "test_slabs"; diff --git a/nctest/val.c b/nctest/val.c index b7d27820d..247f33995 100644 --- a/nctest/val.c +++ b/nctest/val.c @@ -13,11 +13,11 @@ /* fill typed value block with values of specified type */ +/* type: netcdf type, NC_BYTE, ..., NC_DOUBLE */ +/* len: number of elements to fill with */ +/* vals: start of first block of values */ void -val_fill(type, len, vals) - nc_type type; /* netcdf type, NC_BYTE, ..., NC_DOUBLE */ - long len; /* number of elements to fill with */ - void *vals; /* start of first block of values */ +val_fill(nc_type type, long len, void *vals) { static char pname[] = "val_fill"; long half = len/2; @@ -64,11 +64,11 @@ val_fill(type, len, vals) /* fill typed value block with zeros of specified type */ +/* type: netcdf type, NC_BYTE, ..., NC_DOUBLE */ +/* len: number of elements to fill with */ +/* vals: start of first block of values */ void -val_fill_zero(type, len, vals) - nc_type type; /* netcdf type, NC_BYTE, ..., NC_DOUBLE */ - long len; /* number of elements to fill with */ - void *vals; /* start of first block of values */ +val_fill_zero(nc_type type, long len, void *vals) { static char pname[] = "val_fill_zero"; int iel; @@ -118,12 +118,12 @@ val_fill_zero(type, len, vals) * compare two typed value blocks, return 0 if equal, 1+n otherwise, * where n is the index of the first differing element. */ +/* type: netcdf type, NC_BYTE, ..., NC_DOUBLE */ +/* len: number of elements of type to compare */ +/* v1: start of first block of values */ +/* v2: start of second block of values */ int -val_cmp (type, len, v1, v2) - nc_type type; /* netcdf type, NC_BYTE, ..., NC_DOUBLE */ - long len; /* number of elements of type to compare */ - void *v1; /* start of first block of values */ - void *v2; /* start of second block of values */ +val_cmp (nc_type type, long len, void *v1, void *v2) { static char pname[] = "val_cmp"; int iel; @@ -195,11 +195,11 @@ val_cmp (type, len, v1, v2) /* print typed value block with values of specified type */ +/* type: netcdf type, NC_BYTE, ..., NC_DOUBLE */ +/* len: number of elements to fill with */ +/* vals: start of first block of values */ void -val_out(type, len, vals) - nc_type type; /* netcdf type, NC_BYTE, ..., NC_DOUBLE */ - long len; /* number of elements to fill with */ - void *vals; /* start of first block of values */ +val_out(nc_type type, long len, void *vals) { static char pname[] = "val_oout"; int iel; diff --git a/nctest/vardef.c b/nctest/vardef.c index b02df5dfd..64832f2a4 100644 --- a/nctest/vardef.c +++ b/nctest/vardef.c @@ -105,8 +105,7 @@ init_epsilons() * try in data mode, check error */ int -test_ncvardef(path) - const char *path; /* name of writable netcdf file to open */ +test_ncvardef(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; int cdfid; /* netcdf id */ diff --git a/nctest/varget.c b/nctest/varget.c index 1f1ab41ad..01d511b5e 100644 --- a/nctest/varget.c +++ b/nctest/varget.c @@ -24,8 +24,7 @@ * try with bad netCDF handle, check error */ int -test_ncvarget(path) - const char *path; /* name of writable netcdf file to open */ +test_ncvarget(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncvarget"; diff --git a/nctest/vargetg.c b/nctest/vargetg.c index b02f33b93..faec7c2e0 100644 --- a/nctest/vargetg.c +++ b/nctest/vargetg.c @@ -25,8 +25,7 @@ * try with bad netCDF handle, check error */ int -test_ncvargetg(path) - const char *path; /* name of writable netcdf file to open */ +test_ncvargetg(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncvargetg"; diff --git a/nctest/varput.c b/nctest/varput.c index b3ea893a7..bfce8aff6 100644 --- a/nctest/varput.c +++ b/nctest/varput.c @@ -25,8 +25,7 @@ * try with bad netCDF handle, check error */ int -test_ncvarput(path) - const char *path; /* name of writable netcdf file to open */ +test_ncvarput(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncvarput"; diff --git a/nctest/varputg.c b/nctest/varputg.c index 491121303..344150354 100644 --- a/nctest/varputg.c +++ b/nctest/varputg.c @@ -25,8 +25,7 @@ * try with bad netCDF handle, check error */ int -test_ncvarputg(path) - const char *path; /* name of writable netcdf file to open */ +test_ncvarputg(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncvarputg"; diff --git a/nctest/vartests.c b/nctest/vartests.c index 8fe35983c..a6ca42b93 100644 --- a/nctest/vartests.c +++ b/nctest/vartests.c @@ -25,8 +25,7 @@ * try with bad handle, check error */ int -test_ncvarid(path) - const char *path; /* name of writable netcdf file to open */ +test_ncvarid(const char *path) /* name of writable netcdf file to open */ { static char pname[] = "test_ncvarid"; int cdfid; /* netcdf id */ @@ -104,8 +103,7 @@ test_ncvarid(path) * try with bad netCDF handle, check error */ int -test_ncvarinq(path) - const char *path; /* name of writable netcdf file to open */ +test_ncvarinq(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncvarinq"; @@ -249,8 +247,7 @@ struct cdfelm { /* coordinates and generic value */ * get values and compare with put values */ static int -test_varputget1(cdfid) - int cdfid; /* handle of netcdf open and in data mode */ +test_varputget1(int cdfid) /* handle of netcdf open and in data mode */ { int nerrs = 0; static char pname[] = "test_varputget1"; @@ -380,8 +377,7 @@ test_varputget1(cdfid) * try with bad netCDF handle, check error */ int -test_ncvarput1(path) - const char *path; /* name of writable netcdf file to open */ +test_ncvarput1(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncvarput1"; @@ -468,8 +464,7 @@ test_ncvarput1(path) * try with bad netCDF handle, check error */ int -test_ncvarget1(path) - const char *path; /* name of writable netcdf file to open */ +test_ncvarget1(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncvarget1"; @@ -556,8 +551,7 @@ test_ncvarget1(path) * try renaming to existing variable name, check error */ int -test_ncvarrename(path) - const char *path; /* name of writable netcdf file to open */ +test_ncvarrename(const char *path) /* name of writable netcdf file to open */ { int nerrs = 0; static char pname[] = "test_ncvarrename"; diff --git a/nctest/vputget.c b/nctest/vputget.c index 8c2ff2ee9..67b7abbd1 100644 --- a/nctest/vputget.c +++ b/nctest/vputget.c @@ -34,8 +34,7 @@ */ int -test_varputget(cdfid) - int cdfid; /* handle of netcdf open and in data mode */ +test_varputget(int cdfid) /* handle of netcdf open and in data mode */ { int nerrs = 0; static char pname[] = "test_varputget"; diff --git a/nctest/vputgetg.c b/nctest/vputgetg.c index c4b87b537..ef4e3238e 100644 --- a/nctest/vputgetg.c +++ b/nctest/vputgetg.c @@ -34,8 +34,7 @@ */ int -test_varputgetg(cdfid) - int cdfid; /* handle of netcdf open and in data mode */ +test_varputgetg(int cdfid) /* handle of netcdf open and in data mode */ { int nerrs = 0; static char pname[] = "test_varputgetg"; From e662790a6658e8c664d1bb94f7e83201cd500818 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Thu, 14 Dec 2023 10:46:19 -0700 Subject: [PATCH 30/35] Changed link to netCDF-Fortran documentation. --- docs/mainpage.dox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/mainpage.dox b/docs/mainpage.dox index 64c2df84a..0284bd831 100644 --- a/docs/mainpage.dox +++ b/docs/mainpage.dox @@ -13,7 +13,7 @@ The NetCDF homepage may be found at The NetCDF-Fortran Developer's Guide +- The NetCDF-Fortran Developer's Guide \section this_release Learn more about the current NetCDF-C Release From b708cb90bcf358acd9d844334973e8b2635b3b9b Mon Sep 17 00:00:00 2001 From: Mathieu Westphal Date: Wed, 20 Dec 2023 07:58:22 +0100 Subject: [PATCH 31/35] cmake: Improve FindSzip logic to provide a Szip_LIBRARY var --- cmake/modules/FindSzip.cmake | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/cmake/modules/FindSzip.cmake b/cmake/modules/FindSzip.cmake index 4deca3347..c6f56f5bf 100644 --- a/cmake/modules/FindSzip.cmake +++ b/cmake/modules/FindSzip.cmake @@ -2,7 +2,10 @@ # # Szip_FOUND Set to true to indicate the szip library was found # Szip_INCLUDE_DIRS The directory containing the header file szip/szip.h -# Szip_LIBRARIES The libraries needed to use the szip library +# Szip_LIBRARIES The libraries needed to use the szip library with the word "debug" and "optimized" when both are found +# Szip_RELEASE_LIBRARY The path to the Szip release library if available +# Szip_DEBUG_LIBRARY The path to the Szip debug library if available +# Szip_LIBRARY The path to a Szip library, preferentially release but fallback to debug # # To specify an additional directory to search, set Szip_ROOT. # @@ -38,13 +41,17 @@ IF(Szip_INCLUDE_DIRS) PATH_SUFFIXES Release ${CMAKE_LIBRARY_ARCHITECTURE} ${CMAKE_LIBRARY_ARCHITECTURE}/Release PATHS ${Szip_LIBRARY_DIRS} NO_DEFAULT_PATH) - SET(Szip_LIBRARIES ) + SET(Szip_LIBRARIES) + SET(Szip_LIBRARY) IF(Szip_DEBUG_LIBRARY AND Szip_RELEASE_LIBRARY) SET(Szip_LIBRARIES debug ${Szip_DEBUG_LIBRARY} optimized ${Szip_RELEASE_LIBRARY}) + SET(Szip_LIBRARY ${Szip_RELEASE_LIBRARY}) ELSEIF(Szip_DEBUG_LIBRARY) SET(Szip_LIBRARIES ${Szip_DEBUG_LIBRARY}) + SET(Szip_LIBRARY ${Szip_DEBUG_LIBRARY}) ELSEIF(Szip_RELEASE_LIBRARY) SET(Szip_LIBRARIES ${Szip_RELEASE_LIBRARY}) + SET(Szip_LIBRARY ${Szip_RELEASE_LIBRARY}) ENDIF(Szip_DEBUG_LIBRARY AND Szip_RELEASE_LIBRARY) IF(Szip_LIBRARIES) From 8f191fbc9d64d77ee72de9b1f8aa02e6aa9802ea Mon Sep 17 00:00:00 2001 From: Mathieu Westphal Date: Wed, 20 Dec 2023 07:58:45 +0100 Subject: [PATCH 32/35] cmake: Fix Szip link using correct cmake var --- liblib/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/liblib/CMakeLists.txt b/liblib/CMakeLists.txt index cbcfbd9c0..4e54e0081 100644 --- a/liblib/CMakeLists.txt +++ b/liblib/CMakeLists.txt @@ -100,7 +100,7 @@ IF(Bz2_FOUND) SET(TLL_LIBS ${TLL_LIBS} ${Bz2_LIBRARIES}) ENDIF() IF(SZIP_FOUND) -SET(TLL_LIBS ${TLL_LIBS} ${SZIP_LIBRARIES}) +SET(TLL_LIBS ${TLL_LIBS} ${Szip_LIBRARY}) ENDIF() IF(HAVE_LIBDL) @@ -125,9 +125,9 @@ IF(USE_HDF5) # builds: # Make sure that HDF5_C_LIBRARY appears *after* # HDF5_HL_LIBRARY. - SET(TLL_LIBS ${HDF5_HL_LIBRARIES} ${HDF5_C_LIBRARIES} ${HDF5_LIBRARIES} ${TLL_LIBS} ${SZIP_LIBRARY}) + SET(TLL_LIBS ${HDF5_HL_LIBRARIES} ${HDF5_C_LIBRARIES} ${HDF5_LIBRARIES} ${TLL_LIBS} ${Szip_LIBRARY}) ELSE() # Windows CMake defines HDF5_LIBRARIES. - SET(TLL_LIBS ${HDF5_LIBRARIES} ${TLL_LIBS} ${SZIP_LIBRARY}) + SET(TLL_LIBS ${HDF5_LIBRARIES} ${TLL_LIBS} ${Szip_LIBRARY}) ENDIF() ENDIF() From f2eef5a262627172cfbaf1b3d29d1d59e07227a3 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Wed, 20 Dec 2023 16:06:08 -0700 Subject: [PATCH 33/35] Correcting a weird doxygen issue that has appeared. --- docs/Doxyfile.in | 17 ----------------- docs/cloud.md | 6 +++--- docs/nczarr.md | 2 +- 3 files changed, 4 insertions(+), 21 deletions(-) diff --git a/docs/Doxyfile.in b/docs/Doxyfile.in index 84a227ceb..663caa93a 100644 --- a/docs/Doxyfile.in +++ b/docs/Doxyfile.in @@ -1269,15 +1269,6 @@ HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = NO - # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will @@ -1865,14 +1856,6 @@ LATEX_HIDE_INDICES = NO LATEX_BIB_STYLE = plain -# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_TIMESTAMP = NO - # The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) # path from which the emoji images will be read. If a relative path is entered, # it will be relative to the LATEX_OUTPUT directory. If left blank the diff --git a/docs/cloud.md b/docs/cloud.md index 23e6a0ae3..22e73c57c 100644 --- a/docs/cloud.md +++ b/docs/cloud.md @@ -67,9 +67,9 @@ https://thredds-test.unidata.ucar.edu/thredds/fileServer/irma/metar/files/METAR_ # References {#nccloud_bib} -[1] [Amazon Simple Storage Service Documentation](https://docs.aws.amazon.com/s3/index.html)
-[2] [Amazon Simple Storage Service Library](https://github.com/aws/aws-sdk-cpp)
-[11] [Conda-forge / packages / aws-sdk-cpp](https://anaconda.org/conda-forge/aws-sdk-cpp)
+[1] [Amazon Simple Storage Service Documentation](https://docs.aws.amazon.com/s3/index.html)
+[2] [Amazon Simple Storage Service Library](https://github.com/aws/aws-sdk-cpp)
+[11] [Conda-forge / packages / aws-sdk-cpp](https://anaconda.org/conda-forge/aws-sdk-cpp)
# Appendix A. S3 Build Support {#nccloud_s3build} diff --git a/docs/nczarr.md b/docs/nczarr.md index 4c2a5595f..c4da73797 100644 --- a/docs/nczarr.md +++ b/docs/nczarr.md @@ -417,7 +417,7 @@ In order to accomodate existing implementations, certain mode tags are provided ## XArray -The Xarray [7] Zarr implementation uses its own mechanism for specifying shared dimensions. +The Xarray [XArray Zarr Encoding Specification](http://xarray.pydata.org/en/latest/internals.html#zarr-encoding-specification) Zarr implementation uses its own mechanism for specifying shared dimensions. It uses a special attribute named ''_ARRAY_DIMENSIONS''. The value of this attribute is a list of dimension names (strings). An example might be ````["time", "lon", "lat"]````. From 3361fc590178518661a4610e8232c8162bff9e07 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Thu, 21 Dec 2023 09:39:44 -0700 Subject: [PATCH 34/35] Clean up doxygen warnings that were being treated as failures. --- docs/dispatch.md | 2 +- docs/filters.md | 22 ++++++++++++++++++++++ docs/internal.md | 4 ++-- docs/nczarr.md | 16 ++++++++-------- 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/docs/dispatch.md b/docs/dispatch.md index cbc6b2ae7..a3a59baab 100644 --- a/docs/dispatch.md +++ b/docs/dispatch.md @@ -520,7 +520,7 @@ Modifying the dispatch version requires two steps: The two should agree in value. -### NC_DISPATCH_VERSION Incompatibility +## NC_DISPATCH_VERSION Incompatibility When dynamically adding a dispatch table -- in nc_def_user_format (see libdispatch/dfile.c) -- diff --git a/docs/filters.md b/docs/filters.md index cf1c547fd..75aae299d 100644 --- a/docs/filters.md +++ b/docs/filters.md @@ -65,6 +65,28 @@ The concept of a variable-sized type is defined as follows: then that compound type is variable-sized. 4. All other types are fixed-size. +## A Warning on Backward Compatibility {#filters_compatibility} + +The API defined in this document should accurately reflect the +current state of filters in the netCDF-c library. Be aware that +there was a short period in which the filter code was undergoing +some revision and extension. Those extensions have largely been +reverted. Unfortunately, some users may experience some +compilation problems for previously working code because of +these reversions. In that case, please revise your code to +adhere to this document. Apologies are extended for any +inconvenience. + +A user may encounter an incompatibility if any of the following appears in user code. + +* The function *\_nc\_inq\_var\_filter* was returning the error value NC\_ENOFILTER if a variable had no associated filters. + It has been reverted to the previous case where it returns NC\_NOERR and the returned filter id was set to zero if the variable had no filters. +* The function *nc\_inq\_var\_filterids* was renamed to *nc\_inq\_var\_filter\_ids*. +* Some auxilliary functions for parsing textual filter specifications have been moved to the file *netcdf\_aux.h*. See [Appendix A](#filters_appendixa). +* All of the "filterx" functions have been removed. This is unlikely to cause problems because they had limited visibility. + +For additional information, see [Appendix B](#filters_appendixb). + ## Enabling A HDF5 Compression Filter {#filters_enable} HDF5 supports dynamic loading of compression filters using the diff --git a/docs/internal.md b/docs/internal.md index 2ddf3fb74..7d7ce2fe5 100644 --- a/docs/internal.md +++ b/docs/internal.md @@ -8,13 +8,13 @@ This document attempts to record important information about the internal architecture and operation of the netcdf-c library. It covers the following issues. -* [Including C++ Code in the netcdf-c Library](#intern_c++) +* [Including C++ Code in the netcdf-c Library](#intern_cpp) * [Managing instances of variable-length data types](#intern_vlens) * [Inferring File Types](#intern_infer) * [Adding a Standard Filter](#intern_filters) * [Test Interference](#intern_isolation) -# 1. Including C++ Code in the netcdf-c Library {#intern_c++} +# 1. Including C++ Code in the netcdf-c Library {#intern_cpp} The state of C compiler technology has reached the point where it is possible to include C++ code into the netcdf-c library diff --git a/docs/nczarr.md b/docs/nczarr.md index c4da73797..7bb35b4bd 100644 --- a/docs/nczarr.md +++ b/docs/nczarr.md @@ -449,16 +449,16 @@ Here are a couple of examples using the _ncgen_ and _ncdump_ utilities. ``` 4. Create an nczarr file using S3 as storage and keeping to the pure zarr format. ``` - ncgen -4 -lb -o "s3://s3.uswest-1.amazonaws.com/datasetbucket#mode=zarr" dataset.cdl + ncgen -4 -lb -o 's3://s3.uswest-1.amazonaws.com/datasetbucket#mode=zarr dataset.cdl ``` 5. Create an nczarr file using the s3 protocol with a specific profile ``` - ncgen -4 -lb -o "s3://datasetbucket/rootkey#mode=nczarr,awsprofile=unidata" dataset.cdl + ncgen -4 -lb -o 's3://datasetbucket/rootkey#mode=nczarr,awsprofile=unidata' dataset.cdl ``` Note that the URL is internally translated to this - ```` - https://s2.<region>.amazonaws.com/datasetbucket/rootkey#mode=nczarr,awsprofile=unidata" dataset.cdl - ```` + ``` + 'https://s2.<region>.amazonaws.com/datasetbucket/rootkey#mode=nczarr,awsprofile=unidata' dataset.cdl + ``` # References {#nczarr_bib} @@ -473,7 +473,7 @@ collections — High-performance dataset datatypes](https://docs.python.org/2/li [8] [Dynamic Filter Loading](https://support.hdfgroup.org/HDF5/doc/Advanced/DynamicallyLoadedFilters/HDF5DynamicallyLoadedFilters.pdf)
[9] [Officially Registered Custom HDF5 Filters](https://portal.hdfgroup.org/display/support/Registered+Filter+Plugins)
[10] [C-Blosc Compressor Implementation](https://github.com/Blosc/c-blosc)
-[11] [Conda-forge / packages / aws-sdk-cpp](https://anaconda.org/conda-forge/aws-sdk-cpp)
+[11] [Conda-forge packages / aws-sdk-cpp](https://anaconda.org/conda-forge/aws-sdk-cpp)
[12] [GDAL Zarr](https://gdal.org/drivers/raster/zarr.html)
# Appendix A. Building NCZarr Support {#nczarr_build} @@ -539,7 +539,7 @@ PATH="$PATH:${AWSSDKBIN}" Then the following options must be specified for cmake. ```` -DAWSSDK_ROOT_DIR=${AWSSDK_ROOT_DIR} --DAWSSDK_DIR=${AWSSDK_ROOT_DIR}/lib/cmake/AWSSDK" +-DAWSSDK_DIR=${AWSSDK_ROOT_DIR}/lib/cmake/AWSSDK ```` # Appendix B. Amazon S3 Imposed Limits {#nczarr_s3limits} @@ -578,7 +578,7 @@ can in fact be any legal JSON expression. This "convention" is currently used routinely to help support various attributes created by other packages where the attribute is a complex JSON expression. An example is the GDAL Driver -convention [12], where the value is a complex +convention [12], where the value is a complex JSON dictionary. In order for NCZarr to be as consistent as possible with Zarr Version 2, From b588c009cb979d985e244a049fd1b78b65372650 Mon Sep 17 00:00:00 2001 From: Ward Fisher Date: Thu, 21 Dec 2023 09:56:31 -0700 Subject: [PATCH 35/35] Updated doxygen files for older, less-forgiving versions of doxygen (1.9.1, at least) --- .gitignore | 1 + docs/filters.md | 2 +- docs/nczarr.md | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 9abf05757..14eed1c50 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ test-driver ##### ### 'Normal' gitignore files. +docs/auth.html .vscode nug.tag netcdf-c.tag diff --git a/docs/filters.md b/docs/filters.md index 75aae299d..400ac896a 100644 --- a/docs/filters.md +++ b/docs/filters.md @@ -739,7 +739,7 @@ This can be accomplished using this command. Since ncdump is not being asked to access the data (the -h flag), it can obtain the filter information without failures. Then it can print out the filter id and the parameters as well as the Codecs (via the -s flag). -### Test Cases {#filters_TestCase} +## Test Cases {#filters_TestCase} Within the netcdf-c source tree, the directory two directories contain test cases for testing dynamic filter operation. diff --git a/docs/nczarr.md b/docs/nczarr.md index 7bb35b4bd..6fafa1ee2 100644 --- a/docs/nczarr.md +++ b/docs/nczarr.md @@ -449,11 +449,11 @@ Here are a couple of examples using the _ncgen_ and _ncdump_ utilities. ``` 4. Create an nczarr file using S3 as storage and keeping to the pure zarr format. ``` - ncgen -4 -lb -o 's3://s3.uswest-1.amazonaws.com/datasetbucket#mode=zarr dataset.cdl + ncgen -4 -lb -o 's3://s3.uswest-1.amazonaws.com/datasetbucket\#mode=zarr dataset.cdl ``` 5. Create an nczarr file using the s3 protocol with a specific profile ``` - ncgen -4 -lb -o 's3://datasetbucket/rootkey#mode=nczarr,awsprofile=unidata' dataset.cdl + ncgen -4 -lb -o 's3://datasetbucket/rootkey\#mode=nczarr,awsprofile=unidata' dataset.cdl ``` Note that the URL is internally translated to this ```