Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
mpim-sw
libcdi
Commits
c21a10fb
Commit
c21a10fb
authored
Jan 27, 2017
by
Uwe Schulzweida
Browse files
Added function cdfGetAttLong().
parent
d80fbb45
Changes
4
Hide whitespace changes
Inline
Side-by-side
src/Makefile.in
View file @
c21a10fb
...
...
@@ -941,8 +941,8 @@ distclean-generic:
maintainer-clean-generic
:
@
echo
"This command is intended for maintainers to use"
@
echo
"it deletes files that may require special tools to rebuild."
@ENABLE_CDI_LIB_FALSE@install-exec-local
:
@ENABLE_CDI_LIB_FALSE@uninstall-local
:
@ENABLE_CDI_LIB_FALSE@install-exec-local
:
clean
:
clean-am
clean-am
:
clean-generic clean-libLTLIBRARIES clean-libtool
\
...
...
src/cdf_int.c
View file @
c21a10fb
...
...
@@ -690,6 +690,19 @@ void cdf_get_att_int(int ncid, int varid, const char *name, int *ip)
}
void
cdf_get_att_long
(
int
ncid
,
int
varid
,
const
char
*
name
,
long
*
ip
)
{
#if defined (HAVE_NETCDF4)
int
status
=
nc_get_att_long
(
ncid
,
varid
,
name
,
ip
);
if
(
CDF_Debug
||
status
!=
NC_NOERR
)
Message
(
"ncid = %d varid = %d att = %s val = %ld"
,
ncid
,
varid
,
name
,
*
ip
);
if
(
status
!=
NC_NOERR
)
Error
(
"%s"
,
nc_strerror
(
status
));
#endif
}
void
cdf_get_att_double
(
int
ncid
,
int
varid
,
const
char
*
name
,
double
*
dp
)
{
int
status
;
...
...
src/cdf_int.h
View file @
c21a10fb
...
...
@@ -76,6 +76,7 @@ void cdf_put_att_double(int ncid, int varid, const char *name, nc_type xtype, si
void
cdf_get_att_string
(
int
ncid
,
int
varid
,
const
char
*
name
,
char
**
tp
);
void
cdf_get_att_text
(
int
ncid
,
int
varid
,
const
char
*
name
,
char
*
tp
);
void
cdf_get_att_int
(
int
ncid
,
int
varid
,
const
char
*
name
,
int
*
ip
);
void
cdf_get_att_long
(
int
ncid
,
int
varid
,
const
char
*
name
,
long
*
ip
);
void
cdf_get_att_double
(
int
ncid
,
int
varid
,
const
char
*
name
,
double
*
dp
);
void
cdf_inq_att
(
int
ncid
,
int
varid
,
const
char
*
name
,
nc_type
*
xtypep
,
size_t
*
lenp
);
...
...
src/stream_cdf_i.c
View file @
c21a10fb
...
...
@@ -7,6 +7,7 @@
//#define TEST_GROUPS 1
#include
<ctype.h>
#include
<limits.h>
#include
"dmemory.h"
#include
"gaussgrid.h"
...
...
@@ -293,6 +294,32 @@ void cdfGetAttInt(int fileID, int ncvarid, const char *attname, int attlen, int
}
}
static
void
cdfGetAttLong
(
int
fileID
,
int
ncvarid
,
const
char
*
attname
,
int
attlen
,
long
*
attint
)
{
nc_type
atttype
;
size_t
nc_attlen
;
*
attint
=
0
;
cdf_inq_atttype
(
fileID
,
ncvarid
,
attname
,
&
atttype
);
cdf_inq_attlen
(
fileID
,
ncvarid
,
attname
,
&
nc_attlen
);
if
(
atttype
!=
NC_CHAR
)
{
long
*
pintatt
=
(
int
)
nc_attlen
>
attlen
?
(
long
*
)(
Malloc
(
nc_attlen
*
sizeof
(
long
)))
:
attint
;
cdf_get_att_long
(
fileID
,
ncvarid
,
attname
,
pintatt
);
if
(
(
int
)
nc_attlen
>
attlen
)
{
memcpy
(
attint
,
pintatt
,
(
size_t
)
attlen
*
sizeof
(
long
));
Free
(
pintatt
);
}
}
}
static
void
cdfGetAttDouble
(
int
fileID
,
int
ncvarid
,
char
*
attname
,
int
attlen
,
double
*
attdouble
)
{
...
...
@@ -428,6 +455,18 @@ bool xtypeIsInt(nc_type xtype)
return
isInt
;
}
static
bool
xtypeIsInt64
(
nc_type
xtype
)
{
#if defined (HAVE_NETCDF4)
bool
isInt
=
xtype
==
NC_INT64
||
xtype
==
NC_UINT64
;
#else
bool
isInt
=
false
;
#endif
return
isInt
;
}
static
int
cdfInqDatatype
(
int
xtype
,
bool
lunsigned
)
{
...
...
@@ -873,7 +912,6 @@ void cdf_set_cdi_attr(int ncid, int ncvarid, int attnum, int cdiID, int varID)
cdf_inq_attname
(
ncid
,
ncvarid
,
attnum
,
attname
);
cdf_inq_attlen
(
ncid
,
ncvarid
,
attname
,
&
attlen
);
cdf_inq_atttype
(
ncid
,
ncvarid
,
attname
,
&
atttype
);
if
(
xtypeIsInt
(
atttype
)
)
{
int
attint
[
attlen
];
...
...
@@ -888,6 +926,24 @@ void cdf_set_cdi_attr(int ncid, int ncvarid, int attnum, int cdiID, int varID)
CDI_DATATYPE_INT32
;
cdiDefAttInt
(
cdiID
,
varID
,
attname
,
datatype
,
(
int
)
attlen
,
attint
);
}
/*
#if defined (HAVE_NETCDF4)
else if ( xtypeIsInt64(atttype) )
{
long attlong[attlen];
int attint[attlen];
cdfGetAttLong(ncid, ncvarid, attname, (int)attlen, attlong);
int datatype = (atttype == NC_UINT64) ? CDI_DATATYPE_UINT32 : CDI_DATATYPE_INT32;
if ( datatype == CDI_DATATYPE_UINT32 )
{
size_t i;
for ( i = 0; i < attlen; ++i )
if ( attlong[i] < 0 || attlong[i] > INT_MAX ) break;
if ( i = attlen ) cdiDefAttInt(cdiID, varID, attname, datatype, (int)attlen, attint);
}
}
#endif
*/
else
if
(
xtypeIsFloat
(
atttype
)
)
{
double
attflt
[
attlen
];
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment