A C function which can retrieve GRIB or BUFR products from an unblocked binary Unix stream such as a file or pipe. The return value must be checked after calling the function.Products are delivered one per call to a user array.
The format and arguments for the function are:
long readnext( char * buffer, long * len, long (*read_func)(char *, long, void *), void * stream)
buffer | Buffer big enough to hold the product, or NULL. If this parameter is a NULL pointer, the function will pass back the length of the next product and position the file on the byte following the end of the product |
len | Size of the buffer on input; this changes to become the size in BYTES of the product read. If end-of-file is hit, this value is returned unchanged (ie when the function return code is -1) |
read_func | Function to read the input stream |
stream | Data for the read function, eg a C file pointer |
0 | A GRIB or BUFR product has been read successfully |
-1 | End-of-file was hit before a product was read. (Note that EOF does not cause a program fail. This value must be explicitly detected by the caller to avoid looping at EOF) |
-3 | The size of buffer is not sufficient for the product. In this case, the buffer is filled with bytes from the product and the file is positioned at the beginning of the following product, if any |
-4 | The user buffer is too small to allow any processing of the product at all (ie less than 8 bytes long) |
-5 | The GRIB or BUFR product did not have the 7777 terminator in its expected place. This means the product has been seriously corrupted. |