mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
media-session: fix parsing of booleans and null
Reorder the json file a bit
This commit is contained in:
parent
77b8959df5
commit
1f73280c52
1 changed files with 53 additions and 49 deletions
|
|
@ -35,6 +35,7 @@ extern "C" {
|
|||
#include <stdint.h>
|
||||
|
||||
|
||||
/* a simple JSON compatible tokenizer */
|
||||
struct spa_json {
|
||||
const char *cur;
|
||||
const char *end;
|
||||
|
|
@ -56,6 +57,8 @@ static inline void spa_json_enter(struct spa_json * iter, struct spa_json * sub)
|
|||
*sub = SPA_JSON_ENTER(iter);
|
||||
}
|
||||
|
||||
/** Get the next token. \a value points to the token and the return value
|
||||
* is the length. */
|
||||
static inline int spa_json_next(struct spa_json * iter, const char **value)
|
||||
{
|
||||
int utf8_remain = 0;
|
||||
|
|
@ -166,51 +169,62 @@ static inline int spa_json_enter_container(struct spa_json *iter, struct spa_jso
|
|||
return 1;
|
||||
}
|
||||
|
||||
/* object */
|
||||
static inline int spa_json_is_object(const char *val, int len)
|
||||
{
|
||||
return len > 0 && *val == '{';
|
||||
}
|
||||
static inline int spa_json_enter_object(struct spa_json *iter, struct spa_json *sub)
|
||||
{
|
||||
return spa_json_enter_container(iter, sub, '{');
|
||||
}
|
||||
|
||||
/* array */
|
||||
static inline bool spa_json_is_array(const char *val, int len)
|
||||
{
|
||||
return len > 0 && *val == '[';
|
||||
}
|
||||
static inline int spa_json_enter_array(struct spa_json *iter, struct spa_json *sub)
|
||||
{
|
||||
return spa_json_enter_container(iter, sub, '[');
|
||||
}
|
||||
|
||||
static inline int spa_json_is_object(const char *val, int len)
|
||||
{
|
||||
return len > 0 && *val == '{';
|
||||
}
|
||||
|
||||
static inline bool spa_json_is_array(const char *val, int len)
|
||||
{
|
||||
return len > 0 && *val == '[';
|
||||
}
|
||||
|
||||
static inline bool spa_json_is_float(const char *val, int len)
|
||||
{
|
||||
char *end;
|
||||
strtof(val, &end);
|
||||
return end == val + len;
|
||||
}
|
||||
|
||||
static inline bool spa_json_is_string(const char *val, int len)
|
||||
{
|
||||
return len > 1 && *val == '"';
|
||||
}
|
||||
|
||||
/* null */
|
||||
static inline bool spa_json_is_null(const char *val, int len)
|
||||
{
|
||||
return len == 4 && strcmp(val, "null") == 0;
|
||||
return len == 4 && strncmp(val, "null", 4) == 0;
|
||||
}
|
||||
|
||||
/* float */
|
||||
static inline int spa_json_parse_float(const char *val, int len, float *result)
|
||||
{
|
||||
char *end;
|
||||
*result = strtof(val, &end);
|
||||
return end == val + len;
|
||||
}
|
||||
static inline bool spa_json_is_float(const char *val, int len)
|
||||
{
|
||||
float dummy;
|
||||
return spa_json_parse_float(val, len, &dummy);
|
||||
}
|
||||
static inline int spa_json_get_float(struct spa_json *iter, float *res)
|
||||
{
|
||||
const char *value;
|
||||
int len;
|
||||
if ((len = spa_json_next(iter, &value)) <= 0)
|
||||
return -1;
|
||||
return spa_json_parse_float(value, len, res);
|
||||
}
|
||||
|
||||
/* bool */
|
||||
static inline bool spa_json_is_true(const char *val, int len)
|
||||
{
|
||||
return len == 4 && strcmp(val, "true") == 0;
|
||||
return len == 4 && strncmp(val, "true", 4) == 0;
|
||||
}
|
||||
|
||||
static inline bool spa_json_is_false(const char *val, int len)
|
||||
{
|
||||
return len == 5 && strcmp(val, "false") == 0;
|
||||
return len == 5 && strncmp(val, "false", 5) == 0;
|
||||
}
|
||||
|
||||
static inline bool spa_json_is_bool(const char *val, int len)
|
||||
|
|
@ -218,12 +232,6 @@ static inline bool spa_json_is_bool(const char *val, int len)
|
|||
return spa_json_is_true(val, len) || spa_json_is_false(val, len);
|
||||
}
|
||||
|
||||
static inline int spa_json_parse_float(const char *val, int len, float *result)
|
||||
{
|
||||
char *end;
|
||||
*result = strtof(val, &end);
|
||||
return end == val + len;
|
||||
}
|
||||
static inline int spa_json_parse_bool(const char *val, int len, bool *result)
|
||||
{
|
||||
if ((*result = spa_json_is_true(val, len)))
|
||||
|
|
@ -232,6 +240,20 @@ static inline int spa_json_parse_bool(const char *val, int len, bool *result)
|
|||
return 1;
|
||||
return -1;
|
||||
}
|
||||
static inline int spa_json_get_bool(struct spa_json *iter, bool *res)
|
||||
{
|
||||
const char *value;
|
||||
int len;
|
||||
if ((len = spa_json_next(iter, &value)) <= 0)
|
||||
return -1;
|
||||
return spa_json_parse_bool(value, len, res);
|
||||
}
|
||||
|
||||
/* string */
|
||||
static inline bool spa_json_is_string(const char *val, int len)
|
||||
{
|
||||
return len > 1 && *val == '"';
|
||||
}
|
||||
|
||||
static inline int spa_json_parse_string(const char *val, int len, char *result)
|
||||
{
|
||||
|
|
@ -258,24 +280,6 @@ static inline int spa_json_parse_string(const char *val, int len, char *result)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static inline int spa_json_get_float(struct spa_json *iter, float *res)
|
||||
{
|
||||
const char *value;
|
||||
int len;
|
||||
if ((len = spa_json_next(iter, &value)) <= 0)
|
||||
return -1;
|
||||
return spa_json_parse_float(value, len, res);
|
||||
}
|
||||
|
||||
static inline int spa_json_get_bool(struct spa_json *iter, bool *res)
|
||||
{
|
||||
const char *value;
|
||||
int len;
|
||||
if ((len = spa_json_next(iter, &value)) <= 0)
|
||||
return -1;
|
||||
return spa_json_parse_bool(value, len, res);
|
||||
}
|
||||
|
||||
static inline int spa_json_get_string(struct spa_json *iter, char *res, int maxlen)
|
||||
{
|
||||
const char *value;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue