netcdf-c/ncdap_test/findtestserver.c.in
Dennis Heimbigner 245961de00 re: github issues
https://github.com/Unidata/netcdf-c/issues/1168
    https://github.com/Unidata/netcdf-c/issues/1163
    https://github.com/Unidata/netcdf-c/issues/1162

This PR partially fixes memory leaks in the netcdf-c library,
in the ncdump utility, and in some test cases.

The netcdf-c library now runs memory clean with the assumption
that the --disable-utilities option is used. The primary remaining
problem is ncgen. Once that is fixed, I believe the netcdf-c library
will run memory clean with no limitations.

Notes
-----------
1. Memory checking was performed using gcc -fsanitize=address.
   Valgrind-based testing has yet to be performed.
2. The pnetcdf, hdf4, and examples code has not been tested.

Misc. Non-leak changes
1. Make tst_diskless2 only run when netcdf4 is enabled (issue 1162)
2. Fix CmakeLists.txt to turn off logging if ENABLE_NETCDF_4 is OFF
3. Isolated all my debug scripts into a single top-level directory
   called debug
4. Fix some USE_NETCDF4 dependencies in nc_test and nc_test4 Makefile.am
2018-10-30 20:48:12 -06:00

83 lines
1.7 KiB
C

#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "nctestserver.h"
/* Support stringification of -D macros */
#define XSTRINGIFY(s) #s
#define STRINGIFY(s) XSTRINGIFY(s)
/**
usage: findtestserver dap2|dap4 suffix [serverlist]
Given a partial suffix path, try to find a
server for which a request to server + suffix
returns some kind of result using the
specified protocol. This indicates that the
server is up and running. Return the complete
url for the server plus the path.
If serverlist is present, then is should be a comma
separated list of servers (host+port) to try.
It defaults to REMOTETESTSERVERS.
*/
static void
usage()
{
fprintf(stderr,"usage: findtestserver dap2|dap4 suffix [serverlist]\n");
exit(1);
}
int
main(int argc, char** argv)
{
char* url = NULL;
const char* servlet = NULL;
const char* proto = NULL;
char* serverlist = NULL;
int isdap4 = 0; /* 1 => dap4 */
argc--; argv++;
if(argc < 2)
usage();
proto = strdup(argv[0]);
servlet = strdup(argv[1]);
if(argc >= 3)
serverlist = strdup(argv[2]);
#ifdef ENABLE_DAP
if(strcasecmp(proto,"dap2")==0)
isdap4 = 0;
else
#endif
#ifdef ENABLE_DAP4
if(strcasecmp(proto,"dap4")==0)
isdap4 = 1;
else
#endif
usage();
if(serverlist == NULL) {
#ifdef REMOTETESTSERVERS
serverlist = strdup(REMOTETESTSERVERS);
#endif
}
if(serverlist == NULL || strlen(serverlist) == 0)
fprintf(stderr,"Cannot determine a server list");
url = nc_findtestserver(servlet,isdap4,serverlist);
if(url == NULL) {
url = "";
fprintf(stderr,"not found: %s\n",servlet);
}
printf("%s",url);
fflush(stdout);
/* clean up */
free(serverlist);
free(url);
exit(0);
}