mirror of
https://github.com/Unidata/netcdf-c.git
synced 2025-03-31 17:50:26 +08:00
Further debugging for [NCF-330]. Making decent progress using the debug flags Microsoft provides. See JIRA issue for links to documentation describing these flags.
This commit is contained in:
parent
5cc6e915f1
commit
b7289cdfa4
105
libdap2/dapcvt.c
105
libdap2/dapcvt.c
@ -5,6 +5,10 @@
|
||||
#include "config.h"
|
||||
#include "ncdap.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include <crtdbg.h>
|
||||
#endif
|
||||
|
||||
NCerror
|
||||
dapconvert(nc_type srctype, nc_type dsttype, char* memory0, char* value0, size_t count)
|
||||
{
|
||||
@ -197,67 +201,162 @@ dapcvtattrval(nc_type etype, void* dst, NClist* src)
|
||||
unsigned int memsize = nctypesizeof(etype);
|
||||
unsigned int nvalues = nclistlength(src);
|
||||
char* dstmem = (char*)dst;
|
||||
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
for(i=0;i<nvalues;i++) {
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
char* s = (char*)nclistget(src,i);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
ok = 0;
|
||||
switch (etype) {
|
||||
case NC_BYTE: {
|
||||
unsigned char* p = (unsigned char*)dstmem;
|
||||
ok = sscanf(s,"%hhu",p);
|
||||
char tmp[128];
|
||||
sprintf(tmp, "%%%dhhu", nvalues);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
unsigned char* p = (unsigned char*)dstmem;
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
ok = sscanf(s, tmp, p);
|
||||
//ok = sscanf(s,"%hhu",p);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
} break;
|
||||
case NC_CHAR: {
|
||||
signed char* p = (signed char*)dstmem;
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
ok = sscanf(s,"%c",p);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
} break;
|
||||
case NC_SHORT: {
|
||||
short* p = (short*)dstmem;
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
ok = sscanf(s,"%hd",p);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
} break;
|
||||
case NC_INT: {
|
||||
int* p = (int*)dstmem;
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
ok = sscanf(s,"%d",p);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
} break;
|
||||
case NC_FLOAT: {
|
||||
float* p = (float*)dstmem;
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
ok = sscanf(s,"%g",p);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
} break;
|
||||
case NC_DOUBLE: {
|
||||
double* p = (double*)dstmem;
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
ok = sscanf(s,"%lg",p);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
} break;
|
||||
case NC_UBYTE: {
|
||||
unsigned char* p = (unsigned char*)dstmem;
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
ok = sscanf(s,"%hhu",p);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
} break;
|
||||
case NC_USHORT: {
|
||||
unsigned short* p = (unsigned short*)dstmem;
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
ok = sscanf(s,"%hu",p);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
} break;
|
||||
case NC_UINT: {
|
||||
unsigned int* p = (unsigned int*)dstmem;
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
ok = sscanf(s,"%u",p);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
} break;
|
||||
case NC_INT64: {
|
||||
long long* p = (long long*)dstmem;
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
ok = sscanf(s,"%lld",p);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
} break;
|
||||
case NC_UINT64: {
|
||||
unsigned long long* p = (unsigned long long*)dstmem;
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
ok = sscanf(s,"%llu",p);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
} break;
|
||||
case NC_STRING: case NC_URL: {
|
||||
char** p = (char**)dstmem;
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
*p = nulldup(s);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
ok = 1;
|
||||
} break;
|
||||
default:
|
||||
PANIC1("unexpected nc_type: %d",(int)etype);
|
||||
}
|
||||
if(ok != 1) {ncstat = NC_EINVAL; goto done;}
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
dstmem += memsize;
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
}
|
||||
done:
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
return THROW(ncstat);
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,10 @@
|
||||
#include "ncd2dispatch.h"
|
||||
#include "dapalign.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include <crtdbg.h>
|
||||
#endif
|
||||
|
||||
#define NCRCFILE "NCRCFILE"
|
||||
|
||||
#ifdef HAVE_GETRLIMIT
|
||||
@ -935,12 +939,23 @@ buildattribute(NCDAPCOMMON* dapcomm, NCattribute* att, nc_type vartype, int vari
|
||||
else
|
||||
atype = nctypeconvert(dapcomm,att->etype);
|
||||
typesize = nctypesizeof(atype);
|
||||
if(nvalues > 0)
|
||||
mem = malloc(typesize * nvalues);
|
||||
if (nvalues > 0) {
|
||||
mem = malloc(typesize * nvalues);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
}
|
||||
ncstat = dapcvtattrval(atype,mem,att->values);
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
ncstat = nc_put_att(drno->substrate,varid,att->name,atype,nvalues,mem);
|
||||
nullfree(mem);
|
||||
}
|
||||
#ifdef _MSC_VER
|
||||
_ASSERTE(_CrtCheckMemory());
|
||||
#endif
|
||||
if (mem != NULL)
|
||||
free(mem);
|
||||
}
|
||||
return THROW(ncstat);
|
||||
}
|
||||
|
||||
|
@ -156,7 +156,8 @@ free_NC_attrarrayV0(NC_attrarray *ncap)
|
||||
{
|
||||
NC_attr **app = ncap->value;
|
||||
NC_attr *const *const end = &app[ncap->nelems];
|
||||
for( /*NADA*/; app < end; app++)
|
||||
for( /*NADA*/; app < end; app++)
|
||||
|
||||
{
|
||||
free_NC_attr(*app);
|
||||
*app = NULL;
|
||||
@ -590,7 +591,8 @@ NC3_del_att(int ncid, int varid, const char *uname)
|
||||
break;
|
||||
}
|
||||
}
|
||||
free(name);
|
||||
free(name);
|
||||
|
||||
}
|
||||
if( (size_t) attrid == ncap->nelems )
|
||||
return NC_ENOTATT;
|
||||
@ -1107,9 +1109,9 @@ NC3_put_att(
|
||||
}
|
||||
|
||||
if(attrpp != NULL) {
|
||||
assert(old != NULL);
|
||||
*attrpp = attrp;
|
||||
free_NC_attr(old);
|
||||
if(old != NULL)
|
||||
free_NC_attr(old);
|
||||
} else {
|
||||
const int lstatus = incr_NC_attrarray(ncap, attrp);
|
||||
/*
|
||||
|
@ -831,9 +831,9 @@ NC3_put_att(
|
||||
}
|
||||
|
||||
if(attrpp != NULL) {
|
||||
assert(old != NULL);
|
||||
*attrpp = attrp;
|
||||
free_NC_attr(old);
|
||||
if(old != NULL)
|
||||
free_NC_attr(old);
|
||||
} else {
|
||||
const int lstatus = incr_NC_attrarray(ncap, attrp);
|
||||
/*
|
||||
|
@ -7,6 +7,10 @@
|
||||
*/
|
||||
|
||||
#include <netcdf.h>
|
||||
#include <malloc.h>
|
||||
#ifdef _MSC_VER
|
||||
#include <crtdbg.h>
|
||||
#endif
|
||||
|
||||
static char* URL="http://data.nodc.noaa.gov/thredds/dodsC/testdata/pathfinderAgg/pathFinderV5.2_night.ncml";
|
||||
|
||||
@ -23,6 +27,11 @@ main()
|
||||
int format_p;
|
||||
float lat_data[4320];
|
||||
|
||||
#ifdef _MSC_VER
|
||||
/* See https://msdn.microsoft.com/en-us/library/5at7yxcs(v=vs.120).aspx
|
||||
for more information re: these. */
|
||||
//int tmpFlag = _CrtSetDbgFlag(_CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF);
|
||||
#endif
|
||||
printf(" \n");
|
||||
printf("********************\n");
|
||||
printf("open URL %s\n",URL);
|
||||
|
Loading…
x
Reference in New Issue
Block a user