*/
static inline ssize_t attr_name_with_prefix(fr_sbuff_t *out, fr_dict_attr_t const *da, fr_json_format_t const *format)
{
- fr_sbuff_t our_out = FR_SBUFF_NO_ADVANCE(out);
+ fr_sbuff_t our_out = FR_SBUFF(out);
if (!out) return 0;
*/
ssize_t cond_print(fr_sbuff_t *out, fr_cond_t const *in)
{
- fr_sbuff_t our_out = FR_SBUFF_NO_ADVANCE(out);
+ fr_sbuff_t our_out = FR_SBUFF(out);
fr_cond_t const *c = in;
while (c) {
L("||"), /* Logical operator */
);
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
fr_sbuff_marker_t m;
tmpl_t *vpt;
fr_token_t type;
CONF_SECTION *cs, fr_sbuff_t *in, int brace,
tmpl_rules_t const *t_rules)
{
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
ssize_t slen;
fr_cond_t *c;
fr_dcursor_t cursor;
fr_dict_attr_t const *da;
fr_pair_t *vp;
- fr_sbuff_t sbuff = FR_SBUFF_COPY(env_sbuff);
+ fr_sbuff_t sbuff = FR_SBUFF_BIND_CURRENT(env_sbuff);
/*
* Set up the environment variables in the
fr_token_t token;
map_t *map;
bool is_child;
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
fr_sbuff_marker_t m_lhs, m_rhs, m_op;
fr_sbuff_term_t const *tt = p_rules ? p_rules->terminals : NULL;
map_t *parent, *new_parent;
*/
ssize_t map_print(fr_sbuff_t *out, map_t const *map)
{
- fr_sbuff_t our_out = FR_SBUFF_NO_ADVANCE(out);
+ fr_sbuff_t our_out = FR_SBUFF(out);
MAP_VERIFY(map);
default:
{
fr_sbuff_parse_error_t sberr = FR_SBUFF_PARSE_OK;
- fr_sbuff_t tmp = FR_SBUFF_NO_ADVANCE(name);
+ fr_sbuff_t tmp = FR_SBUFF(name);
if (fr_sbuff_out(&sberr, &ar->num, &tmp) == 0) {
if (sberr == FR_SBUFF_PARSE_ERROR_NOT_FOUND) {
int ret;
size_t list_len;
tmpl_t *vpt;
- fr_sbuff_t our_name = FR_SBUFF_NO_ADVANCE(name); /* Take a local copy in case we need to back track */
+ fr_sbuff_t our_name = FR_SBUFF(name); /* Take a local copy in case we need to back track */
bool ref_prefix = false;
bool is_raw = false;
static ssize_t tmpl_afrom_bool_substr(TALLOC_CTX *ctx, tmpl_t **out, fr_sbuff_t *in,
fr_sbuff_parse_rules_t const *p_rules)
{
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
bool a_bool;
tmpl_t *vpt;
static ssize_t tmpl_afrom_octets_substr(TALLOC_CTX *ctx, tmpl_t **out, fr_sbuff_t *in,
fr_sbuff_parse_rules_t const *p_rules)
{
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
tmpl_t *vpt;
char *hex;
size_t binlen, len;
fr_sbuff_parse_rules_t const *p_rules)
{
tmpl_t *vpt;
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
uint8_t octet;
fr_type_t type;
fr_sbuff_parse_rules_t const *p_rules)
{
tmpl_t *vpt;
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
fr_sbuff_marker_t m;
fr_type_t type;
size_t len;
fr_sbuff_parse_rules_t const *p_rules)
{
tmpl_t *vpt;
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
uint8_t buff[6];
fr_dbuff_t dbuff;
fr_value_box_t *vb;
fr_sbuff_parse_rules_t const *p_rules)
{
tmpl_t *vpt;
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
ssize_t slen;
fr_value_box_t *vb;
fr_sbuff_parse_rules_t const *p_rules,
tmpl_rules_t const *t_rules)
{
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
ssize_t slen;
char *str;
*/
ssize_t tmpl_cast_from_substr(fr_type_t *out, fr_sbuff_t *in)
{
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
fr_sbuff_marker_t m;
fr_type_t cast = FR_TYPE_NULL;
ssize_t slen;
tmpl_attr_t *ar = NULL;
fr_da_stack_t stack;
char printed_rr = false;
- fr_sbuff_t our_out = FR_SBUFF_NO_ADVANCE(out);
+ fr_sbuff_t our_out = FR_SBUFF(out);
if (unlikely(!vpt)) return 0;
ssize_t tmpl_print(fr_sbuff_t *out, tmpl_t const *vpt,
tmpl_attr_prefix_t ar_prefix, fr_sbuff_escape_rules_t const *e_rules)
{
- fr_sbuff_t our_out = FR_SBUFF_NO_ADVANCE(out);
+ fr_sbuff_t our_out = FR_SBUFF(out);
if (unlikely(!vpt)) return 0;
*/
ssize_t tmpl_print_quoted(fr_sbuff_t *out, tmpl_t const *vpt, tmpl_attr_prefix_t ar_prefix)
{
- fr_sbuff_t our_out = FR_SBUFF_NO_ADVANCE(out);
+ fr_sbuff_t our_out = FR_SBUFF(out);
char quote = fr_token_quote[vpt->quote];
fr_sbuff_init(&sbuff, buff, pad_len + 1);
fr_sbuff_marker(&m_data, &sbuff);
fr_sbuff_advance(&m_data, pad_len - len); /* Mark where we want the data to go */
- fr_sbuff_move(&FR_SBUFF_NO_ADVANCE(&m_data), &FR_SBUFF_NO_ADVANCE(&sbuff), len); /* Shift the data */
+ fr_sbuff_move(&FR_SBUFF(&m_data), &FR_SBUFF(&sbuff), len); /* Shift the data */
if (fill_len == 1) {
memset(fr_sbuff_current(&sbuff), *fill_str, fr_sbuff_ahead(&m_data));
fr_sbuff_t *in,
fr_sbuff_parse_rules_t const *p_rules, tmpl_rules_t const *t_rules)
{
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
xlat_flags_t tmp_flags = {};
if (!flags) flags = &tmp_flags;
ssize_t xlat_tokenize_argv(TALLOC_CTX *ctx, xlat_exp_t **head, xlat_flags_t *flags, fr_sbuff_t *in,
fr_sbuff_parse_rules_t const *p_rules, tmpl_rules_t const *t_rules)
{
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
ssize_t slen;
fr_cursor_t cursor;
fr_sbuff_marker_t m;
ssize_t xlat_tokenize(TALLOC_CTX *ctx, xlat_exp_t **head, xlat_flags_t *flags, fr_sbuff_t *in,
fr_sbuff_parse_rules_t const *p_rules, tmpl_rules_t const *t_rules)
{
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
xlat_flags_t tmp_flags = {};
if (!flags) flags = &tmp_flags;
*/
ssize_t fr_base16_encode_nstd(fr_sbuff_t *out, fr_dbuff_t *in, char const alphabet[static UINT8_MAX])
{
- fr_sbuff_t our_out = FR_SBUFF_NO_ADVANCE(out);
+ fr_sbuff_t our_out = FR_SBUFF(out);
fr_dbuff_t our_in = FR_DBUFF(in);
while (fr_dbuff_extend(&our_in)) {
ssize_t fr_base16_decode_nstd(fr_sbuff_parse_error_t *err, fr_dbuff_t *out, fr_sbuff_t *in,
bool no_trailing, uint8_t const alphabet[static UINT8_MAX])
{
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
fr_dbuff_t our_out = FR_DBUFF(out);
while (fr_sbuff_extend_lowat(NULL, &our_in, 2) >= 2) {
ssize_t fr_base32_encode_nstd(fr_sbuff_t *out, fr_dbuff_t *in,
bool add_padding, char const alphabet[static UINT8_MAX])
{
- fr_sbuff_t our_out = FR_SBUFF_NO_ADVANCE(out);
+ fr_sbuff_t our_out = FR_SBUFF(out);
fr_dbuff_t our_in = FR_DBUFF(in);
fr_strerror_const("Insufficient buffer space");
ssize_t fr_base32_decode_nstd(fr_sbuff_parse_error_t *err, fr_dbuff_t *out, fr_sbuff_t *in,
bool expect_padding, bool no_trailing, uint8_t const alphabet[static UINT8_MAX])
{
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
fr_dbuff_t our_out = FR_DBUFF(out);
fr_sbuff_marker_t m_final;
size_t len;
ssize_t fr_base64_encode_nstd(fr_sbuff_t *out, fr_dbuff_t *in,
bool add_padding, char const alphabet[static UINT8_MAX])
{
- fr_sbuff_t our_out = FR_SBUFF_NO_ADVANCE(out);
+ fr_sbuff_t our_out = FR_SBUFF(out);
fr_dbuff_t our_in = FR_DBUFF(in);
fr_strerror_const("Insufficient buffer space");
ssize_t fr_base64_decode_nstd(fr_sbuff_parse_error_t *err, fr_dbuff_t *out, fr_sbuff_t *in,
bool expect_padding, bool no_trailing, uint8_t const alphabet[static UINT8_MAX])
{
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
fr_dbuff_t our_out = FR_DBUFF(out);
fr_sbuff_marker_t m_final;
uint8_t pad;
ssize_t fr_dict_attr_flags_print(fr_sbuff_t *out, fr_dict_t const *dict, fr_type_t type, fr_dict_attr_flags_t const *flags)
{
- fr_sbuff_t our_out = FR_SBUFF_NO_ADVANCE(out);
+ fr_sbuff_t our_out = FR_SBUFF(out);
#define FLAG_SET(_flag) if (flags->_flag) FR_SBUFF_IN_STRCPY_LITERAL_RETURN(&our_out, STRINGIFY(_flag)",")
int i;
int depth = 0;
fr_da_stack_t da_stack;
- fr_sbuff_t our_out = FR_SBUFF_NO_ADVANCE(out);
+ fr_sbuff_t our_out = FR_SBUFF(out);
/*
* If the ancestor and the DA match, there's
fr_dict_t *dict;
size_t len;
char buffer[FR_DICT_ATTR_MAX_NAME_LEN + 1 + 1]; /* +1 \0 +1 for "too long" */
- fr_sbuff_t our_name = FR_SBUFF_NO_ADVANCE(name);
+ fr_sbuff_t our_name = FR_SBUFF(name);
if (!dict_gctx || !name || !out) {
if (err) *err = FR_DICT_ATTR_EINVAL;
fr_dict_t *dict = NULL;
ssize_t slen = 0;
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
if (internal && !dict_gctx->internal) internal = false;
_in = _n; \
} while (0)
- our_in = FR_SBUFF_NO_ADVANCE(in);
+ our_in = FR_SBUFF(in);
fr_sbuff_marker(&start, &our_in);
list = talloc_strdup(NULL, "");
bool internal, bool foreign,
dict_attr_resolve_func_t func)
{
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
fr_dict_attr_err_t our_err;
fr_dict_t *initial;
ssize_t slen;
size_t len;
fr_dict_attr_t const *ref;
char buffer[FR_DICT_ATTR_MAX_NAME_LEN + 1 + 1]; /* +1 \0 +1 for "too long" */
- fr_sbuff_t our_name = FR_SBUFF_NO_ADVANCE(name);
+ fr_sbuff_t our_name = FR_SBUFF(name);
fr_hash_table_t *namespace;
*out = NULL;
* Serialize all child VPs as full quoted
* <pair> = ["]<child>["]
*/
- our_out = FR_SBUFF_NO_ADVANCE(out);
+ our_out = FR_SBUFF(out);
FR_SBUFF_IN_CHAR_RETURN(&our_out, '{', ' ');
for (child = fr_pair_dcursor_init(&cursor, &vp->vp_group);
child != NULL;
ssize_t fr_pair_print(fr_sbuff_t *out, fr_pair_t const *parent, fr_pair_t const *vp)
{
char const *token = NULL;
- fr_sbuff_t our_out = FR_SBUFF_NO_ADVANCE(out);
+ fr_sbuff_t our_out = FR_SBUFF(out);
fr_dict_attr_t const *parent_da = NULL;
PAIR_VERIFY(vp);
ssize_t regex_flags_parse(int *err, fr_regex_flags_t *out, fr_sbuff_t *in,
fr_sbuff_term_t const *terminals, bool err_on_dup)
{
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
if (err) *err = 0;
*/
ssize_t regex_flags_print(fr_sbuff_t *sbuff, fr_regex_flags_t const flags[static REGEX_FLAG_BUFF_SIZE])
{
- fr_sbuff_t our_sbuff = FR_SBUFF_NO_ADVANCE(sbuff);
+ fr_sbuff_t our_sbuff = FR_SBUFF(sbuff);
#define DO_REGEX_FLAG(_f, _c) \
if (flags->_f) FR_SBUFF_IN_CHAR_RETURN(&our_sbuff, _c)
*/
size_t fr_sbuff_out_bstrncpy(fr_sbuff_t *out, fr_sbuff_t *in, size_t len)
{
- fr_sbuff_t our_in = FR_SBUFF_COPY(in);
+ fr_sbuff_t our_in = FR_SBUFF_BIND_CURRENT(in);
size_t remaining;
CHECK_SBUFF_INIT(in);
*/
ssize_t fr_sbuff_out_bstrncpy_exact(fr_sbuff_t *out, fr_sbuff_t *in, size_t len)
{
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in);
+ fr_sbuff_t our_in = FR_SBUFF(in);
size_t remaining;
fr_sbuff_marker_t m;
size_t fr_sbuff_out_bstrncpy_allowed(fr_sbuff_t *out, fr_sbuff_t *in, size_t len,
bool const allowed[static UINT8_MAX + 1])
{
- fr_sbuff_t our_in = FR_SBUFF_COPY(in);
+ fr_sbuff_t our_in = FR_SBUFF_BIND_CURRENT(in);
CHECK_SBUFF_INIT(in);
fr_sbuff_term_t const *tt,
fr_sbuff_unescape_rules_t const *u_rules)
{
- fr_sbuff_t our_in = FR_SBUFF_COPY(in);
+ fr_sbuff_t our_in = FR_SBUFF_BIND_CURRENT(in);
bool do_escape = false; /* Track state across extensions */
uint8_t idx[UINT8_MAX + 1]; /* Fast path index */
CHECK_SBUFF_INIT(in);
- our_in = FR_SBUFF_NO_ADVANCE(in);
+ our_in = FR_SBUFF(in);
/*
* Chunk tracking...
char *end, *a_end; \
size_t len; \
long long num; \
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in); \
+ fr_sbuff_t our_in = FR_SBUFF(in); \
len = fr_sbuff_out_bstrncpy(&FR_SBUFF_IN(buff, sizeof(buff)), &our_in, _max_char); \
if (len == 0) { \
if (err) *err = FR_SBUFF_PARSE_ERROR_NOT_FOUND; \
char *end, *a_end; \
size_t len; \
unsigned long long num; \
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in); \
+ fr_sbuff_t our_in = FR_SBUFF(in); \
len = fr_sbuff_out_bstrncpy(&FR_SBUFF_IN(buff, sizeof(buff)), &our_in, _max_char); \
if (len == 0) { \
if (err) *err = FR_SBUFF_PARSE_ERROR_NOT_FOUND; \
{ \
char buff[_max_char + 1]; \
char *end; \
- fr_sbuff_t our_in = FR_SBUFF_NO_ADVANCE(in); \
+ fr_sbuff_t our_in = FR_SBUFF(in); \
size_t len; \
_type res; \
len = fr_sbuff_out_bstrncpy_allowed(&FR_SBUFF_OUT(buff, sizeof(buff)), &our_in, SIZE_MAX, sbuff_char_class_float); \
if (unlikely(sbuff->is_const)) return 0;
- our_sbuff = FR_SBUFF_NO_ADVANCE(sbuff);
+ our_sbuff = FR_SBUFF(sbuff);
while (p < end) {
size_t clen;
uint8_t c = (uint8_t)*p;
*/
char *fr_sbuff_adv_to_chr_utf8(fr_sbuff_t *sbuff, size_t len, char const *chr)
{
- fr_sbuff_t our_sbuff = FR_SBUFF_NO_ADVANCE(sbuff);
+ fr_sbuff_t our_sbuff = FR_SBUFF(sbuff);
size_t total = 0;
size_t clen = strlen(chr);
*/
char *fr_sbuff_adv_to_chr(fr_sbuff_t *sbuff, size_t len, char c)
{
- fr_sbuff_t our_sbuff = FR_SBUFF_NO_ADVANCE(sbuff);
+ fr_sbuff_t our_sbuff = FR_SBUFF(sbuff);
size_t total = 0;
CHECK_SBUFF_INIT(sbuff);
*/
char *fr_sbuff_adv_to_str(fr_sbuff_t *sbuff, size_t len, char const *needle, size_t needle_len)
{
- fr_sbuff_t our_sbuff = FR_SBUFF_NO_ADVANCE(sbuff);
+ fr_sbuff_t our_sbuff = FR_SBUFF(sbuff);
size_t total = 0;
CHECK_SBUFF_INIT(sbuff);
*/
char *fr_sbuff_adv_to_strcase(fr_sbuff_t *sbuff, size_t len, char const *needle, size_t needle_len)
{
- fr_sbuff_t our_sbuff = FR_SBUFF_NO_ADVANCE(sbuff);
+ fr_sbuff_t our_sbuff = FR_SBUFF(sbuff);
size_t total = 0;
CHECK_SBUFF_INIT(sbuff);
*
* @param[in] _sbuff_or_marker to make an ephemeral copy of.
*/
-#define FR_SBUFF_NO_ADVANCE(_sbuff_or_marker) \
+#define FR_SBUFF(_sbuff_or_marker) \
_Generic((_sbuff_or_marker), \
fr_sbuff_t * : ((fr_sbuff_t){ \
.buff = ((fr_sbuff_t *)(_sbuff_or_marker))->buff, \
*
* @param[in] _sbuff to make an ephemeral copy of.
*/
-#define FR_SBUFF_COPY(_sbuff_or_marker) \
+#define FR_SBUFF_BIND_CURRENT(_sbuff_or_marker) \
_Generic((_sbuff_or_marker), \
fr_sbuff_t * : ((fr_sbuff_t){ \
.buff = ((fr_sbuff_t *)(_sbuff_or_marker))->buff, \
TEST_CASE("Copy 5 bytes to out - no advance");
TEST_CHECK(sbuff.p == sbuff.start);
- slen = fr_sbuff_out_bstrncpy_exact(&FR_SBUFF_OUT(out, sizeof(out)), &FR_SBUFF_NO_ADVANCE(&sbuff), 5);
+ slen = fr_sbuff_out_bstrncpy_exact(&FR_SBUFF_OUT(out, sizeof(out)), &FR_SBUFF(&sbuff), 5);
TEST_CHECK(slen == 5);
TEST_CHECK(strcmp(out, "i am ") == 0);
TEST_CHECK(sbuff.p == sbuff.start);
TEST_SBUFF_USED(&sbuff_0, 0);
TEST_SBUFF_LEN(&sbuff_0, 1);
- sbuff_1 = FR_SBUFF_COPY(&sbuff_0);
+ sbuff_1 = FR_SBUFF_BIND_CURRENT(&sbuff_0);
TEST_CASE("Check sbuff_1 has extend fields set");
TEST_CHECK(sbuff_0.extend == sbuff_1.extend);
TEST_CHECK(sbuff_0.uctx == sbuff_1.uctx);
TEST_CHECK((marker_0.p - sbuff_0.start) == 1);
TEST_CASE("Print string - Copy sbuff");
- sbuff_1 = FR_SBUFF_COPY(&sbuff_0); /* Dup sbuff_0 */
+ sbuff_1 = FR_SBUFF_BIND_CURRENT(&sbuff_0); /* Dup sbuff_0 */
TEST_CHECK(sbuff_0.p == sbuff_1.start);
fr_sbuff_marker(&marker_1, &sbuff_1);
*/
ssize_t fr_value_box_print(fr_sbuff_t *out, fr_value_box_t const *data, fr_sbuff_escape_rules_t const *e_rules)
{
- fr_sbuff_t our_out = FR_SBUFF_NO_ADVANCE(out);
+ fr_sbuff_t our_out = FR_SBUFF(out);
char buf[1024]; /* Interim buffer to use with poorly behaved printing functions */
*/
ssize_t fr_value_box_print_quoted(fr_sbuff_t *out, fr_value_box_t const *data, fr_token_t quote)
{
- fr_sbuff_t our_out = FR_SBUFF_NO_ADVANCE(out);
+ fr_sbuff_t our_out = FR_SBUFF(out);
if (quote == T_BARE_WORD) return fr_value_box_print(out, data, NULL);
char const *sep, size_t sep_len, fr_sbuff_escape_rules_t const *e_rules,
fr_value_box_list_action_t proc_action, bool flatten)
{
- fr_sbuff_t our_sbuff = FR_SBUFF_NO_ADVANCE(sbuff);
+ fr_sbuff_t our_sbuff = FR_SBUFF(sbuff);
ssize_t slen;
if (fr_dlist_empty(list)) return 0;