Skip to content
GitLab
Menu
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
46166de0
Commit
46166de0
authored
May 04, 2015
by
Florian Prill
Browse files
[cdi-tiles] some defensive code.
parent
a77b3f1b
Changes
4
Hide whitespace changes
Inline
Side-by-side
src/stream_gribapi.c
View file @
46166de0
...
...
@@ -2659,24 +2659,22 @@ size_t gribapiEncode(int varID, int levelID, int vlistID, int gridID, int zaxisI
if
(
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
data_type
==
t_double
)
{
my_grib_set_double
(
gh
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
keyword
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
dbl_val
);
if
(
ret
!=
0
)
{
fprintf
(
stderr
,
"key
\"
%s
\"
: value = %g
\n
"
,
if
(
CDI_Debug
)
Message
(
"key
\"
%s
\"
: double value = %g
\n
"
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
keyword
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
dbl_val
);
}
GRIB_CHECK
(
ret
,
0
);
my_grib_set_double
(
gh
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
keyword
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
dbl_val
);
GRIB_CHECK
(
ret
,
0
);
}
if
(
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
data_type
==
t_int
)
{
my_grib_set_long
(
gh
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
keyword
,
(
long
)
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
int_val
);
if
(
ret
!=
0
)
{
fprintf
(
stderr
,
"key
\"
%s
\"
: value = %g
\n
"
,
if
(
CDI_Debug
)
Message
(
"key
\"
%s
\"
: integer value = %d
\n
"
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
keyword
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
int_val
);
}
my_grib_set_long
(
gh
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
keyword
,
(
long
)
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
int_val
);
GRIB_CHECK
(
ret
,
0
);
}
}
...
...
src/varscan.c
View file @
46166de0
...
...
@@ -191,12 +191,14 @@ void varFree(void)
if
(
vartable
[
varID
].
ensdata
)
free
(
vartable
[
varID
].
ensdata
);
if
(
vartable
[
varID
].
tiles
)
subtypeDestroyPtr
(
vartable
[
varID
].
tiles
);
for
(
int
i
=
0
;
i
<
vartable
[
varID
].
opt_grib_nentries
;
i
++
)
{
if
(
vartable
[
varID
].
opt_grib_kvpair
[
i
].
keyword
)
free
(
vartable
[
varID
].
opt_grib_kvpair
[
i
].
keyword
);
}
if
(
vartable
[
varID
].
opt_grib_kvpair
)
free
(
vartable
[
varID
].
opt_grib_kvpair
);
if
(
vartable
[
varID
].
opt_grib_kvpair
)
{
for
(
int
i
=
0
;
i
<
vartable
[
varID
].
opt_grib_nentries
;
i
++
)
{
if
(
vartable
[
varID
].
opt_grib_kvpair
[
i
].
keyword
)
free
(
vartable
[
varID
].
opt_grib_kvpair
[
i
].
keyword
);
}
free
(
vartable
[
varID
].
opt_grib_kvpair
);
}
vartable
[
varID
].
opt_grib_nentries
=
0
;
vartable
[
varID
].
opt_grib_kvpair_size
=
0
;
vartable
[
varID
].
opt_grib_kvpair
=
NULL
;
...
...
@@ -1167,17 +1169,19 @@ void resize_vartable_opt_grib_entries(vartable_t *var, int nentries)
{
int
i
,
new_size
;
new_size
=
(
2
*
var
->
opt_grib_kvpair_size
)
>
nentries
?
(
2
*
var
->
opt_grib_kvpair_size
)
:
nentries
;
if
(
CDI_Debug
)
Message
(
"resize vartable opt_grib_entries array to size %d
\n
"
,
new_size
);
opt_key_val_pair_t
*
tmp
=
(
opt_key_val_pair_t
*
)
xmalloc
((
size_t
)
new_size
*
sizeof
(
opt_key_val_pair_t
));
for
(
i
=
0
;
i
<
var
->
opt_grib_kvpair_size
;
i
++
)
{
tmp
[
i
]
=
var
->
opt_grib_kvpair
[
i
];
}
var
->
opt_grib_kvpair_size
=
new_size
;
for
(
i
=
(
nentries
-
1
);
i
<
var
->
opt_grib_kvpair_size
;
i
++
)
{
for
(
i
=
var
->
opt_grib_kvpair_size
;
i
<
new_size
;
i
++
)
{
tmp
[
i
].
int_val
=
0
;
tmp
[
i
].
dbl_val
=
0
;
tmp
[
i
].
update
=
FALSE
;
tmp
[
i
].
keyword
=
NULL
;
}
// for
var
->
opt_grib_kvpair_size
=
new_size
;
free
(
var
->
opt_grib_kvpair
);
var
->
opt_grib_kvpair
=
tmp
;
}
...
...
src/vlist.c
View file @
46166de0
...
...
@@ -240,17 +240,17 @@ vlist_delete(vlist_t *vlistptr)
if
(
vars
[
varID
].
units
)
free
(
vars
[
varID
].
units
);
if
(
vars
[
varID
].
ensdata
)
free
(
vars
[
varID
].
ensdata
);
#if defined (HAVE_LIBGRIB_API)
for
(
int
i
=
0
;
i
<
vlistptr
->
vars
[
varID
].
opt_grib_nentries
;
i
++
)
{
if
(
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
keyword
)
free
(
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
keyword
);
}
if
(
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
)
free
(
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
);
{
for
(
int
i
=
0
;
i
<
vlistptr
->
vars
[
varID
].
opt_grib_nentries
;
i
++
)
{
if
(
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
keyword
)
free
(
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
i
].
keyword
);
}
free
(
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
);
}
vlistptr
->
vars
[
varID
].
opt_grib_nentries
=
0
;
vlistptr
->
vars
[
varID
].
opt_grib_kvpair_size
=
0
;
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
=
NULL
;
#endif
vlistDelAtts
(
vlistID
,
varID
);
}
...
...
@@ -1566,13 +1566,13 @@ void resize_opt_grib_entries(var_t *var, int nentries)
for
(
i
=
0
;
i
<
var
->
opt_grib_kvpair_size
;
i
++
)
{
tmp
[
i
]
=
var
->
opt_grib_kvpair
[
i
];
}
var
->
opt_grib_kvpair_size
=
new_size
;
for
(
i
=
(
nentries
-
1
);
i
<
var
->
opt_grib_kvpair_size
;
i
++
)
{
for
(
i
=
var
->
opt_grib_kvpair_size
;
i
<
new_size
;
i
++
)
{
tmp
[
i
].
int_val
=
0
;
tmp
[
i
].
dbl_val
=
0
;
tmp
[
i
].
update
=
FALSE
;
tmp
[
i
].
keyword
=
NULL
;
}
// for
var
->
opt_grib_kvpair_size
=
new_size
;
free
(
var
->
opt_grib_kvpair
);
var
->
opt_grib_kvpair
=
tmp
;
}
...
...
src/vlist_var.c
View file @
46166de0
...
...
@@ -66,6 +66,7 @@ void vlistvarInitEntry(int vlistID, int varID)
vlistptr
->
vars
[
varID
].
iorank
=
CDI_UNDEFID
;
vlistptr
->
vars
[
varID
].
opt_grib_kvpair_size
=
0
;
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
=
NULL
;
vlistptr
->
vars
[
varID
].
opt_grib_nentries
=
0
;
}
...
...
@@ -145,14 +146,11 @@ int vlistDefVarTiles(int vlistID, int gridID, int zaxisID, int tsteptype, int ti
int
varID
=
vlistvarNewEntry
(
vlistID
);
vlistptr
->
nvars
++
;
vlistptr
->
vars
[
varID
].
gridID
=
gridID
;
vlistptr
->
vars
[
varID
].
zaxisID
=
zaxisID
;
vlistptr
->
vars
[
varID
].
gridID
=
gridID
;
vlistptr
->
vars
[
varID
].
zaxisID
=
zaxisID
;
vlistptr
->
vars
[
varID
].
tsteptype
=
tsteptype
;
vlistptr
->
vars
[
varID
].
subtypeID
=
tilesetID
;
vlistptr
->
vars
[
varID
].
opt_grib_nentries
=
0
;
vlistptr
->
vars
[
varID
].
opt_grib_kvpair_size
=
0
;
if
(
tsteptype
<
0
)
{
Message
(
"Unexpected tstep type %d, set to TSTEP_INSTANT!"
,
tsteptype
);
...
...
@@ -1792,6 +1790,24 @@ void vlistDefVarIntKey(int vlistID, int varID, const char *name, int value)
Error
(
"Internal error, name undefined!"
);
}
if
(
CDI_Debug
)
{
Message
(
"define additional GRIB2 key
\"
%s
\"
(integer): %d"
,
name
,
value
);
Message
(
"total list of registered, additional GRIB2 keys (total: %d):"
,
vlistptr
->
vars
[
varID
].
opt_grib_nentries
);
for
(
idx
=
0
;
idx
<
vlistptr
->
vars
[
varID
].
opt_grib_nentries
;
idx
++
)
if
(
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
idx
].
data_type
==
t_int
)
Message
(
"%s -> integer %d"
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
idx
].
keyword
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
idx
].
int_val
);
else
if
(
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
idx
].
data_type
==
t_double
)
Message
(
"%s -> double %d"
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
idx
].
keyword
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
idx
].
dbl_val
);
else
Message
(
"%s -> unknown"
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
idx
].
keyword
);
}
reshSetStatus
(
vlistID
,
&
vlistOps
,
RESH_DESYNC_IN_USE
);
#else
(
void
)
vlistID
;
...
...
@@ -1836,6 +1852,24 @@ void vlistDefVarDblKey(int vlistID, int varID, const char *name, double value)
Error
(
"Internal error, name undefined!"
);
}
if
(
CDI_Debug
)
{
Message
(
"define additional GRIB2 key
\"
%s
\"
(double): %d"
,
name
,
value
);
Message
(
"total list of registered, additional GRIB2 keys (total: %d):"
,
vlistptr
->
vars
[
varID
].
opt_grib_nentries
);
for
(
idx
=
0
;
idx
<
vlistptr
->
vars
[
varID
].
opt_grib_nentries
;
idx
++
)
if
(
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
idx
].
data_type
==
t_int
)
Message
(
"%s -> integer %d"
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
idx
].
keyword
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
idx
].
int_val
);
else
if
(
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
idx
].
data_type
==
t_double
)
Message
(
"%s -> double %d"
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
idx
].
keyword
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
idx
].
dbl_val
);
else
Message
(
"%s -> unknown"
,
vlistptr
->
vars
[
varID
].
opt_grib_kvpair
[
idx
].
keyword
);
}
reshSetStatus
(
vlistID
,
&
vlistOps
,
RESH_DESYNC_IN_USE
);
#else
(
void
)
vlistID
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a 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