@@ -55,8 +55,18 @@ int grib_accessor_g2_concept_dir_t::unpack_string(char* v, size_t* len)
55
55
if (err) return err;
56
56
57
57
size = sizeof (datasetForLocal);
58
+ bool datasetForLocalExists = true ;
58
59
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
+ }
60
70
61
71
const size_t dsize = string_length () - 1 ; // size for destination string "v"
62
72
if (preferLocal) {
@@ -74,26 +84,15 @@ int grib_accessor_g2_concept_dir_t::unpack_string(char* v, size_t* len)
74
84
}
75
85
}
76
86
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" )) {
79
89
if (mode_ == 1 ) {
80
90
snprintf (v, dsize, " %s" , masterDir); // conceptsDir1
81
91
} else {
82
92
snprintf (v, dsize, " grib2/localConcepts/%s" , datasetForLocal); // conceptsDir2
83
93
}
84
94
}
85
95
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
-
97
96
size = strlen (v);
98
97
ECCODES_ASSERT (size > 0 );
99
98
*len = size + 1 ;
0 commit comments