Skip to content

Commit d8141db

Browse files
committed
ECC-2002: Fix the case when datasetForLocal is not yet defined
1 parent 8308111 commit d8141db

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

src/accessor/grib_accessor_class_g2_concept_dir.cc

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,18 @@ int grib_accessor_g2_concept_dir_t::unpack_string(char* v, size_t* len)
5555
if (err) return err;
5656

5757
size = sizeof(datasetForLocal);
58+
bool datasetForLocalExists = true;
5859
err = grib_get_string(h, datasetForLocal_, datasetForLocal, &size);
59-
if (err) return err;
60+
if (err) {
61+
if (err == GRIB_NOT_FOUND) {
62+
// This can happen if accessor is called before section 4
63+
datasetForLocalExists = false;
64+
err = 0;
65+
}
66+
else {
67+
return err;
68+
}
69+
}
6070

6171
const size_t dsize = string_length() - 1; // size for destination string "v"
6272
if (preferLocal) {
@@ -74,26 +84,15 @@ int grib_accessor_g2_concept_dir_t::unpack_string(char* v, size_t* len)
7484
}
7585
}
7686

77-
// Override if datasetForLocal is not unknown
78-
if (!STR_EQUAL(datasetForLocal, "unknown")) {
87+
// Override if datasetForLocal exists and is not unknown
88+
if (datasetForLocalExists && !STR_EQUAL(datasetForLocal, "unknown")) {
7989
if (mode_ == 1) {
8090
snprintf(v, dsize, "%s", masterDir); // conceptsDir1
8191
} else {
8292
snprintf(v, dsize, "grib2/localConcepts/%s", datasetForLocal); // conceptsDir2
8393
}
8494
}
8595

86-
// if (mode_ == 1) {
87-
// if (STR_EQUAL(datasetForLocal, "unknown")) {
88-
// char centre[64] = {0,};
89-
// size = sizeof(centre) / sizeof(*centre);
90-
// grib_get_string(h, "centre", centre, &size);
91-
// snprintf(v, 256, "grib2/localConcepts/%s", centre);
92-
// } else {
93-
// snprintf(v, 64, "grib2");
94-
// }
95-
// }
96-
9796
size = strlen(v);
9897
ECCODES_ASSERT(size > 0);
9998
*len = size + 1;

0 commit comments

Comments
 (0)