mirror of https://github.com/ecmwf/eccodes.git
ECC-1704: GRIB: Implement unpack_string for validityTime
This commit is contained in:
parent
fa9f8ea763
commit
db19ba9405
|
@ -17,6 +17,7 @@
|
||||||
CLASS = accessor
|
CLASS = accessor
|
||||||
SUPER = grib_accessor_class_long
|
SUPER = grib_accessor_class_long
|
||||||
IMPLEMENTS = unpack_long
|
IMPLEMENTS = unpack_long
|
||||||
|
IMPLEMENTS = unpack_string
|
||||||
IMPLEMENTS = init;dump
|
IMPLEMENTS = init;dump
|
||||||
MEMBERS=const char* date
|
MEMBERS=const char* date
|
||||||
MEMBERS=const char* time
|
MEMBERS=const char* time
|
||||||
|
@ -39,6 +40,7 @@ or edit "accessor.class" and rerun ./make_class.pl
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int unpack_long(grib_accessor*, long* val, size_t* len);
|
static int unpack_long(grib_accessor*, long* val, size_t* len);
|
||||||
|
static int unpack_string(grib_accessor*, char*, size_t* len);
|
||||||
static void dump(grib_accessor*, grib_dumper*);
|
static void dump(grib_accessor*, grib_dumper*);
|
||||||
static void init(grib_accessor*, const long, grib_arguments*);
|
static void init(grib_accessor*, const long, grib_arguments*);
|
||||||
|
|
||||||
|
@ -84,7 +86,7 @@ static grib_accessor_class _grib_accessor_class_validity_time = {
|
||||||
0, /* unpack_double */
|
0, /* unpack_double */
|
||||||
0, /* unpack_float */
|
0, /* unpack_float */
|
||||||
0, /* pack_string */
|
0, /* pack_string */
|
||||||
0, /* unpack_string */
|
&unpack_string, /* unpack_string */
|
||||||
0, /* pack_string_array */
|
0, /* pack_string_array */
|
||||||
0, /* unpack_string_array */
|
0, /* unpack_string_array */
|
||||||
0, /* pack_bytes */
|
0, /* pack_bytes */
|
||||||
|
@ -227,3 +229,24 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len)
|
||||||
|
|
||||||
return GRIB_SUCCESS;
|
return GRIB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int unpack_string(grib_accessor* a, char* val, size_t* len)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
long v = 0;
|
||||||
|
size_t lsize = 1;
|
||||||
|
|
||||||
|
err = unpack_long(a, &v, &lsize);
|
||||||
|
if (err) return err;
|
||||||
|
|
||||||
|
if (*len < 5) {
|
||||||
|
grib_context_log(a->context, GRIB_LOG_ERROR, "Key %s (unpack_string): Buffer too small", a->name);
|
||||||
|
*len = 5;
|
||||||
|
return GRIB_BUFFER_TOO_SMALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(val, 64, "%04ld", v);
|
||||||
|
|
||||||
|
len[0] = 5;
|
||||||
|
return GRIB_SUCCESS;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue