/* Copyright (c) 1998-2018 University Corporation for Atmospheric Research/Unidata See LICENSE.txt for license information. */ #include "config.h" #include "ncdispatch.h" #include "ncuri.h" #include "nclog.h" #include "ncbytes.h" #include "ncrc.h" #include "ncoffsets.h" #include "ncpathmgr.h" #include "ncxml.h" #include "nc4internal.h" /* Required for getcwd, other functions. */ #ifdef HAVE_UNISTD_H #include #endif /* Required for getcwd, other functions. */ #ifdef _WIN32 #include #endif #if defined(NETCDF_ENABLE_BYTERANGE) || defined(NETCDF_ENABLE_DAP) || defined(NETCDF_ENABLE_DAP4) #include #endif #ifdef NETCDF_ENABLE_S3 #include "ncs3sdk.h" #endif #define MAXPATH 1024 /* Define vectors of zeros and ones for use with various nc_get_varX functions */ /* Note, this form of initialization fails under Cygwin */ size_t NC_coord_zero[NC_MAX_VAR_DIMS] = {0}; size_t NC_coord_one[NC_MAX_VAR_DIMS] = {1}; ptrdiff_t NC_stride_one[NC_MAX_VAR_DIMS] = {1}; /* static nc_type longtype = (sizeof(long) == sizeof(int)?NC_INT:NC_INT64); static nc_type ulongtype = (sizeof(unsigned long) == sizeof(unsigned int)?NC_UINT:NC_UINT64); */ /* Allow dispatch to do general initialization and finalization */ int NCDISPATCH_initialize(void) { int status = NC_NOERR; int i; NCglobalstate* globalstate = NULL; for(i=0;itempdir= strdup(tempdir); } /* Capture $HOME */ { #if defined(_WIN32) && !defined(__MINGW32__) char* home = getenv("USERPROFILE"); #else char* home = getenv("HOME"); #endif if(home == NULL) { /* use cwd */ home = malloc(MAXPATH+1); NCgetcwd(home,MAXPATH); } else home = strdup(home); /* make it always free'able */ assert(home != NULL); NCpathcanonical(home,&globalstate->home); nullfree(home); } /* Capture $CWD */ { char cwdbuf[4096]; cwdbuf[0] = '\0'; (void)NCgetcwd(cwdbuf,sizeof(cwdbuf)); if(strlen(cwdbuf) == 0) { /* use tempdir */ strcpy(cwdbuf, globalstate->tempdir); } globalstate->cwd = strdup(cwdbuf); } ncloginit(); /* Now load RC Files */ ncrc_initialize(); /* Compute type alignments */ NC_compute_alignments(); #if defined(NETCDF_ENABLE_BYTERANGE) || defined(NETCDF_ENABLE_DAP) || defined(NETCDF_ENABLE_DAP4) /* Initialize curl if it is being used */ { CURLcode cstat = curl_global_init(CURL_GLOBAL_ALL); if(cstat != CURLE_OK) status = NC_ECURL; } #endif return status; } int NCDISPATCH_finalize(void) { int status = NC_NOERR; #if defined(NETCDF_ENABLE_BYTERANGE) || defined(NETCDF_ENABLE_DAP) || defined(NETCDF_ENABLE_DAP4) curl_global_cleanup(); #endif #if defined(NETCDF_ENABLE_DAP4) ncxml_finalize(); #endif NC_freeglobalstate(); /* should be one of the last things done */ return status; }