New in version 0.4.2:
Library Changes * BUG FIX: The default protection level of format file fragments is now properly set to "none". Reported by Brendan Crill. * BUG FIX: getdata() now reports the correct number of samples read for slim and ASCII encoded files. Reported by Adam Hincks. * BUG FIX: A segmentation fault only encountered when reading slim encoded data has been fixed in dirfile_flush(). Legacy API Changes * Several fixes have been made to better re-create the legacy API: - the return value of GetFormat is no longer marked const (although it should be considered so). - a symbolic link getdata_struct.h -> getdata.h is created when the headers are installed, but only if the legacy API is present in the library. - when included with a C++ compiler, the legacy function prototypes are wrapped in an extern "C" block. (The new API functions are not.) New in version 0.4.1: Library Changes * BUG FIX: Adding an ASCII encoded RAW field no longer creates an empty, unencoded binary file. * BUG FIX: A few minor memory leaks have been patched. Most of these were the result of insufficient clean up in dirfile_close(). * As an exception to the Standards, the full stop character '.' is once again permitted in field names. This is required by BLAST. Instead, field names are prohibited from ending with the known encoding extensions. The Standards still prohibit the full stop character in field names, and the GD_PEDANTIC flag will disable this exception. Furthermore, fields may not be added via GetData which contain a full stop character. * Some minor speed improvements have been made to the format file parser resulting in a ~30% decrease in parsing time. New in version 0.4.0: Dirfile Changes * GetData now supports Dirfile Standards Version 6. Standards Version 6 adds numerical (CONST) and string (STRING) scalar fields to the dirfile, as well as other features outlined below. * CONST names can now appear as parameters in field specifications in certain places in lieu of a literal number. * The tokeniser has been re-written. Any sequence of non-NUL bytes can now form a valid token. Field codes may not have ASCII control characters or the "reserved characters" &, /, ;, <, >, |, . but may contain any other characters (including whitespace). * Subordinate fields may now be attached to fields. These subfields are defined with the META directive, and referenced in most cases as "<parent-field>/<subfield>". * Binary files in dirfiles may now be "encoded". In addition to raw (unencoded) files, two encodings are currently supported: - ASCII encoding (a simple proof-of-functionality encoding), and - Slimlib encoding (a compression library used by ACT). Encoding schemes are fragment-local, although they are inherited from parent fragments. * Endianness is now also fragment-local, meaning different endiannesses can co-exist in the same dirfile (so long as the fields are defined in different format file fragments), and GetData will do the Right Thing. * "FILEFRAM" is no-longer supported as an alias for "INDEX". This affects GetData's implementation of all Standards Versions. Code that made use of FILEFRAM will have to be updated to use INDEX instead. * The reference field, previously the first RAW field in the format file, may now be specified using the REFERENCE directive. The reference field is the field that is looked at when get_nframes() is called. This is important to programs like kst which support streaming dirfiles. * Portions (or all) of a dirfile's data and metadata can be protected from change by specifying the PROTECT directive. This protection is "advisory", ie. while GetData will respect it in all cases, don't count on the PROTECT directive to ensure data integrity. Library Changes * INDEX is now a normal field. It appears in the count/list functions. Attempts to write to INDEX will fail. * The GD_E_EMPTY error code has been removed: it is no longer an error to query a dirfile containing no RAW fields. * The presence of two fields in the dirfile with the same name is now detected, and will cause a syntax error when parsing the format file. Previously, such things were allowed, but only one of the synonym fields could ever be queried. (Which field was returned was arbitrary.) * Field code look-ups for input fields are now cached, which should result in slightly better performance from the library. API Changes * Fields may now be added to dirfiles in a number of different ways: - by passing an gd_entry_t to dirfile_add() - by passing a field specification line to dirfile_add_spec() - by passing field parameters to one of the dirfile_add_<foo>() functions. * Whole other format file fragments may also be added to the dirfile by calling dirfile_include(). * A function is now present (dirfile_metaflush()) to flush metadata changes to disk (by re-writing format file fragments). dirfile_flush() and dirfile_close() will also flush metadata, if needed. * STRING and CONST values can be retrieved/set by calling (get,put)_string() and (get,put)_constant(). (get,put)data() are only for vector type fields. * META fields can be queried/set like normal fields using the get/put functions and their full (slashed) field code. * In addition to get_nfields() and get_field_list(), there are now corresponding functions that provide lists/counts of vectors (get_vector_list()/get_nvectors()), particular field types (get_field_list_by_type()/get_nfields_by_type()), as well as functions that provide lists of string values (get_string_values()) and constant values (get_const_values()). * Analogous functions for the add, list, and counting functions exist for META fields, as well. * Extra flags have been added to dirfile_open() to permit indicating the encoding type, if not specified in the dirfile itself. * DIRFILE struct members and gd_entry_t private members are now completely hidden from the public interface. Where previously callers could query dirfile->error to check for an error, they must now call get_error(dirfile). This change was made to reduce unintentional ABI breakage when modifying internal library properties. * GD_VERBOSE has been added to the list of available dirfile_open() flags. If this flag is specified, GetData will write errors to stderr as encountered. Legacy API Changes * Error codes which cannot be returned by the legacy API might not have a corresponding string in GD_ERROR_CODES[]. Instead, these entries will simply be the NULL pointer. * No facilities exist in the legacy API to set or query CONST or STRING fields. However, META fields of vector type can be queried/set using GetData() and PutData(), as in the new API. |==============================================================================| New in version 0.3.1: Legacy API Changes * BUG FIX: Dirfiles are now opened in read-only mode, unless instantiated via PutData(), allowing GetData() calls on read-only dirfiles. If PutData() is called on a dirfile previously opened read-only, it will be re-opened in read-write mode. Bindings * The C++ bindings, formerly called libdirfile, are now called libgetdata++ to be more explicit about what this library is. Miscellaneous * The package now includes pkg-config support for libgetdata. |==============================================================================| New in version 0.3.0: Dirfile Changes * GetData now supports Dirfile Standards Version 5 which includes support for signed 8-bit, and signed and unsigned 64-bit integer types. * As part of Standards Version 5, the restriction on field name length has been removed. (The filesystem will impose an effective limit on RAW fields of a few hundred characters, and format file lines are limited to several thousand, limiting derived field names.) * The library can now convert between big and little endiannesses. An optional directive, ENDIAN, added in Standards Version 5, is available to specify the byte-sex of a dirfile. API Changes * There is a new interface which fixes issues with thread safety and largefile support in the old interface. The old interface (referred to as the "legacy API") is still supported, but doesn't fully implement Dirfile Standards Version 5. See the README for full details. * putdata now respects FRAMEOFFSET. * putdata can now write to PHASE fields, and multi-bit BIT fields. * Some error codes have been renamed, and others removed or added, in order to regularise error codes between getdata and putdata in the sundry versions. Furthermore, the underlying values of some of these codes have changed (notably excluding GD_E_OK, which is guaranteed to be zero). Changes include: - GD_E_OPEN_FORMAT is now called GD_E_OPEN - GD_E_BAD_RETURN_TYPE is now called GD_E_BAD_TYPE - GD_E_NO_RAW_FIELDS is now called GD_E_EMPTY - PD_E_MULT_LINCOM is now called GD_E_BAD_PUT_FIELD - GD_E_OPEN_RAWFIELD and PD_E_OPEN RAWFIELD are now both represented by GD_E_RAW_IO - PD_E_BAD_CODE is now handled by GD_E_BAD_CODE - GD_E_FIELD, GD_E_SIZE_MISMATCH, ENDIAN_ERROR, CLOSE_ERROR are no longer applicable and have been removed - PD_E_CLOSE_RDONLY, PD_E_WRITE_LOCK, PD_E_FLOCK_ALLOC, which were were defined in the header but never used, have been removed - GD_E_TRUNC, GD_E_CREAT, GD_E_BAD_DIRFILE, GD_E_RANGE and GD_E_ACCMODE are new This affects the legacy API. Legacy API Changes * The legacy API has been marked deprecated. * Error codes have changed per the description above. * Only the public members of FormatType are now initialised by GetFormat. Bindings * Added bindings for C++ (libdirfile), Fortran 77 (libfgetdata), and Fortran 95 (libf95getdata) Miscellaneous * A rudimentary, but thorough, test-suite has been made. |