From 51fa5fce1b4ec3b414917b352c84976f3aa0f552 Mon Sep 17 00:00:00 2001 From: Dennis Heimbigner Date: Tue, 18 May 2021 14:06:12 -0600 Subject: [PATCH 1/6] Fix NCclosedir in dpathmgr.c re: Issue https://github.com/Unidata/netcdf-c/issues/1999 NCclosedir code is incorrect. Fix. Note that this issue crops up when using a non-VisualStudio windows build such as Mingw because Mingq defines dirent.h, but Visual Studio does not. --- libdispatch/dpathmgr.c | 35 +---------------------------------- 1 file changed, 1 insertion(+), 34 deletions(-) diff --git a/libdispatch/dpathmgr.c b/libdispatch/dpathmgr.c index 0a3e312eb7..6ab6588af6 100644 --- a/libdispatch/dpathmgr.c +++ b/libdispatch/dpathmgr.c @@ -356,10 +356,7 @@ int NCclosedir(DIR* ent) { int stat = NC_NOERR; - char* cvtname = NCpathcvt(path); - if(cvtname == NULL) {errno = ENOENT; return -1;} - stat = closedir(cvtname); - free(cvtname); + if(closedir(ent) < 0) stat = errno; return stat; } #endif @@ -911,33 +908,3 @@ printutf8hex(const char* s, char* sx) } *q = '\0'; } - -/**************************************************/ -#if 0 -#ifdef HAVE_DIRENT_H -EXTERNL -DIR* -NCopendir(const char* path) -{ - DIR* ent = NULL; - char* cvtpath = NCpathcvt(path); - if(cvtpath == NULL) return -1; - ent = opendir(cvtpath); - free(cvtpath); - return ent; -} - -EXTERNL -int -NCclosedir(DIR* ent) -{ - int stat = 0; - char* cvtpath = NCpathcvt(path); - if(cvtpath == NULL) return -1; - stat = closedir(cvtpath); - free(cvtpath); - return stat; -} -#endif -#endif /*0*/ - From e196234ed9e4183a5237fc5cea16c98941694f38 Mon Sep 17 00:00:00 2001 From: Dennis Heimbigner Date: Tue, 18 May 2021 14:08:41 -0600 Subject: [PATCH 2/6] Update RELEASENOTES --- RELEASE_NOTES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index f273a6644d..d56e95e765 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -6,6 +6,7 @@ Release Notes {#RELEASE_NOTES} This file contains a high-level description of this package's evolution. Releases are in reverse chronological order (most recent first). Note that, as of netcdf 4.2, the `netcdf-c++` and `netcdf-fortran` libraries have been separated into their own libraries. ## 4.8.1 - TBD +* [Bug Fix] Fix bug in NCclosedir in dpathmgr.c. See [Github #2003](https://github.com/Unidata/netcdf-c/issues/2003). * [Bug Fix] Fix bug in JSON processing of strings with embedded quotes. See [Github #1993](https://github.com/Unidata/netcdf-c/issues/1993). * [Enhancement] Add support for the new "dimension_separator" enhancement to Zarr v2. See [Github #1990](https://github.com/Unidata/netcdf-c/pull/1990) for more information. * [Bug Fix] Fix hack for handling failure of shell programs to properly handle escape characters. See [Github #1989](https://github.com/Unidata/netcdf-c/issues/1989). From 453ad847b99d4e4724bdbaa41b30558488765740 Mon Sep 17 00:00:00 2001 From: Dennis Heimbigner Date: Wed, 19 May 2021 14:38:07 -0600 Subject: [PATCH 3/6] turn off tracing --- libnczarr/zdebug.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libnczarr/zdebug.h b/libnczarr/zdebug.h index f6f12dc720..a7cbd5be2d 100644 --- a/libnczarr/zdebug.h +++ b/libnczarr/zdebug.h @@ -9,7 +9,7 @@ #undef ZDEBUG1 /* detailed debug */ #undef ZCATCH /* Warning: significant performance impact */ -#define ZTRACING /* Warning: significant performance impact */ +#undef ZTRACING /* Warning: significant performance impact */ #include "ncexternl.h" #include "nclog.h" From edc2c7af98c4752555c873f4e1ad38e113184687 Mon Sep 17 00:00:00 2001 From: Dennis Heimbigner Date: Wed, 19 May 2021 17:19:33 -0600 Subject: [PATCH 4/6] fix cygwin build --- ncdump/Makefile.am | 6 +++++- test_common.in | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ncdump/Makefile.am b/ncdump/Makefile.am index b5cd0438b7..017a00d994 100644 --- a/ncdump/Makefile.am +++ b/ncdump/Makefile.am @@ -66,7 +66,7 @@ bom tst_dimsizes nctrunc tst_rcmerge # Tests for classic and 64-bit offset files. TESTS = tst_inttags.sh run_tests.sh tst_64bit.sh ref_ctest \ ref_ctest64 tst_output.sh tst_lengths.sh tst_calendars.sh \ -run_utf8_tests.sh test_unicode_directory.sh tst_nccopy3.sh tst_nccopy3_subset.sh \ +run_utf8_tests.sh tst_nccopy3.sh tst_nccopy3_subset.sh \ tst_charfill.sh tst_iter.sh tst_formatx3.sh tst_bom.sh \ tst_dimsizes.sh run_ncgen_tests.sh tst_ncgen4_classic.sh test_radix.sh test_rcmerge.sh @@ -80,6 +80,10 @@ if USE_STRICT_NULL_BYTE_HEADER_PADDING XFAIL_TESTS += tst_null_byte_padding.sh endif +if ! ISCYGWIN +TESTS += test_unicode_directory.sh +endif + if LARGE_FILE_TESTS TESTS += tst_iter.sh endif diff --git a/test_common.in b/test_common.in index 539be6fdf5..5e36b301b1 100644 --- a/test_common.in +++ b/test_common.in @@ -10,6 +10,7 @@ TOPSRCDIR='@abs_top_srcdir@' TOPBUILDDIR='@abs_top_builddir@' FP_ISCMAKE=@ISCMAKE@ FP_ISMSVC=@ISMSVC@ +FP_ISCYGWIN=@ISCYGWIN@ # Feature flags FEATURE_HDF5=@HAS_HDF5@ From 537f41aeb355fc4ee481fedf0e91f342c59e6b82 Mon Sep 17 00:00:00 2001 From: Dennis Heimbigner Date: Wed, 19 May 2021 17:41:41 -0600 Subject: [PATCH 5/6] Fix 2 for cygwin build --- libnczarr/zmap.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libnczarr/zmap.c b/libnczarr/zmap.c index 19e19a2cbe..ed162dead4 100644 --- a/libnczarr/zmap.c +++ b/libnczarr/zmap.c @@ -377,13 +377,16 @@ nczm_localize(const char* path, char** localpathp, int localize) char* p; int forward = 1; int offset = 0; + static const char* windrive = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; #ifdef _MSC_VER forward = (localize?0:1); #endif /* If path comes from a url, then it may start with: /x:/... where x is a drive letter. If so, then remove leading / */ - if(path[0] == '/' && NChasdriveletter(path+1)) + if(strlen(path) >= 4 + && path[0] == '/' && strchr(windrive,path[1]) != NULL + && path[2] == ':' && path[3] == '/') offset = 1; if((localpath = strdup(path+offset))==NULL) return NC_ENOMEM; From 0e931f22a5c328ce6734cc1674a617c910a9db3e Mon Sep 17 00:00:00 2001 From: Dennis Heimbigner Date: Wed, 19 May 2021 21:04:53 -0600 Subject: [PATCH 6/6] More cygwin fixes --- configure.ac | 8 ++++++-- nc_test4/findplugin.in | 10 ++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/configure.ac b/configure.ac index 25598e9deb..1283aa75ad 100644 --- a/configure.ac +++ b/configure.ac @@ -1095,10 +1095,16 @@ AC_C_BIGENDIAN # Figure out platforms of special interest case "`uname`" in CYGWIN*) ISCYGWIN=yes;; + Darwin*) ISOSX=yes;; WIN*) ISMSVC=yes;; esac AM_CONDITIONAL(ISCYGWIN, [test "x$ISCYGWIN" = xyes]) AM_CONDITIONAL(ISMSVC, [test "x$ISMSVC" = xyes]) +AM_CONDITIONAL(ISOSX, [test "x$ISOSX" = xyes]) + +AC_SUBST([ISMSVC], [${ISMSVC}]) +AC_SUBST([ISCYGWIN], [${ISCYGWIN}]) +AC_SUBST([ISOSX], [${ISOSX}]) ### # Crude hack to work around an issue @@ -1722,8 +1728,6 @@ AC_DEFINE_UNQUOTED([NC_DISPATCH_VERSION], [${NC_DISPATCH_VERSION}], [Dispatch ta # End netcdf_meta.h definitions. ##### -# This would be true for a visual studio build. -AC_SUBST([ISMSVC], [${ISMSVC}]) # This would be true for a cmake build. AC_SUBST([ISCMAKE], []) diff --git a/nc_test4/findplugin.in b/nc_test4/findplugin.in index aafe051de8..9819659686 100644 --- a/nc_test4/findplugin.in +++ b/nc_test4/findplugin.in @@ -27,14 +27,8 @@ FP_NAME="$1" # Figure out the compiler (some values from ./configure) FP_ISCMAKE=@ISCMAKE@ FP_ISMSVC=@ISMSVC@ - -# Are we operating under OS-X? (test using uname) -FP_OS=`uname | cut -d '_' -f 1` -if test "x$FP_OS" = xDarwin ; then FP_ISOSX=1; fi - -# Are we operating under CYGWIN? (test using uname) -FP_OS=`uname | cut -d '_' -f 1` -if test "x$FP_OS" = xCYGWIN ; then FP_ISCYGWIN=1; fi +FP_ISCYGWIN=@ISCYGWIN@ +FP_ISOSX=@ISOSX@ FP_PLUGINS="$TOPBUILDDIR/plugins"