diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 61e9a48089..8a7310609a 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -7,9 +7,15 @@ This file contains a high-level description of this package's evolution. Release ## 4.6.3 - TBD -* Update the license from the home-brewed NetCDF license to the standard 3-Clause BSD License. This change does not result in any new restrictions; it is merely the adoption of a standard, well-known and well-understood license in place of the historic NetCDF license written at Unidata. This is part of a broader push by Unidata to adopt modern, standardized licensing. +## 4.6.2.1 - February 15, 2019 +### Maintenance Release +* Update the license from the home-brewed NetCDF license to the standard 3-Clause BSD License. This change does not result in any new restrictions; it is merely the adoption of a standard, well-known and well-understood license in place of the historic NetCDF license written at Unidata. This is part of a broader push by Unidata to adopt modern, standardized licensing. +* [BugFix] Corrected DAP-releated issues on big-endian machines. See [Github #1321](https://github.com/Unidata/netcdf-c/issues/1321), [Github #1302](https://github.com/Unidata/netcdf-c/issues/1302) for more information. +* [BugFix][Enhancement] Various and sundry bugfixes and performance enhancements, thanks to @edhartnett, @gsjaardema, @t-b, @wkliao, and all of our other contributors. +* [Enhancement] Extended `nccopy -F` syntax to support multiple variables with a single invocation. See [Github #1311](https://github.com/Unidata/netcdf-c/issues/1311) for more information. +* [BugFix] Corrected an issue where DAP2 was incorrectly converting signed bytes, resulting in an erroneous error message under some circumstances. See [GitHub #1317](https://github.com/Unidata/netcdf-c/issues/1317) for more information. See [Github #1319](https://github.com/Unidata/netcdf-c/issues/1319) for related information. * [BugFix][Enhancement] Modified `nccopy` so that `_NCProperties` is not copied over verbatim but is instead generated based on the version of `libnetcdf` used when copying the file. Additionally, `_NCProperties` are displayed if/when associated with a netcdf3 file, now. See [GitHub #803](https://github.com/Unidata/netcdf-c/issues/803) for more information. ## 4.6.2 - November 16, 2018 diff --git a/docs/DAP4.dox b/docs/DAP4.dox index e0a3838094..f9195e8e2c 100644 --- a/docs/DAP4.dox +++ b/docs/DAP4.dox @@ -46,11 +46,11 @@ format. The URL is composed of three parts. + http://remotetest.unidata.ucar.edu/d4ts/test.01#protocol=dap4 + http://thredds.ucar.edu/thredds/dap4/... - - Constraints - these are suffixed to the URL and take the form +- Constraints - these are suffixed to the URL and take the form “?dap4.ce=\”. The form of the constraint expression is somewhat complicated, and the specification should be consulted. - - Client parameters - these may be specified in either of +- Client parameters - these may be specified in either of two ways. The older, deprecated form prefixes text to the front of the url and is of the the general form [\] or [\=value]. Examples include [show=fetch] or [noprefetch]. @@ -95,7 +95,7 @@ Parameter Name Legal Values Semantics for specially named elements in the DMR XML in order to achieve a better translation of the DAP4 meta-data to NetCDF enhanced metadata. -- "opaquesize=" - This parameter causes the netCDF code to +- "opaquesize=" - This parameter causes the netCDF code to convert DAP4 variable size OPAQUE objects to netcdf-4 fixed size objects and forces all of them to be of the size specified. - "fillmismatch" - Unfortunately, a number of servers sometimes @@ -152,79 +152,79 @@ Finally from the set so constructed, choose the first matching entry. Currently, the supported set of keys (with descriptions) are as follows. --# HTTP.VERBOSE - Type: boolean ("1"/"0") - Description: Produce verbose output, especially using SSL. - Related CURL Flags: CURLOPT_VERBOSE - --# HTTP.DEFLATE - Type: boolean ("1"/"0") - Description: Allow use of compression by the server. - Related CURL Flags: CURLOPT_ENCODING - --# HTTP.COOKIEJAR - Type: String representing file path - Description: Specify the name of file into which to store cookies. Defaults to in-memory storage. - Related CURL Flags:CURLOPT_COOKIEJAR - --# HTTP.CREDENTIALS.USER - Type: String representing user name - Description: Specify the user name for Digest and Basic authentication. - Related CURL Flags: - --# HTTP.CREDENTIALS.PASSWORD - Type: String representing password - Type: boolean ("1"/"0") - Description: Specify the password for Digest and Basic authentication. - Related CURL Flags: - --# HTTP.SSL.CERTIFICATE - Type: String representing file path - Description: Path to a file containing a PEM cerficate. - Related CURL Flags: CURLOPT_CERT - --# HTTP.SSL.KEY - Type: String representing file path - Description: Same as HTTP.SSL.CERTIFICATE, and should usually have the same value. - Related CURL Flags: CURLOPT_SSLKEY - --# HTTP.SSL.KEYPASSWORD - Type: String representing password - Description: Password for accessing the HTTP.SSL.KEY/HTTP.SSL.CERTIFICATE - Related CURL Flags: CURLOPT_KEYPASSWORD - --# HTTP.SSL.CAPATH - Type: String representing directory - Description: Path to a directory containing trusted certificates for validating server certificates. - Related CURL Flags: CURLOPT_CAPATH - --# HTTP.SSL.VALIDATE - Type: boolean ("1"/"0") - Description: Cause the client to verify the server's presented certificate. - Related CURL Flags: CURLOPT_SSL_VERIFYPEER, CURLOPT_SSL_VERIFYHOST - --# HTTP.TIMEOUT - Type: String ("dddddd") - Description: Specify the maximum time in seconds that you allow the http transfer operation to take. - Related CURL Flags: CURLOPT_TIMEOUT, CURLOPT_NOSIGNAL - --# HTTP.PROXY_SERVER - Type: String representing url to access the proxy: (e.g.http://[username:password@]host[:port]) - Description: Specify the needed information for accessing a proxy. - Related CURL Flags: CURLOPT_PROXY, CURLOPT_PROXYHOST, CURLOPT_PROXYUSERPWD - --# HTTP.READ.BUFFERSIZE - Type: String ("dddddd") - Description: Specify the the internal buffer size for curl reads. - Related CURL Flags: CURLOPT_BUFFERSIZE, CURL_MAX_WRITE_SIZE (16kB), - CURL_MAX_READ_SIZE (512kB). - --# HTTP.KEEPALIVE - Type: String ("on|n/m") - Description: Specify that TCP KEEPALIVE should be enabled and that the associated idle wait time is n and that the associated repeat interval is m. If the value is of the form is the string "on", then turn on keepalive, but do not set idle or interval. - Related CURL Flags: CURLOPT_TCP_KEEPALIVE, CURLOPT_TCP_KEEPIDLE, - CURLOPT_TCP_KEEPINTVL. - +-# HTTP.VERBOSE + Type: boolean ("1"/"0") + Description: Produce verbose output, especially using SSL. + Related CURL Flags: CURLOPT_VERBOSE + +-# HTTP.DEFLATE + Type: boolean ("1"/"0") + Description: Allow use of compression by the server. + Related CURL Flags: CURLOPT_ENCODING + +-# HTTP.COOKIEJAR + Type: String representing file path + Description: Specify the name of file into which to store cookies. Defaults to in-memory storage. + Related CURL Flags:CURLOPT_COOKIEJAR + +-# HTTP.CREDENTIALS.USER + Type: String representing user name + Description: Specify the user name for Digest and Basic authentication. + Related CURL Flags: + +-# HTTP.CREDENTIALS.PASSWORD + Type: String representing password + Type: boolean ("1"/"0") + Description: Specify the password for Digest and Basic authentication. + Related CURL Flags: + +-# HTTP.SSL.CERTIFICATE + Type: String representing file path + Description: Path to a file containing a PEM cerficate. + Related CURL Flags: CURLOPT_CERT + +-# HTTP.SSL.KEY + Type: String representing file path + Description: Same as HTTP.SSL.CERTIFICATE, and should usually have the same value. + Related CURL Flags: CURLOPT_SSLKEY + +-# HTTP.SSL.KEYPASSWORD + Type: String representing password + Description: Password for accessing the HTTP.SSL.KEY/HTTP.SSL.CERTIFICATE + Related CURL Flags: CURLOPT_KEYPASSWORD + +-# HTTP.SSL.CAPATH + Type: String representing directory + Description: Path to a directory containing trusted certificates for validating server certificates. + Related CURL Flags: CURLOPT_CAPATH + +-# HTTP.SSL.VALIDATE + Type: boolean ("1"/"0") + Description: Cause the client to verify the server's presented certificate. + Related CURL Flags: CURLOPT_SSL_VERIFYPEER, CURLOPT_SSL_VERIFYHOST + +-# HTTP.TIMEOUT + Type: String ("dddddd") + Description: Specify the maximum time in seconds that you allow the http transfer operation to take. + Related CURL Flags: CURLOPT_TIMEOUT, CURLOPT_NOSIGNAL + +-# HTTP.PROXY_SERVER + Type: String representing url to access the proxy: (e.g.http://[username:password@]host[:port]) + Description: Specify the needed information for accessing a proxy. + Related CURL Flags: CURLOPT_PROXY, CURLOPT_PROXYHOST, CURLOPT_PROXYUSERPWD + +-# HTTP.READ.BUFFERSIZE + Type: String ("dddddd") + Description: Specify the the internal buffer size for curl reads. + Related CURL Flags: CURLOPT_BUFFERSIZE, CURL_MAX_WRITE_SIZE (16kB), + CURL_MAX_READ_SIZE (512kB). + +-# HTTP.KEEPALIVE + Type: String ("on|n/m") + Description: Specify that TCP KEEPALIVE should be enabled and that the associated idle wait time is n and that the associated repeat interval is m. If the value is of the form is the string "on", then turn on keepalive, but do not set idle or interval. + Related CURL Flags: CURLOPT_TCP_KEEPALIVE, CURLOPT_TCP_KEEPIDLE, + CURLOPT_TCP_KEEPINTVL. + The related curl flags line indicates the curl flags modified by this key. See the libcurl documentation of the _curl_easy_setopt()_ function for more detail (http://curl.haxx.se/libcurl/c/curl_easy_setopt.html). diff --git a/docs/guide.dox b/docs/guide.dox index 84ddd7ac01..a581454f99 100644 --- a/docs/guide.dox +++ b/docs/guide.dox @@ -88,12 +88,8 @@ were written. Unidata supports the netCDF interfaces for C (see NetCDF-C User's -Guide), FORTRAN 77 (see NetCDF Fortran 77 Interface Guide), FORTRAN 90 (see NetCDF Fortran 90 Interface Guide), and C++ (see ), Fortran (see NetCDF-Fortran User's Guide) +and C++ (see NetCDF C++ Interface Guide). The netCDF library is supported for various UNIX operating systems. A diff --git a/docs/mainpage.dox b/docs/mainpage.dox index ccd1366f0c..c7f35abe57 100644 --- a/docs/mainpage.dox +++ b/docs/mainpage.dox @@ -9,6 +9,12 @@ NetCDF is a set of software libraries and self-describing, machine-independent d The NetCDF homepage may be found at http://www.unidata.ucar.edu/software/netcdf/. The NetCDF source-code is hosted at GitHub, and may be found directly at http://github.com/Unidata/netcdf-c. +\subsection mainpage_learn_more_fortran Looking for NetCDF-Fortran Documentation? + +You can find the documentation for netCDF-Fortran here: + +- The NetCDF-Fortran Developer's Guide + \section this_release Learn more about the current NetCDF-C Release - \subpage RELEASE_NOTES @@ -23,6 +29,7 @@ The NetCDF homepage may be found at The netCDF-Fortran Nightly and Continuous Integration Dashboard - NetCDF-Fortran at Travis-CI diff --git a/include/ncconfigure.h b/include/ncconfigure.h index 66fe1ffc80..91e4117ebd 100644 --- a/include/ncconfigure.h +++ b/include/ncconfigure.h @@ -41,7 +41,10 @@ typedef SSIZE_T ssize_t; in its headers.*/ #ifndef _WIN32 #if __STDC__ == 1 /*supposed to be same as -ansi flag */ + +#ifndef strdup extern char* strdup(const char*); +#endif #ifndef strlcat extern size_t strlcat(char*,const char*,size_t); @@ -58,8 +61,10 @@ extern unsigned long long int strtoull(const char*, char**, int); #endif #ifdef _WIN32 +#ifndef strlcat #define strlcat(d,s,n) strcat_s((d),(n),(s)) #endif +#endif /* handle null arguments */ #ifndef nulldup diff --git a/include/netcdf_mem.h b/include/netcdf_mem.h index 8f7769aa9b..120001ac2d 100644 --- a/include/netcdf_mem.h +++ b/include/netcdf_mem.h @@ -12,6 +12,20 @@ #ifndef NETCDF_MEM_H #define NETCDF_MEM_H 1 +/* Declaration modifiers for DLL support (MSC et al) */ +#if defined(DLL_NETCDF) /* define when library is a DLL */ +# if defined(DLL_EXPORT) /* define when building the library */ +# define MSC_EXTRA __declspec(dllexport) +# else +# define MSC_EXTRA __declspec(dllimport) +# endif +# include +#else +#define MSC_EXTRA /**< Needed for DLL build. */ +#endif /* defined(DLL_NETCDF) */ + +#define EXTERNL MSC_EXTRA extern /**< Needed for DLL build. */ + typedef struct NC_memio { size_t size; void* memory; diff --git a/nc_test4/CMakeLists.txt b/nc_test4/CMakeLists.txt index e5a1dfb2c8..e87b12c2f4 100644 --- a/nc_test4/CMakeLists.txt +++ b/nc_test4/CMakeLists.txt @@ -16,7 +16,7 @@ SET(NC4_TESTS tst_dims tst_dims2 tst_dims3 tst_files tst_files4 tst_files6 tst_sync tst_h_strbug tst_h_refs tst_h_scalar tst_rename tst_rename2 tst_rename3 tst_h5_endians tst_atts_string_rewrite tst_put_vars_two_unlim_dim tst_hdf5_file_compat tst_fill_attr_vanish tst_rehash tst_types tst_bug324 - tst_filterparser tst_atts3 tst_put_vars tst_elatefill tst_udf) + tst_atts3 tst_put_vars tst_elatefill tst_udf) # Note, renamegroup needs to be compiled before run_grp_rename @@ -29,6 +29,7 @@ IF(ENABLE_FILTER_TESTING) build_bin_test(test_filter) build_bin_test(test_filter_misc) ADD_SH_TEST(nc_test4 tst_filter) + SET(NC4_TESTS ${NC4_TESTS} tst_filterparser) ENDIF(ENABLE_FILTER_TESTING) ENDIF(BUILD_UTILITIES) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 34c18220d3..219328196f 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -8,7 +8,7 @@ SET(CMAKE_BUILD_TYPE "") SET(libbzip2_SOURCES blocksort.c huffman.c crctable.c randtable.c compress.c decompress.c bzlib.c H5Zbzip2.c) -SET(libmisc_SOURCES H5Zmisc.c) +SET(libmisc_SOURCES H5Zmisc.c H5Zutil.c h5misc.h) IF(ENABLE_FILTER_TESTING) IF(BUILD_UTILITIES) diff --git a/plugins/H5Zutil.c b/plugins/H5Zutil.c index 3ec890f4c1..2e5747b9f1 100644 --- a/plugins/H5Zutil.c +++ b/plugins/H5Zutil.c @@ -48,9 +48,10 @@ byteswap4(unsigned char* mem) void NC_filterfix8(void* mem0, int decode) { + +unsigned char* mem = mem0; #ifdef WORDS_BIGENDIAN - unsigned char* mem = mem0; - if(decode) { /* Apply inverse of the encode case */ + if(decode) { /* Apply inverse of the encode case */ byteswap4(mem); /* step 1: byte-swap each piece */ byteswap4(mem+4); byteswap8(mem); /* step 2: convert to little endian format */ @@ -60,6 +61,8 @@ NC_filterfix8(void* mem0, int decode) byteswap4(mem+4); } #else /* Little endian */ + + /* No action is necessary */ -#endif +#endif }