intadd_msg(G2C_FILE_INFO_T*file,intmsg_num,size_tbytes_to_msg,size_tbytes_in_msg,intread_file,G2C_MESSAGE_INFO_T**msg)
Add new message to linked list.
Parametersfile Pointer to the G2C_FILE_INFO_T for this file.
msg_num Number of the message in file (0-based).
bytes_to_msg Number of bytes to the start of the message in the file.
bytes_in_msg Length of message in bytes.
read_file Set to true to cause metadata to be read from a GRIB2 data file.
msg Pointer to a pointer that will get the location of the newly created G2C_MESSAGE_INFO_T object.
Ignored if NULL.
Returns
• G2C_NOERROR - No error.
Author
Ed Hartnett
Date
Sep 12, 2022
Definition at line 1017 of file g2cfile.c.
References g2c_message_info::bytes_in_msg, g2c_message_info::bytes_to_msg, g2c_message_info::file,
G2C_ENOMEM, G2C_NOERROR, LOG, g2c_file_info::msg, g2c_message_info::msg_num, g2c_message_info::next,
g2c_file_info::num_messages, and read_msg_metadata().
Referenced by g2c_open_index(), and read_metadata().
intadd_section(FILE*f,G2C_MESSAGE_INFO_T*msg,intsec_id,unsignedintsec_len,size_tbytes_to_sec,unsignedcharsec_num)
Add metadata about a new section 3, 4, 5, 6, or 7.
Parametersf FILE pointer to open GRIB2 file.
msg Pointer to the G2C_MESSAGE_INFO_T struct.
sec_id 0-based section ID.
sec_len Length of section.
bytes_to_sec Number of bytes from start of message to this section.
sec_num Section number.
Returns
• G2C_NOERROR - No error.
Author
Ed Hartnett
Date
Sep 12, 2022
Definition at line 794 of file g2cfile.c.
References g2c_section_info::bytes_to_sec, G2C_EBADSECTION, G2C_ENOMEM, G2C_FILE_READ, G2C_NOERROR,
g2c_rw_section3_metadata(), g2c_rw_section4_metadata(), g2c_rw_section5_metadata(),
g2c_rw_section6_metadata(), LOG, g2c_section_info::msg, g2c_section_info::next,
g2c_message_info::num_local, g2c_section_info::prev, g2c_message_info::sec, g2c_section_info::sec_id,
g2c_section_info::sec_len, and g2c_section_info::sec_num.
Referenced by g2c_open_index(), and read_msg_metadata().
staticintdetermine_dims(G2C_SECTION_INFO_T*sec)[static]
Determine the dimension information from the section 3 metadata. See (GRIB2 - SECTION 3 GRID DEFINITION
SECTION)[https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_sect3.shtml].
For a list of grid definitions see [GRIB2 - TABLE 3.1 Grid Definition Template
Number](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table3-1.shtml).
Parameterssec G2C_SECTION3_INFO_T struct.
Returns
• G2C_NOERROR No error.
• G2C_EINVAL Invalid input.
• G2C_ENOMEM Out of memory.
Author
Ed Hartnett
Date
Sep 15, 2022
Definition at line 415 of file g2cfile.c.
References g2c_section3_info::dim, G2C_ENOMEM, G2C_MAX_NAME, G2C_NOERROR, g2c_section3_info::grid_def,
LATITUDE, g2c_dim_info::len, LOG, LONGITUDE, g2c_dim_info::name, g2c_section_info::sec_info,
g2c_section_info::template, and g2c_dim_info::value.
Referenced by g2c_rw_section3_metadata().
staticintfind_available_g2cid(int*g2cid)[static]
Find a g2cid to use for a newly opened or created file.
Parametersg2cid Pointer that gets the next available g2cid.
Returns
• G2C_NOERROR - No error.
• G2C_EINVAL - Invalid input.
• G2C_ETOOMANYFILES - Trying to open too many files at the same time. '
Author
Ed Hartnett 8/18/22
Definition at line 363 of file g2cfile.c.
References G2C_EINVAL, G2C_ETOOMANYFILES, g2c_file, G2C_MAX_FILES, g2c_next_g2cid, and G2C_NOERROR.
Referenced by g2c_add_file().
staticintfree_metadata(intg2cid)[static]
Free resources holding the file metadata.
Parametersg2cid Indentifier for the file.
Returns
• G2C_NOERROR - No error.
• G2C_EBADID - Bad file ID.
Author
Ed Hartnett
Date
Aug 16, 2022
Definition at line 1304 of file g2cfile.c.
References G2C_EBADID, g2c_file, G2C_MAX_FILES, G2C_NOERROR, LOG, g2c_file_info::msg,
g2c_message_info::next, g2c_section_info::next, g2c_message_info::sec, g2c_section_info::sec_info,
g2c_section_info::sec_num, and g2c_section_info::template.
Referenced by g2c_close().
intg2c_add_file(constchar*path,intmode,int*g2cid)
Open a GRIB2 file and add it to the list of open files.
Parameterspath Path of the file.
mode Open mode flags.
g2cid Pointer that gets an indentifier for the file.
Returns
• G2C_NOERROR - No error.
• G2C_EINVAL - Invalid input.
• G2C_ETOOMANYFILES - Trying to open too many files at the same time.
Author
Ed Hartnett
Date
Aug 16, 2022
Definition at line 1143 of file g2cfile.c.
References find_available_g2cid(), G2C_EFILE, G2C_EINVAL, G2C_ENAMETOOLONG, g2c_file, G2C_MAX_NAME,
G2C_NOERROR, G2C_WRITE, g2c_file_info::g2cid, LOG, g2c_file_info::msg, and g2c_file_info::num_messages.
Referenced by g2c_open(), and g2c_open_index().
intg2c_close(intg2cid)
Close a GRIB2 file, freeing resources.
Parametersg2cid Indentifier for the file.
Returns
• G2C_NOERROR - No error.
• G2C_EBADID - Bad file ID.
Author
Ed Hartnett
Date
Aug 16, 2022
Definition at line 1367 of file g2cfile.c.
References g2c_file_info::f, free_metadata(), G2C_EBADID, G2C_EFILE, g2c_file, G2C_MAX_FILES,
G2C_NOERROR, g2c_file_info::g2cid, LOG, MUTEX_LOCK, MUTEX_UNLOCK, g2c_file_info::num_messages, and
g2c_file_info::path.
Referenced by main().
intg2c_find_msg2(intg2cid,size_tskip_bytes,size_tmax_bytes,size_t*bytes_to_msg,size_t*bytes_in_msg)
Search a file for the next GRIB1 or GRIB2 message. A grib message is identified by its indicator section,
i.e. an 8-byte sequence with 'GRIB' in bytes 1-4 and a '1' or '2' in byte 8. If found, the length of the
message is decoded from bytes 5-7. The search is done over a given section of the file. The search is
terminated if an eof or i/o error is encountered.
Parametersg2cid ID of the opened grib file, returned by g2c_open().
skip_bytes Number of bytes to skip before search.
max_bytes Maximum number of bytes to search.
bytes_to_msg Pointer that gets the number of bytes to skip before message.
bytes_in_msg Pointer that gets the number of bytes in message (or 0 if no message found)
Returns
• G2C_NOERROR No error.
• G2C_EBADID g2cid not found.
• G2C_EFILE File error.
• G2C_EINVAL Invalid input.
Author
Ed Hartnett
Date
2022-08-19
Definition at line 164 of file g2cfile.c.
References G2C_EBADID, G2C_EFILE, G2C_EINVAL, G2C_EMSG, G2C_ENOMEM, G2C_ERROR, g2c_file,
G2C_MAGIC_HEADER_LEN, G2C_NOERROR, LOG, MIN, and READ_BUF_SIZE.
intg2c_get_msg(intg2cid,size_tskip_bytes,size_tmax_bytes,size_t*bytes_to_msg,size_t*bytes_in_msg,unsignedchar**cbuf)
Search a file for the next GRIB1 or GRIB2 message, and read it, allocating space in memory to hold the
message. A grib message is identified by its indicator section, i.e. an 8-byte sequence with 'GRIB' in
bytes 1-4 and a '1' or '2' in byte 8. If found, the length of the message is decoded from bytes 5-7. The
search is done over a given section of the file. The search is terminated if an EOF or I/O error is
encountered.
Parametersg2cid ID of the opened grib file, returned by g2c_open().
skip_bytes The number of bytes to skip before search.
max_bytes The maximum number of bytes to search. Must be at least 16.
bytes_to_msg A pointer that gets the number of bytes to skip before message.
bytes_in_msg A pointer that gets the number of bytes in message (or 0 if no message found)
cbuf A pointer that gets allocation of memory, into which the message is copied. This memory must be
freed by the caller.
Returns
• G2C_NOERROR No error.
• G2C_EBADID g2cid not found.
• G2C_EFILE File error.
• G2C_EINVAL Invalid input.
• G2C_ENOMEM Out of memory.
• G2C_ENOMSG No GRIB message found.
Author
Ed Hartnett
Date
2022-08-20
Definition at line 291 of file g2cfile.c.
References G2C_EBADID, G2C_EFILE, G2C_EINVAL, G2C_ENOMEM, G2C_ENOMSG, G2C_ERROR, g2c_file,
G2C_MIN_MAX_BYTES, G2C_NOERROR, LOG, and seekgb().
intg2c_open(constchar*path,intmode,int*g2cid)
Open an existing GRIB2 file. This function opens the GRIB2 file and reads its metadata.
GRIB2 messages in the file are assigned a message ID, starting with 0 for the first message in the file.
Each product within a message is assigned a product ID, starting with 0 for the first product in the
message.
Files opened with this function should be closed with a call g2c_close() to release resources.
Parameterspath Path of the file.
mode Open mode flags.
g2cid Pointer that gets an indentifier for the file.
Returns
• G2C_NOERROR - No error.
• G2C_EINVAL - Invalid input.
• G2C_ETOOMANYFILES - Trying to open too many files at the same time.
Author
Ed Hartnett
Date
Aug 16, 2022
Definition at line 1201 of file g2cfile.c.
References g2c_add_file(), LOG, MUTEX_LOCK, MUTEX_UNLOCK, and read_metadata().
Referenced by main().
intg2c_rw_section1_metadata(FILE*f,intrw_flag,G2C_MESSAGE_INFO_T*msg)
Read Section 1.
Parametersf Pointer to open file.
rw_flagG2C_FILE_WRITE if function should write, G2C_FILE_READ if it should read.
msg Pointer to G2C_MESSAGE_INFO_T which will be populated with the values of section 0.
Returns
-G2C_NOERROR No error.
Author
Ed Hartnett
Date
10/16/22
Definition at line 874 of file g2cfile.c.
References g2c_message_info::center, g2c_message_info::day, G2C_ENOSECTION, g2c_file_io_short(),
g2c_file_io_ubyte(), g2c_file_io_uint(), G2C_NOERROR, G2C_SECTION1_BYTES, g2c_message_info::hour,
g2c_message_info::local_version, LOG, g2c_message_info::master_version, g2c_message_info::minute,
g2c_message_info::month, g2c_message_info::sec1_len, g2c_message_info::second,
g2c_message_info::sig_ref_time, g2c_message_info::status, g2c_message_info::subcenter,
g2c_message_info::type, and g2c_message_info::year.
Referenced by g2c_open_index(), g2c_write_index(), and read_msg_metadata().
intg2c_rw_section3_metadata(FILE*f,intrw_flag,G2C_SECTION_INFO_T*sec)
Read the metadata from section 3 (Grid Definition Section) of a GRIB2 message. When this function is
called, the file cursor is positioned just after the section number field in the section. The size of the
section, and the section number, have already been read when this function is called.
Parametersf FILE pointer to open GRIB2 file.
rw_flagG2C_FILE_WRITE if function should write, G2C_FILE_READ (0) if it should read.
sec Pointer to the G2C_SECTION_INFO_T struct.
Returns
• G2C_NOERROR No error.
• G2C_EINVAL Invalid input.
• G2C_ENOMEM Out of memory.
• G2C_ENOTEMPLATE Can't find template.
Author
Ed Hartnett
Date
Sep 15, 2022
Definition at line 478 of file g2cfile.c.
References determine_dims(), G2C_EINVAL, G2C_ENOMEM, g2c_file_io_template(), g2c_file_io_ubyte(),
g2c_file_io_uint(), g2c_file_io_ushort(), g2c_get_grid_template(), G2C_MAX_GDS_TEMPLATE_MAPLEN,
G2C_NOERROR, g2c_section3_info::grid_def, g2c_section3_info::interp_list, LOG,
g2c_section3_info::num_data_points, g2c_section3_info::num_opt, g2c_section_info::sec_info,
g2c_section_info::sec_num, g2c_section3_info::source_grid_def, g2c_section_info::template, and
g2c_section_info::template_len.
Referenced by add_section(), and g2c_write_index().
intg2c_rw_section4_metadata(FILE*f,intrw_flag,G2C_SECTION_INFO_T*sec)
Read or write the metadata from section 4 (Product Definition Section) of a GRIB2 message. When this
function is called, the file cursor is positioned just after the section number field in the section. The
size of the section, and the section number, have already been read/written when this function is called.
Parametersf FILE pointer to open GRIB2 file.
rw_flagG2C_FILE_WRITE if function should write, G2C_FILE_READ if it should read.
sec Pointer to the G2C_SECTION_INFO_T struct.
Returns
• G2C_NOERROR No error.
• G2C_EINVAL Invalid input.
• G2C_ENOMEM Out of memory.
• G2C_ENOTEMPLATE Can't find template.
Author
Ed Hartnett
Date
Sep 16, 2022
Definition at line 574 of file g2cfile.c.
References G2C_EINVAL, G2C_ENOMEM, g2c_file_io_template(), g2c_file_io_ushort(), g2c_get_pds_template(),
G2C_MAX_PDS_TEMPLATE_MAPLEN, G2C_NOERROR, LOG, g2c_section_info::msg, g2c_section4_info::num_coord,
g2c_message_info::num_fields, g2c_section4_info::prod_def, g2c_section_info::sec_info,
g2c_section_info::sec_num, g2c_section_info::template, and g2c_section_info::template_len.
Referenced by add_section(), and g2c_write_index().
intg2c_rw_section5_metadata(FILE*f,intrw_flag,G2C_SECTION_INFO_T*sec)
Read or write the metadata from section 5 (Data Representation Section) of a GRIB2 message. When this
function is called, the file cursor is positioned just after the section number field in the section. The
size of the section, and the section number, have already been read when this function is called.
Parametersf FILE pointer to open GRIB2 file.
rw_flagG2C_FILE_WRITE if function should write, G2C_FILE_READ if it should read.
sec Pointer to the G2C_SECTION_INFO_T struct.
Returns
• G2C_NOERROR No error.
• G2C_EINVAL Invalid input.
• G2C_ENOMEM Out of memory.
• G2C_ENOTEMPLATE Can't find template.
Author
Ed Hartnett
Date
Sep 16, 2022
Definition at line 663 of file g2cfile.c.
References g2c_section5_info::data_def, G2C_EINVAL, G2C_ENOMEM, g2c_file_io_template(),
g2c_file_io_uint(), g2c_file_io_ushort(), g2c_get_drs_template(), G2C_MAX_PDS_TEMPLATE_MAPLEN,
G2C_NOERROR, LOG, g2c_section5_info::num_data_points, g2c_section_info::sec_info,
g2c_section_info::template, and g2c_section_info::template_len.
Referenced by add_section(), and g2c_write_index().
intg2c_rw_section6_metadata(FILE*f,intrw_flag,G2C_SECTION_INFO_T*sec)
Read or write the metadata from section 6 (Data Representation Section) of a GRIB2 message. When this
function is called, the file cursor is positioned just after the section number field in the section. The
size of the section, and the section number, have already been read when this function is called.
Parametersf FILE pointer to open GRIB2 file.
rw_flagG2C_FILE_WRITE if function should write, G2C_FILE_READ if it should read.
sec Pointer to the G2C_SECTION_INFO_T struct.
Returns
• G2C_NOERROR No error.
• G2C_EINVAL Invalid input.
• G2C_ENOMEM Out of memory.
• G2C_ENOTEMPLATE Can't find template.
Author
Ed Hartnett
Date
Sep 16, 2022
Definition at line 745 of file g2cfile.c.
References G2C_EINVAL, G2C_ENOMEM, g2c_file_io_ubyte(), G2C_NOERROR, g2c_section6_info::indicator, LOG,
and g2c_section_info::sec_info.
Referenced by add_section().
intg2c_seekmsg(intg2cid,size_tskip,size_t*offset,size_t*msglen)
Search a file for the next GRIB2 Message. The search is terminated when a GRIB2 message is found, or the
end of the file is reached.
Parametersg2cid ID of an open GRIB2 file, returned from g2c_open()/g2c_create().
skip The number of bytes in the file to skip before starting the search.
offset Pointer that gets the number of bytes to skip from the beggining of the file to where the GRIB
message starts. Ignored if NULL.
msglen Pointer that gets the number of bytes in message (set to 0, if no message found). Ignored if
NULL.
Returns
• G2C_NOERROR No error.
• G2C_EBADID Bad g2cid.
• G2C_ENOMEM Out of memory.
Author
Ed Hartnett
Date
2022-09-11
Definition at line 56 of file g2cfile.c.
References G2C_EBADID, G2C_EFILE, G2C_ENOMEM, g2c_file, G2C_MAGIC_HEADER, G2C_NOERROR,
G2C_SEEKMSG_BUFSIZE, hton64, and LOG.
Referenced by read_metadata().
MUTEX(m)
Define mutex for thread-safety.
staticintread_metadata(intg2cid)[static]
Read metadata from a GRIB2 file being opened with g2c_open().
Parametersg2cid The indentifier for the file.
Returns
• G2C_NOERROR - No error.
• G2C_EBADID g2cid not found.
• G2C_EFILE File error.
• G2C_EINVAL Invalid input.
• G2C_ENOMEM Out of memory.
• G2C_ENOMSG No GRIB message found.
Author
Ed Hartnett
Date
Aug 22, 2022
Definition at line 1079 of file g2cfile.c.
References add_msg(), G2C_EBADID, G2C_ENOMSG, g2c_file, g2c_log_file(), G2C_NOERROR, g2c_seekmsg(), and
LOG.
Referenced by g2c_open().
staticintread_msg_metadata(G2C_MESSAGE_INFO_T*msg)[static]
Read the file to get metadata about a message.
Parametersmsg Pointer to the G2C_MESSAGE_INFO_T struct for this message.
Returns
• G2C_NOERROR - No error.
Author
Ed Hartnett
Date
Sep 12, 2022
Definition at line 937 of file g2cfile.c.
References add_section(), BYTES_TO_DISCIPLINE, g2c_message_info::bytes_to_msg,
g2c_message_info::discipline, g2c_file_info::f, g2c_message_info::file, FOUR_BYTES, G2C_EBADSECTION,
G2C_EFILE, g2c_file_io_ubyte(), g2c_file_io_uint(), G2C_FILE_READ, G2C_NOERROR,
g2c_rw_section1_metadata(), G2C_SECTION0_BYTES, LOG, ONE_BYTE, and g2c_message_info::sec1_len.
Referenced by add_msg().