Releases: EarthScope/libmseed
v3.1.3
v3.1.2
- When writing v2 derive the quality code from the publication version when the extra-header "/FDSN/DataQuality" is not present. Use quality indicator 'D' when the publication version cannot be mapped, e.g. > 4.
- Add tests for msr3 utility functions.
- Add
msr3_nsperiod()
to calculate the sample period in nanoseconds. - Add CRC values to diagnostic message when header values does not match calculated.
- Replace ms_dabs() with macro to use system fabs(), document as deprecated.
- Simplify mstl3_addmsr_recordptr() a bit.
- Update yyjson to v0.9.0.
v3.1.1
- Change library compatibility version in Makefile to MAJOR.1.0, as this is now incompatible with the x.0.0 releases.
v3.1.0
Warning
Breaking data structure and API changes relative to the v3.0.x releases.
The following data structure and API changes are included in this release:
MS3Record.encoding
nowint16_t
instead ofint8_t
.MS3Record.datalength
nowuint32_t
instead ofuint16_t
(change in 3.0.18).MS3Record.datasize
andMS3TraceSeg.datasize
nowuint64_t
instead ofsize_t
.ms3_detect()
now returnsint64_t
instead ofint
.mstl3_unpack_recordlist()
'soutputsize
argument is nowuint64_t
instead ofsize_t
.mseh_get_ptr_r()
'smaxlength
is nowuint32_t
instead ofsize_t
.
The decision to change the API (and not move to a new major version) was not easy. The precipitating change
was that the MS3Record.datalength
value was too small to accommodate the value in the format specification.
This means the library would not be future proof to properly detect all records of the format, and, while it could
read and write the commonly-used, small records, it would eventually fail in a bad way. With this unfortunate
breakage the opportunity was taken to apply a few more breaking changes, in particular the encoding value
can now represent the entire range allowed in the format.
The v3.1.0 release API is now stable and semantic versioning can be expected.
The fixes in this release include:
- Fix to handle full range of allowed encoding values from 0-255.
- Fix to handle detection of huge record lengths beyond MAXRECLEN gracefully.
- Add more checks to avoid writing impossible values to miniSEED v2 blockette fields.
- Fix all compiler warnings at level -Wextra for clang, gcc, and \W3 for MSVC.
- Fix build of DLL target on Windows by defining exports in libmseed.def.
- Improve formatting of gap list produced by mstl3_printgaplist().
v3.0.18
- Increase
MAXRECLEN
from 131,172 to 10,485,760 (10 MiB) for v3 records. - Define
MAXRECLENv2
as 131,172 (131+ KiB) to limit miniSEED v2 records and add test for sample counts beyond the 16-bit field limit in v2 records when packing. - Add
LMIO_FD
type of reading IO via arbitrary file descriptor and hooks for setting. - Add
mseh_replace()
to replace extra headers. - Consistently initialize header values to 0, fixing edge cases like header-only records.
- Update link in documentation of
ms_readleapsecondfile()
for sources of leap-seconds.list. ms_nslc2sid()
requires all codes except location to be set to reduce misuse.- Fix raw, diagnostic generation of SIDs from miniSEED v2 when full codes are used.
- Fix handling of data length field in miniSEED v3 as 32-bits instead of 16-bits.
- Update yyjson to release 0.8.0.
v3.0.17
- Add tests for default record length and encoding.
- Document versioning schema as semantic versioning.
- Add const qualifiers to packing routines that do not modify the passed MS3Record structure.
v3.0.16, major new version release
This is the initial stable release of major version 3 of library.
This release supports reading and writing of both miniSEED 3 and miniSEED 2 (defined as a subset of SEED 2.4). When reading data the format version is auto-detected so programs using the library can be agnostic to the format version.
Documentation can be found here:
https://earthscope.github.io/libmseed
A guide for porting from previous major version releases is here:
https://earthscope.github.io/libmseed/porting-guide.html
Changes since the previous (pre-release) of this major version:
- Optimize Steim 1 & 2 decoders
- Fix logic in
msr3_duplicate()
for certain cases - Add many
const
qualifiers to pointer values where the library interface does not modify the data. Thanks @damb! - Incorporate ms_gswapX() functions into libmseed.h to promote inlining
- Change test for environment variable DECODE_DEBUG to compile-time define
- Change test for environment variable ENCODE_DEBUG to compile-time define
v3.0.15
- Print sample rate in Hz consistently in msr3_print()
- Fix writing of SNR values field 9 of Blockette 201 (v2)
- Read and write microsecond offsets to/from Blockette 500 (v2)
- Fix addition of Clock Model field 9 of Blockette 500 (v2)
v3.0.14
WARNING: BREAKING API CHANGES - API is now frozen for the pre-releases
This is an extra large release in expectation of becoming the initial stable release of the major version 3 library.
This release contains the following API changes:
-
The
fpos
andlast
arguments ofms3_readmsr()
,ms3_readmsr_r()
, andms3_readmsr_selection()
have been removed. The same capabilities are available and details are included in the porting guide. -
The
MS3TraceList.numtraces
member was renamedMS3TraceList.numtraceids
to clarify. -
The
ptr
argument, previously namedpath
, to mseh_get and mseh_set routines is now in JSON Pointer (RFC 6901) format. This is a more appropriate, and standardized, format than the pseudo-JSON Path, dotted string style previously used. It also allows more flexibility such as specification of an array element. -
The
mseh_get_path_r()
andmseh_set_path_r()
were previously named without the_r
suffix, now take a additionalparsestate
argument. This functionality allows the parsed extra headers to be retained between calls to avoid re-parsing. For advanced usage, this allows more efficient getting or setting of multiple extraheader values. If used, this state information must be free'd withmseh_free_parsestate()
. If used withmseh_set_path_r()
the headers must also be serialized withmseh_serialize()
. -
mstl3_printtracelist() now takes an additional
versions
argument. When non-zero the routine will decorate SIDs with publication versions. -
The
MS3TraceID
structure is no longer a simple linked list. Instead, it is a skip list, slightly changing the syntax for traversing the list as illustrated in the examples.
Furthermore, this release contains the following changes:
- Add JSON Merge Patch capability to
mseh_set_ptr_r()
using the value typeM
. This allows flexible modification, including deletes, of extra header values. - New test suite based on Tau (https://github.com/jasmcaus/tau). Many tests were added and the suite now works on MS-Windows.
- Replace JSON library with yyjson (https://github.com/ibireme/yyjson). Benefits include performance, shortest accurate real number representation, JSON Pointer support, and UTF-8 support.
- Significant optimization for the case of constructing trace lists with large numbers of different source IDs, by using a skip list. Implementation inspired by: https://github.com/tdeck/c-skiplist, thanks @tdeck!
- Add new
mstl3_findID()
function for searching a trace list for specific SourceID and, optionally, publication version. - Optimize trace construction in
mstl3_addmsr_recordptr()
for the case of duplicate records. - Add cURL detection and full build support to example/Makefile.
- Add 'const' declarations to
ms_sid2nslc()
andms_nslc2sid()
to guarantee input will not be modified. - Update example/lm_pack.c to a) use improved test data (a sinusoid) that contains all differences for Steim1 and Steim2 encoding, and b) add an
-F
option to set the format version to create. mseh_get_path_r()
andmseh_set_path_r()
now accept a value type ofi
that is used with int64_t values.- Add
nstime_t
special value ofNSTUNSET
for use as "unset" meaning. - Fix logic test for
LIBMSEED_NO_THREADING
declaration. - Fix zero-padding of empty bytes following data in miniSEED v2 creation.
- Rename
DE_ASCII
toDE_TEXT
to generalize to UTF-8, legacy mapping provided. - Change sample type for text encoding to 't', value 'a' still supported as an alternative.
- Add
MS3Tolerance_INITIALIZER
forMS3Tolerance
values. - Handle special case of year 0 when parsing version 2 blockettes. These are now treated as "unset" and not included in the extra headers.
- Added FAQ to documentation and update example code to match API changes.
v3.0.13
- Embed current leap second list, used by default and replaced by
ms_readleapsecondfile()
. - Add
ISOMONTHDAY_DOY
time string variant, with day-of-year added in parenthesis. - Add '_Z' variants of multiple time string formats that add a trailing Z versions.
- Print record timestamp in new
ISOMONTHDAY_DOY_Z
format. - Deprecate the
ms_nstime2timestrz()
function and reformulate to use the '_Z' format definitions. - Re-brand to EarthScope.