2020-11-30 21:08:16 +00:00
|
|
|
/*
|
|
|
|
* (C) Copyright 2005- ECMWF.
|
|
|
|
*
|
|
|
|
* This software is licensed under the terms of the Apache Licence Version 2.0
|
|
|
|
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
|
|
|
|
*
|
|
|
|
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
|
|
|
|
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "eccodes.h"
|
2022-08-01 11:00:29 +00:00
|
|
|
|
|
|
|
#undef NDEBUG
|
2020-11-30 21:08:16 +00:00
|
|
|
#include <assert.h>
|
2024-02-02 17:31:25 +00:00
|
|
|
#include <unistd.h>
|
2020-11-30 21:08:16 +00:00
|
|
|
|
|
|
|
int main(int argc, char* argv[])
|
|
|
|
{
|
2024-02-02 15:52:24 +00:00
|
|
|
char *filename = NULL;
|
2020-11-30 21:08:16 +00:00
|
|
|
int err = 0;
|
2024-02-03 19:02:57 +00:00
|
|
|
int num_messages = 0, i = 0, do_offsets = 0, do_sizes = 0, oc = 0;
|
|
|
|
off_t* offsets = NULL; // array of message offsets
|
|
|
|
size_t* sizes = NULL; // array of message sizes
|
2020-11-30 21:08:16 +00:00
|
|
|
codes_context* c = codes_context_get_default();
|
|
|
|
const int strict_mode = 1;
|
|
|
|
|
2024-02-02 17:31:25 +00:00
|
|
|
assert(argc == 3 || argc == 4);
|
2020-11-30 21:08:16 +00:00
|
|
|
|
2024-02-02 17:31:25 +00:00
|
|
|
while ((oc = getopt(argc, argv, "os")) != -1) {
|
|
|
|
switch (oc) {
|
|
|
|
case 'o':
|
|
|
|
do_offsets = 1;
|
|
|
|
break;
|
|
|
|
case 's':
|
|
|
|
do_sizes = 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2024-02-03 19:02:57 +00:00
|
|
|
filename = argv[optind];
|
2022-12-26 14:37:01 +00:00
|
|
|
|
2024-02-02 17:31:25 +00:00
|
|
|
if (do_offsets) {
|
2024-02-02 15:52:24 +00:00
|
|
|
err = codes_extract_offsets_malloc(c, filename, PRODUCT_ANY, &offsets, &num_messages, strict_mode);
|
|
|
|
if (err) return err;
|
|
|
|
|
|
|
|
for (i = 0; i < num_messages; ++i) {
|
|
|
|
printf("%lu\n", (unsigned long)offsets[i]);
|
|
|
|
}
|
2020-11-30 21:08:16 +00:00
|
|
|
}
|
2024-02-02 15:52:24 +00:00
|
|
|
|
2024-02-02 17:31:25 +00:00
|
|
|
if (do_sizes) {
|
2024-02-02 15:52:24 +00:00
|
|
|
// Version getting offsets as well as sizes of messages
|
|
|
|
err = codes_extract_offsets_sizes_malloc(c, filename, PRODUCT_ANY, &offsets, &sizes, &num_messages, strict_mode);
|
|
|
|
if (err) return err;
|
|
|
|
|
|
|
|
for (i = 0; i < num_messages; ++i) {
|
|
|
|
printf("%zu\n", sizes[i]);
|
|
|
|
}
|
|
|
|
free(sizes);
|
|
|
|
}
|
|
|
|
|
2024-02-03 19:02:57 +00:00
|
|
|
free(offsets);
|
2020-11-30 21:08:16 +00:00
|
|
|
return 0;
|
|
|
|
}
|