Commit Graph

47 Commits

Author SHA1 Message Date
Dennis Heimbigner
0b7a5382e7 Codify cross-platform file paths
The netcdf-c code has to deal with a variety of platforms:
Windows, OSX, Linux, Cygwin, MSYS, etc.  These platforms differ
significantly in the kind of file paths that they accept.  So in
order to handle this, I have created a set of replacements for
the most common file system operations such as _open_ or _fopen_
or _access_ to manage the file path differences correctly.

A more limited version of this idea was already implemented via
the ncwinpath.h and dwinpath.c code. So this can be viewed as a
replacement for that code. And in path in many cases, the only
change that was required was to replace '#include <ncwinpath.h>'
with '#include <ncpathmgt.h>' and then replace file operation
calls with the NCxxx equivalent from ncpathmgr.h Note that
recently, the ncwinpath.h was renamed ncpathmgmt.h, so this pull
request should not require dealing with winpath.

The heart of the change is include/ncpathmgmt.h, which provides
alternate operations such as NCfopen or NCaccess and which properly
parse and rebuild path arguments to work for the platform on which
the code is executing. This mostly matters for Windows because of the
way that it uses backslash and drive letters, as compared to *nix*.
One important feature is that the user can do string manipulations
on a file path without having to worry too much about the platform
because the path management code will properly handle most mixed cases.
So one can for example concatenate a path suffix that uses forward
slashes to a Windows path and have it work correctly.

The conversion code is in libdispatch/dpathmgr.c, and the
important function there is NCpathcvt which does the proper
conversions to the local path format.

As a rule, most code should just replace their file operations with
the corresponding NCxxx ones defined in include/ncpathmgmt.h. These
NCxxx functions all call NCpathcvt on their path arguments before
executing the actual file operation.

In some rare cases, the client may need to directly use NCpathcvt,
but this should be avoided as much as possible. If there is a need
for supporting a new file operation not already in ncpathmgmt.h, then
use the code in dpathmgr.c as a template. Also please notify Unidata
so we can include it as a formal part or our supported operations.
Also, if you see an operation in the library that is not using the
NCxxx form, then please submit an issue so we can fix it.

Misc. Changes:
* Clean up the utf8 testing code; it is impossible to get some
  tests to work under windows using shell scripts; the args do
  not pass as utf8 but as some other encoding.
* Added an extra utf8 test case: test_unicode_path.sh
* Add a true test for HDF5 1.10.6 or later because as noted in
  PR https://github.com/Unidata/netcdf-c/pull/1794,
  HDF5 changed its Windows file path handling.
2021-03-04 13:41:31 -07:00
Greg Sjaardema
56c0d5cf8a Spelling fixes 2019-09-18 08:03:01 -06:00
Ben Boeckel
b3f34432a3 warnings: mark unused parameters 2019-01-16 15:55:33 -05:00
Ben Boeckel
a747216c33 warnings: mark conditionally used parameters 2019-01-16 15:53:25 -05:00
Ward Fisher
87110139f6 More synchronization of copyright stanzas. 2018-12-06 14:34:40 -07:00
luz.paz
b4d0fe651a Follow-up trivial typos 2018-04-26 23:04:01 -04:00
Dennis Heimbigner
8cb1fc4cfe This is the second step in refactoring the libsrc4 code.
The first was branch newhash0.dmh.

As with newhash0.dmh, these changes should be transparent.
2018-02-24 20:36:24 -07:00
Ben Boeckel
b432a527c4 c: remove __CHAR_UNSIGNED__
In C, `char`, `signed char`, and `unsigned char` are three separate,
distinct types, so just because `char` happens to be signed does not
mean it is interchangeable with `signed char`.
2018-02-14 17:24:49 -05:00
Ed Hartnett
ca9a5d4133 fixed warning 2017-10-25 06:30:47 -06:00
Wei-keng Liao
308c2f764e struct stat.st_size is of type off_t 2017-06-09 02:51:06 -05:00
Ward Fisher
8dddd222a3 Merged master, DAP4 support into branch. 2017-04-19 09:29:35 -06:00
Wei-keng Liao
7aa8fc36c7 include config.h the way suggested by autoconf 2017-03-11 13:03:17 -06:00
Dennis Heimbigner
3db4f013bf Primary change: add dap4 support
Specific changes:
1. Add dap4 code: libdap4 and dap4_test.
   Note that until the d4ts server problem is solved, dap4 is turned off.
2. Modify various files to support dap4 flags:
	configure.ac, Makefile.am, CMakeLists.txt, etc.
3. Add nc_test/test_common.sh. This centralizes
   the handling of the locations of various
   things in the build tree: e.g. where is
   ncgen.exe located. See nc_test/test_common.sh
   for details.
4. Modify .sh files to use test_common.sh
5. Obsolete separate oc2 by moving it to be part of
   netcdf-c. This means replacing code with netcdf-c
   equivalents.
5. Add --with-testserver to configure.ac to allow
   override of the servers to be used for --enable-dap-remote-tests.
6. There were multiple versions of nctypealignment code. Try to
   centralize in libdispatch/doffset.c and include/ncoffsets.h
7. Add a unit test for the ncuri code because of its complexity.
8. Move the findserver code out of libdispatch and into
   a separate, self contained program in ncdap_test and dap4_test.
9. Move the dispatch header files (nc{3,4}dispatch.h) to
   .../include because they are now shared by modules.
10. Revamp the handling of TOPSRCDIR and TOPBUILDDIR for shell scripts.
11. Make use of MREMAP if available
12. Misc. minor changes e.g.
	- #include <config.h> -> #include "config.h"
	- Add some no-install headers to /include
	- extern -> EXTERNL and vice versa as needed
	- misc header cleanup
	- clean up checking for misc. unix vs microsoft functions
13. Change copyright decls in some files to point to LICENSE file.
14. Add notes to RELEASENOTES.md
2017-03-08 17:01:10 -07:00
Ward Fisher
fb2ff0c24b Refactored old ENOERR code into NC_NOERR error code in libsrc. This is done in support of https://github.com/Unidata/netcdf-c/issues/213. 2016-03-07 10:58:02 -07:00
Ward Fisher
b19b807e8b Working around a couple of problematic calls to fstat in support of https://github.com/Unidata/netcdf-c/issues/188 . No idea why these were a problem in VS14 (Visual Studio 2015) and not in VS12 (Visual Studio 2013). It's possible there are other, similar issues out there. We'll see what turns up when we run all the tests. These changes were tested against nc_test4/tst_large2.c 2016-03-02 13:03:29 -07:00
Ward Fisher
a81f150e88 Modified fstat call in fgrow2 to use filelengthi64 on Windows, where available. 2016-03-02 10:51:11 -07:00
Ward Fisher
fbdea5c4a0 Working in support of https://github.com/Unidata/netcdf-c/issues/188 . Exploratory work. 2016-02-29 15:08:09 -07:00
Ward Fisher
cee769cc1e Converting CHAR_IS_SIGNED over to autoconf-style __CHAR_UNSIGNED__ 2015-12-28 21:27:27 +00:00
Ward Fisher
8e4a8f4225 Chasing down implicit char cast which rounds a value to 0 when a negative value is cast to a different unsigned type. 2015-12-28 20:24:56 +00:00
Ward Fisher
612b35a84c Merge branch 'master' into cdf-5, in preparation for merging the CDF-5 functionality into the master branch. This will be the key new feature for netcdf 4.4.0. 2015-11-05 13:40:35 -07:00
tbeu
e2820e4d8a Fix common typos
Detected by https://github.com/vlajos/misspell_fixer
2015-08-20 11:42:05 +02:00
dmh
859f105005 merge-squash 2015-08-15 16:26:35 -06:00
Ward Fisher
1f5e6379e4 Fixed a memory corruption. Coverity issue: 1265729: Out-of-bounds access. 2015-07-29 14:58:34 -06:00
Ward Fisher
8bda7fdf67 Fleshed out comments a little more, added a specific check for older systems which return -1 instead of bytes read when the read() call is interrupted and errno is EINTR. 2015-07-21 14:08:44 -06:00
Ward Fisher
7164a99cbc Added some comments. 2015-07-21 14:00:37 -06:00
Ward Fisher
382b24c2c9 Addressing a signal-interrupted read which sets errno to EINTR [NCF-337] 2015-07-21 13:55:59 -06:00
dmh
3dd807a155 The original mem branch somehow got
hosed, so I rebuilt it as a new mem2 branch.
2015-05-28 15:10:10 -06:00
posophe
327731852e correct casting 2015-04-18 13:09:46 +02:00
Ward Fisher
056de3f69d Corrected a logic error introduced in previous commit. 2014-08-27 15:40:41 -06:00
Ward Fisher
dac65bdab8 Removed a commented-out block of code. 2014-08-27 14:40:40 -06:00
Ward Fisher
4286822b91 Moved lseek call out of assert statement into an explicit check. JIRA NCF-312. 2014-08-27 14:26:54 -06:00
Ward Fisher
7786b78cfc Reorganized Windows includes. 2014-02-04 11:10:27 -07:00
Ward Fisher
c1407c3239 Removed stray debugging message. 2014-02-03 14:42:56 -07:00
Ward Fisher
5566cbb772 Added a check for _filelengthi64 in configuration. When found, this will be used instead of fstat when computing file length. 2013-11-04 12:58:33 -07:00
Ward Fisher
bda59030cb Replaced call to fstat with call to filelength, on apropriate system. 2013-11-01 16:30:33 -06:00
Ward Fisher
81280c7878 Merge from latest netcdf-cmake branch.
- Fixes for Windows.
- CMake-based changes (functionality, tests).
- Smattering of coverity-informed bug-fixes.
2012-12-05 18:35:42 +00:00
Dennis Heimbigner
076e78e91c Fix Jira bug NC-198 2012-10-02 14:54:19 +00:00
Ward Fisher
5d6e88cf83 Added a check for closing an unopened file which only seemds to be an
issue on Windows, under MSVC.
2012-09-14 23:01:40 +00:00
Dennis Heimbigner
cd36ff7682 fix #elif problem 2012-07-18 16:14:08 +00:00
Dennis Heimbigner
8c01f7437f fixed valgrind error in tst_h_strings.c 2012-07-18 15:50:29 +00:00
Ward Fisher
75a48b9e9e Integrated changes from trunk, began adding CMake support, updated 'build everything' script. 2012-07-02 22:59:59 +00:00
Dennis Heimbigner
7e27052f87 - Implemented diskless files for both netcdf classic and extended.
The in-memory files can be made persistent if nc_create is called with
  NC_DISKLESS|NC_WRITE flags set. Initial test case also included.
- Modified ncio mechanism to support
  multiple ncio packages; this is so we
  can have posixio and memio operating
  at the same time.
- cleanup up a bunch of lint issues (unused variables, etc).
2012-03-26 01:34:32 +00:00
Russ Rew
74c9b713bd Fix for nofill bug and test 2011-04-28 19:50:56 +00:00
Ed Hartnett
4de8b33251 rolled everything back to 1119 2011-04-28 17:11:21 +00:00
Russ Rew
0f4a94518d Fixed nofill bug, cosmetic updates to tutrial 2011-04-28 15:08:03 +00:00
Russ Rew
7a34f42844 Applied Harold Anlauf's patch for a longstanding bug in
libsrc/posixio.c when providing a sizehint which is larger than the
hardcoded value of NCIO_MAXBLOCKSIZE, which doesn't then get used.
2010-06-30 17:27:24 +00:00
Ed Hartnett
18f4bca367 moving to trunk subdir 2010-06-03 13:24:43 +00:00