Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libmseed for openSUSE:Factory checked in at 2026-01-03 17:26:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libmseed (Old) and /work/SRC/openSUSE:Factory/.libmseed.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libmseed" Sat Jan 3 17:26:35 2026 rev:11 rq:1325096 version:3.2.3 Changes: -------- --- /work/SRC/openSUSE:Factory/libmseed/libmseed.changes 2025-12-27 13:22:21.835716450 +0100 +++ /work/SRC/openSUSE:Factory/.libmseed.new.1928/libmseed.changes 2026-01-03 17:27:02.430806967 +0100 @@ -1,0 +2,8 @@ +Fri Jan 2 10:38:34 UTC 2026 - Andreas Stieger <[email protected]> + +- update to 3.2.3: + * Add mseh_get_ptr_type() to determine type of an extra header + * Add unsigned integer (uint64_t) support to mseh_set_ptr_r() and + mseh_get_ptr_r() + +------------------------------------------------------------------- Old: ---- libmseed-3.2.2.tar.gz New: ---- libmseed-3.2.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libmseed.spec ++++++ --- /var/tmp/diff_new_pack.PW7Q7G/_old 2026-01-03 17:27:03.254840757 +0100 +++ /var/tmp/diff_new_pack.PW7Q7G/_new 2026-01-03 17:27:03.258840921 +0100 @@ -1,7 +1,7 @@ # # spec file for package libmseed # -# Copyright (c) 2025 Andreas Stieger <[email protected]> +# Copyright (c) 2026 Andreas Stieger <[email protected]> # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %define sover 3 Name: libmseed -Version: 3.2.2 +Version: 3.2.3 Release: 0 Summary: MiniSEED data format library License: Apache-2.0 ++++++ libmseed-3.2.2.tar.gz -> libmseed-3.2.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmseed-3.2.2/ChangeLog new/libmseed-3.2.3/ChangeLog --- old/libmseed-3.2.2/ChangeLog 2025-12-26 20:21:02.000000000 +0100 +++ new/libmseed-3.2.3/ChangeLog 2026-01-01 23:33:34.000000000 +0100 @@ -1,3 +1,7 @@ +2026.001: v3.2.3 + - Add mseh_get_ptr_type() to determine type of an extra header. + - Add unsigned integer (uint64_t) support to `mseh_set_ptr_r()` and `mseh_get_ptr_r()`. + 2025.369: v3.2.2 - Allow mseh_set_ptr_r() to create extra headers when none exist for a merge patch using the root pointer (""). Pointers to non-root locations still must exist. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmseed-3.2.2/extraheaders.c new/libmseed-3.2.3/extraheaders.c --- old/libmseed-3.2.2/extraheaders.c 2025-12-26 20:21:02.000000000 +0100 +++ new/libmseed-3.2.3/extraheaders.c 2026-01-01 23:33:34.000000000 +0100 @@ -112,18 +112,11 @@ } /** ************************************************************************ - * @brief Search for and return an extra header value. + * @brief Search for and return the type of an extra header value. * * The extra header value is specified as a JSON Pointer (RFC 6901), e.g. * \c '/objectA/objectB/header'. * - * This routine can get used to test for the existence of a value - * without returning the value by setting @p value to NULL. - * - * If the target item is found (and @p value parameter is set) the - * value will be copied into the memory specified by @p value. The - * @p type value specifies the data type expected. - * * If a @p parsestate pointer is supplied, the parsed (deserialized) JSON * data are stored here. This value may be used in subsequent calls to * avoid re-parsing the JSON. The data must be freed with @@ -132,20 +125,16 @@ * * @param[in] msr Parsed miniSEED record to search * @param[in] ptr Header value desired, as JSON Pointer - * @param[out] value Buffer for value, of type @p type - * @param[in] type Type of value expected, one of: - * @parblock - * - @c 'n' - @p value is type @c double - * - @c 'i' - @p value is type @c int64_t - * - @c 's' - @p value is type @c char* (maximum length is: @c maxlength - 1) - * - @c 'b' - @p value of type @c int (boolean value of 0 or 1) - * @endparblock - * @param[in] maxlength Maximum length of string value * @param[in] parsestate Parsed state for multiple operations, can be NULL * - * @retval 0 on success - * @retval 1 when the value was not found - * @retval 2 when the value is of a different type + * @retval 'u' (decimal 117) - value is an unsigned integer number, @c uint64_t + * @retval 'i' (decimal 105) - value is an integer number, @c int64_t + * @retval 'n' (decimal 110) - value is a real number, @c double + * @retval 's' (decimal 115) - value is a string, @c char* + * @retval 'b' (decimal 98) - value is a boolean, @c int + * @retval 'o' (decimal 111) - value is an object + * @retval 'a' (decimal 97) - value is an array + * @retval 0 - when the value is not found * @returns A (negative) libmseed error code on error * * @ref MessageOnError - this function logs a message on error @@ -153,16 +142,12 @@ * @see mseh_free_parsestate() ***************************************************************************/ int -mseh_get_ptr_r (const MS3Record *msr, const char *ptr, void *value, char type, uint32_t maxlength, - LM_PARSED_JSON **parsestate) +mseh_get_ptr_type (const MS3Record *msr, const char *ptr, LM_PARSED_JSON **parsestate) { LM_PARSED_JSON *parsed = (parsestate) ? *parsestate : NULL; - - yyjson_alc alc = {_priv_malloc, _priv_realloc, _priv_free, NULL}; yyjson_val *extravalue = NULL; - const char *stringvalue = NULL; - - int retval = 0; + yyjson_alc alc = {_priv_malloc, _priv_realloc, _priv_free, NULL}; + char rettype = 0; if (!msr || !ptr) { @@ -173,7 +158,7 @@ /* Nothing can be found in no headers */ if (!msr->extralength) { - return 1; + return 0; } if (!msr->extra) @@ -182,10 +167,10 @@ return MS_GENERROR; } - /* Detect invalid JSON Pointer, i.e. with no root '/' designation */ - if (ptr[0] != '/') + /* Detect invalid JSON Pointer, i.e. with no root '/' designation and not "" (root object) */ + if (ptr[0] != '/' && ptr[0] != '\0') { - ms_log (2, "%s() Unsupported ptr notation: %s\n", __func__, ptr); + ms_log (2, "%s() Unsupported JSON Pointer notation: %s\n", __func__, ptr); return MS_GENERROR; } @@ -228,18 +213,157 @@ if (extravalue == NULL) { - retval = 1; + rettype = 0; } - else if (type == 'n' && yyjson_is_num (extravalue)) + /* Integer type detections before the generic number check */ + else if (yyjson_is_uint (extravalue)) + { + rettype = 'u'; + } + else if (yyjson_is_int (extravalue)) + { + rettype = 'i'; + } + else if (yyjson_is_num (extravalue)) + { + rettype = 'n'; + } + else if (yyjson_is_str (extravalue)) + { + rettype = 's'; + } + else if (yyjson_is_bool (extravalue)) + { + rettype = 'b'; + } + else if (yyjson_is_obj (extravalue)) + { + rettype = 'o'; + } + else if (yyjson_is_arr (extravalue)) + { + rettype = 'a'; + } + + /* Free parse state if not being retained */ + if (parsestate == NULL) + { + mseh_free_parsestate (&parsed); + } + + return rettype; +} + +/** ************************************************************************ + * @brief Search for and return an extra header value. + * + * The extra header value is specified as a JSON Pointer (RFC 6901), e.g. + * \c '/objectA/objectB/header'. + * + * This routine can get used to test for the existence of a value + * without returning the value by setting @p value to NULL. + * + * If the target item is found (and @p value parameter is set) the + * value will be copied into the memory specified by @p value. The + * @p type value specifies the data type expected. + * + * If a @p parsestate pointer is supplied, the parsed (deserialized) JSON + * data are stored here. This value may be used in subsequent calls to + * avoid re-parsing the JSON. The data must be freed with + * mseh_free_parsestate() when done reading the JSON. If this value + * is NULL the parse state will be created and destroyed on each call. + * + * @param[in] msr Parsed miniSEED record to search + * @param[in] ptr Header value desired, as JSON Pointer + * @param[out] value Buffer for value, of type @p type + * @param[in] type Type of value expected, one of: + * @parblock + * - @c 'u' - @p value is type @c uint64_t + * - @c 'i' - @p value is type @c int64_t + * - @c 'n' - @p value is type @c double + * - @c 's' - @p value is type @c char* (maximum length is: @c maxlength - 1) + * - @c 'b' - @p value of type @c int (boolean value of 0 or 1) + * @endparblock + * @param[in] maxlength Maximum length of string value + * @param[in] parsestate Parsed state for multiple operations, can be NULL + * + * @retval 0 on success + * @retval 1 when the value was not found + * @retval 2 when the value is of a different type + * @returns A (negative) libmseed error code on error + * + * @ref MessageOnError - this function logs a message on error + * + * @see mseh_free_parsestate() + ***************************************************************************/ +int +mseh_get_ptr_r (const MS3Record *msr, const char *ptr, void *value, char type, uint32_t maxlength, + LM_PARSED_JSON **parsestate) +{ + LM_PARSED_JSON *parsed = NULL; + yyjson_val *extravalue = NULL; + const char *stringvalue = NULL; + + int retval = 0; + int detected_type; + + if (!msr || !ptr) + { + ms_log (2, "%s() Required input not defined: 'msr' or 'ptr'\n", __func__); + return MS_GENERROR; + } + + /* Nothing can be found in no headers */ + if (!msr->extralength) + { + return 1; + } + + if (!msr->extra) + { + ms_log (2, "%s() Expected extra headers (msr->extra) are not present\n", __func__); + return MS_GENERROR; + } + + /* Check for existing value at JSON Pointer */ + detected_type = mseh_get_ptr_type (msr, ptr, (parsestate) ? parsestate : &parsed); + + /* Set parsed state pointer if supplied and populated by mseh_get_ptr_type() */ + if (parsestate != NULL) + { + parsed = *parsestate; + } + + /* Return error or not found indicator if type is not detected */ + if (detected_type <= 0) + { + /* Free parse state if not being retained */ + if (parsestate == NULL) + { + mseh_free_parsestate (&parsed); + } + + return (detected_type == 0) ? 1 : detected_type; + } + + /* Get target value */ + extravalue = yyjson_doc_ptr_get (parsed->doc, ptr); + + if (type == 'u' && yyjson_is_uint (extravalue)) { if (value) - *((double *)value) = unsafe_yyjson_get_num (extravalue); + *((uint64_t *)value) = unsafe_yyjson_get_uint (extravalue); } else if (type == 'i' && yyjson_is_int (extravalue)) { if (value) *((int64_t *)value) = unsafe_yyjson_get_int (extravalue); } + else if (type == 'n' && yyjson_is_num (extravalue)) + { + if (value) + *((double *)value) = unsafe_yyjson_get_num (extravalue); + } else if (type == 's' && yyjson_is_str (extravalue)) { if (value) @@ -298,8 +422,9 @@ * @param[in] value Buffer for value, of type @p type * @param[in] type Type of value expected, one of: * @parblock - * - @c 'n' - @p value is type @c double + * - @c 'u' - @p value is type @c uint64_t * - @c 'i' - @p value is type @c int64_t + * - @c 'n' - @p value is type @c double * - @c 's' - @p value is type @c char* * - @c 'b' - @p value is type @c int (boolean value of 0 or 1) * - @c 'M' - @p value is type @c char* and a Merge Patch to apply at @p ptr @@ -337,7 +462,7 @@ } /* Detect invalid JSON Pointer, i.e. with no root '/' designation */ - if (ptr[0] != '/' && type != 'M') + if (ptr[0] != '/' && ptr[0] != '\0' && type != 'M') { ms_log (2, "%s() Unsupported JSON Pointer notation: %s\n", __func__, ptr); return MS_GENERROR; @@ -396,14 +521,18 @@ /* Set (or replace) header value at ptr */ switch (type) { - case 'n': + case 'u': rv = yyjson_mut_doc_ptr_set (parsed->mut_doc, ptr, - yyjson_mut_real (parsed->mut_doc, *((double *)value))); + yyjson_mut_uint (parsed->mut_doc, *((uint64_t *)value))); break; case 'i': rv = yyjson_mut_doc_ptr_set (parsed->mut_doc, ptr, yyjson_mut_sint (parsed->mut_doc, *((int64_t *)value))); break; + case 'n': + rv = yyjson_mut_doc_ptr_set (parsed->mut_doc, ptr, + yyjson_mut_real (parsed->mut_doc, *((double *)value))); + break; case 's': rv = yyjson_mut_doc_ptr_set (parsed->mut_doc, ptr, yyjson_mut_strcpy (parsed->mut_doc, (const char *)value)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmseed-3.2.2/libmseed.def new/libmseed-3.2.3/libmseed.def --- old/libmseed-3.2.2/libmseed.def 2025-12-26 20:21:02.000000000 +0100 +++ new/libmseed-3.2.3/libmseed.def 2026-01-01 23:33:34.000000000 +0100 @@ -82,6 +82,7 @@ ms_strncpclean ms_strncpcleantail ms_strncpopen + mseh_get_ptr_type mseh_get_ptr_r mseh_set_ptr_r mseh_add_event_detection_r diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmseed-3.2.2/libmseed.h new/libmseed-3.2.3/libmseed.h --- old/libmseed-3.2.2/libmseed.h 2025-12-26 20:21:02.000000000 +0100 +++ new/libmseed-3.2.3/libmseed.h 2026-01-01 23:33:34.000000000 +0100 @@ -29,8 +29,8 @@ { #endif -#define LIBMSEED_VERSION "3.2.2" //!< Library version -#define LIBMSEED_RELEASE "2025.360" //!< Library release date +#define LIBMSEED_VERSION "3.2.3" //!< Library version +#define LIBMSEED_RELEASE "2026.001" //!< Library release date /** @defgroup io-functions File and URL I/O */ /** @defgroup miniseed-record Record Handling */ @@ -1001,19 +1001,25 @@ */ typedef struct LM_PARSED_JSON_s LM_PARSED_JSON; +extern int mseh_get_ptr_type (const MS3Record *msr, const char *ptr, LM_PARSED_JSON **parsestate); + /** @def mseh_get @brief A simple wrapper to access any type of extra header */ #define mseh_get(msr, ptr, valueptr, type, maxlength) \ mseh_get_ptr_r (msr, ptr, valueptr, type, maxlength, NULL) -/** @def mseh_get_number - @brief A simple wrapper to access a number type extra header */ -#define mseh_get_number(msr, ptr, valueptr) mseh_get_ptr_r (msr, ptr, valueptr, 'n', 0, NULL) +/** @def mseh_get_uint64 + @brief A simple wrapper to access an unsigned integer type extra header */ +#define mseh_get_uint64(msr, ptr, valueptr) mseh_get_ptr_r (msr, ptr, valueptr, 'u', 0, NULL) /** @def mseh_get_int64 - @brief A simple wrapper to access a number type extra header */ + @brief A simple wrapper to access an integer type extra header */ #define mseh_get_int64(msr, ptr, valueptr) mseh_get_ptr_r (msr, ptr, valueptr, 'i', 0, NULL) +/** @def mseh_get_number + @brief A simple wrapper to access a number type extra header */ +#define mseh_get_number(msr, ptr, valueptr) mseh_get_ptr_r (msr, ptr, valueptr, 'n', 0, NULL) + /** @def mseh_get_string @brief A simple wrapper to access a string type extra header */ #define mseh_get_string(msr, ptr, buffer, maxlength) \ @@ -1034,14 +1040,18 @@ @brief A simple wrapper to set any type of extra header */ #define mseh_set(msr, ptr, valueptr, type) mseh_set_ptr_r (msr, ptr, valueptr, type, NULL) -/** @def mseh_set_number - @brief A simple wrapper to set a number type extra header */ -#define mseh_set_number(msr, ptr, valueptr) mseh_set_ptr_r (msr, ptr, valueptr, 'n', NULL) +/** @def mseh_set_uint64 + @brief A simple wrapper to set an unsigned integer type extra header */ +#define mseh_set_uint64(msr, ptr, valueptr) mseh_set_ptr_r (msr, ptr, valueptr, 'u', NULL) /** @def mseh_set_int64 @brief A simple wrapper to set a number type extra header */ #define mseh_set_int64(msr, ptr, valueptr) mseh_set_ptr_r (msr, ptr, valueptr, 'i', NULL) +/** @def mseh_set_number + @brief A simple wrapper to set a number type extra header */ +#define mseh_set_number(msr, ptr, valueptr) mseh_set_ptr_r (msr, ptr, valueptr, 'n', NULL) + /** @def mseh_set_string @brief A simple wrapper to set a string type extra header */ #define mseh_set_string(msr, ptr, valueptr) mseh_set_ptr_r (msr, ptr, valueptr, 's', NULL) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmseed-3.2.2/test/test-extraheaders.c new/libmseed-3.2.3/test/test-extraheaders.c --- old/libmseed-3.2.2/test/test-extraheaders.c 2025-12-26 20:21:02.000000000 +0100 +++ new/libmseed-3.2.3/test/test-extraheaders.c 2026-01-01 23:33:34.000000000 +0100 @@ -8,7 +8,8 @@ \"FDSN\": {\ \"Time\": {\ \"Quality\": 100,\ - \"Correction\": 1.234\ + \"Correction\": 1.234,\ + \"LeapSecond\": -1\ },\ \"Event\": { \ \"Begin\": true,\ @@ -33,20 +34,25 @@ }\ }"; -TEST (extraheaders, get_set) +TEST (extraheaders, get_set_ptr_r) { MS3Record *msr = NULL; + uint64_t getuint; int64_t getint; double getnum; char getstr[100]; int getbool; int rv; + uint64_t setuint; int64_t setint; double setnum; char *setstr; int setbool; + /* Suppress error and warning messages by accumulating them */ + ms_rloginit (NULL, NULL, NULL, NULL, 10); + msr = msr3_init (msr); REQUIRE (msr != NULL, "msr3_init() returned unexpected NULL"); @@ -62,14 +68,18 @@ rv = mseh_exists (msr, "/FDSN/Event/Detection/0"); CHECK (rv, "mseh_exists() returned unexpected false for array element"); - rv = mseh_get_number (msr, "/FDSN/Time/Correction", &getnum); - CHECK (rv == 0, "mseh_get_number() returned unexpected non-match"); - CHECK (getnum == 1.234, "/FDSN/Time/Correction is not expected 1.234"); + rv = mseh_get_uint64 (msr, "/FDSN/Time/Quality", &getuint); + CHECK (rv == 0, "mseh_get_uint64() returned unexpected non-match"); + CHECK (getuint == 100, "/FDSN/Time/Quality is not expected 100"); rv = mseh_get_int64 (msr, "/FDSN/Time/Quality", &getint); CHECK (rv == 0, "mseh_get_int64() returned unexpected non-match"); CHECK (getint == 100, "/FDSN/Time/Quality is not expected 100"); + rv = mseh_get_number (msr, "/FDSN/Time/Correction", &getnum); + CHECK (rv == 0, "mseh_get_number() returned unexpected non-match"); + CHECK (getnum == 1.234, "/FDSN/Time/Correction is not expected 1.234"); + /* Key in first (0th) object of /FDSN/Event/Detection array */ rv = mseh_get_string (msr, "/FDSN/Event/Detection/0/Type", getstr, sizeof(getstr)); CHECK (rv == 0, "mseh_get_string() returned unexpected non-match"); @@ -87,15 +97,15 @@ CHECK (rv != 0, "mseh_get_int64() returned unexpected match"); /* Set and get */ - setnum = 3.14159; - rv = mseh_set_number (msr, "/New/Number", &setnum); - CHECK (rv == 0, "mseh_set_num() returned unexpected error"); + setuint = 18446744073709551615ULL; + rv = mseh_set_uint64 (msr, "/New/UnsignedInteger", &setuint); + CHECK (rv == 0, "mseh_set_uint64() returned unexpected error"); + + rv = mseh_get_uint64 (msr, "/New/UnsignedInteger", &getuint); + CHECK (rv == 0, "mseh_get_uint64() returned unexpected non-match"); + CHECK (getuint == setuint); - rv = mseh_get_number (msr, "/New/Number", &getnum); - CHECK (rv == 0, "mseh_get_num() returned unexpected non-match"); - CHECK (getnum == setnum); - - setint = 51204; + setint = -51204; rv = mseh_set_int64 (msr, "/New/Integer", &setint); CHECK (rv == 0, "mseh_set_int64() returned unexpected error"); @@ -103,6 +113,14 @@ CHECK (rv == 0, "mseh_get_int64() returned unexpected non-match"); CHECK (getint == setint); + setnum = 3.14159; + rv = mseh_set_number (msr, "/New/Number", &setnum); + CHECK (rv == 0, "mseh_set_num() returned unexpected error"); + + rv = mseh_get_number (msr, "/New/Number", &getnum); + CHECK (rv == 0, "mseh_get_num() returned unexpected non-match"); + CHECK (getnum == setnum); + setstr = "Value"; rv = mseh_set_string (msr, "/New/String", setstr); CHECK (rv == 0, "mseh_set_string() returned unexpected error"); @@ -119,6 +137,73 @@ CHECK (rv == 0, "mseh_get_boolean() returned unexpected non-match"); CHECK (getbool == setbool); + /* Invalid JSON Pointer */ + rv = mseh_get_ptr_r (msr, "invalid", NULL, 0, 0, NULL); + CHECK (rv < 0, "mseh_get_ptr_type() returned unexpected match"); + + rv = mseh_set_ptr_r (msr, "invalid", &setuint, 'u', NULL); + CHECK (rv < 0, "mseh_set_uint64() returned unexpected match"); + + msr3_free (&msr); +} + +TEST (extraheaders, get_ptr_type) +{ + MS3Record *msr = NULL; + int rv; + + /* Suppress error and warning messages by accumulating them */ + ms_rloginit (NULL, NULL, NULL, NULL, 10); + + msr = msr3_init (msr); + REQUIRE (msr != NULL, "msr3_init() returned unexpected NULL"); + + msr->extralength = strlen (testheaders); + msr->extra = malloc (msr->extralength); + REQUIRE (msr->extra != NULL, "Error allocating memory for msr->extra"); + memcpy (msr->extra, testheaders, msr->extralength); + + /* Existing headers */ + + /* Unsigned integer */ + rv = mseh_get_ptr_type (msr, "/FDSN/Time/Quality", NULL); + CHECK (rv == 'u', "mseh_get_ptr_type() returned unexpected type"); + + /* Integer */ + rv = mseh_get_ptr_type (msr, "/FDSN/Time/LeapSecond", NULL); + CHECK (rv == 'i', "mseh_get_ptr_type() returned unexpected type"); + + /* Number */ + rv = mseh_get_ptr_type (msr, "/FDSN/Time/Correction", NULL); + CHECK (rv == 'n', "mseh_get_ptr_type() returned unexpected type"); + + /* String, key in first (0th) object of /FDSN/Event/Detection array */ + rv = mseh_get_ptr_type (msr, "/FDSN/Event/Detection/0/Type", NULL); + CHECK (rv == 's', "mseh_get_ptr_type() returned unexpected type"); + + rv = mseh_get_ptr_type (msr, "/FDSN/Event/Begin", NULL); + CHECK (rv == 'b', "mseh_get_ptr_type() returned unexpected type"); + + /* Array */ + rv = mseh_get_ptr_type (msr, "/FDSN/Event/Detection", NULL); + CHECK (rv == 'a', "mseh_get_ptr_type() returned unexpected type"); + + /* Object */ + rv = mseh_get_ptr_type (msr, "/FDSN/Event", NULL); + CHECK (rv == 'o', "mseh_get_ptr_type() returned unexpected type"); + + /* Root object */ + rv = mseh_get_ptr_type (msr, "", NULL); + CHECK (rv == 'o', "mseh_get_ptr_type() returned unexpected type"); + + /* Non-existent header */ + rv = mseh_get_ptr_type (msr, "/FDSN/Non/Existant/Header", NULL); + CHECK (rv == 0, "mseh_get_ptr_type() returned unexpected type"); + + /* Invalid JSON Pointer */ + rv = mseh_get_ptr_type (msr, "invalid", NULL); + CHECK (rv < 0, "mseh_get_ptr_type() returned unexpected match"); + msr3_free (&msr); }
