23RCSID(
"$Id: c6102ea34d90bbe0ef8f3ea6118a402f3ceb6546 $")
 
   25#include <freeradius-devel/util/misc.h> 
   26#include <freeradius-devel/util/skip.h> 
   27#include <freeradius-devel/util/strerror.h> 
   39        char const *p = start;
 
   44        while ((end && (p < end)) || *p) {
 
   61                if (end && ((p + 2) >= end)) {
 
   70                if (p[1] < 
' ') 
goto fail;
 
   89                if (end && ((p + 4) >= end)) 
goto fail;
 
   94                if ((quote == 
'\'') && isxdigit((
uint8_t) p[1]) && isxdigit((
uint8_t) p[2])) {
 
 
  120        char const *p = start;
 
  122        while ((end && (p < end)) || *p) {
 
  123                if (*p == end_quote) {
 
  137                        if (slen <= 0) 
return slen - (p - start);
 
  140                        fr_assert((
size_t) slen <= (
size_t) (end - p));
 
  148                if ((*p == 
'"') || (*p == 
'\'') || (*p == 
'`')) {
 
  156                if ((p[0] == 
'$') || (p[0] == 
'%')) {
 
  157                        if (end && (p + 2) >= end) 
break;
 
  162                        if ((p[0] == 
'%') && (p[1] == 
'%')) {
 
  167                        if ((p[1] == 
'{') || (p[1] == 
'(')) {
 
  187                if (end && ((p + 2) >= end)) 
break;
 
  192                if (p[1] < 
' ') 
break;
 
 
  220        char const *p = start;
 
  225        if (end && ((end - start) < 4)) {
 
  230        if (!((memcmp(p, 
"%{", 2) == 0) || 
 
  231              (memcmp(p, 
"${", 2) == 0) || 
 
  232              (memcmp(p, 
"$(", 2) == 0))) {  
 
  242        } 
else if (*p == 
'{') {
 
  252                while (isalnum((
int) *q) || (*q == 
'.') || (*q == 
'_') || (*q == 
'-')) {
 
  266        if (slen <= 0) 
return slen - (p - start);
 
  267        return slen + (p - start);
 
 
  288        char const *p = start;
 
  289        bool was_regex = 
false;
 
  293        if (eol) *eol = 
false;
 
  298        while ((end && (p < end)) || *p) {
 
  336                if ((*p == 
'$') || (*p == 
'%')) {
 
  337                        if (end && ((p + 2) >= end)) {
 
  342                        if ((p[1] == 
'{') || ((p[0] == 
'$') && (p[1] == 
'('))) {
 
  346                                if (slen <= 0) 
return -(p - start) + slen;
 
  363                if ((*p == 
'"') || (*p == 
'\'') || (*p == 
'`') || (was_regex && (*p == 
'/'))) {
 
  377                if ((p[0] == 
'=') || (p[0] == 
'!')) {
 
  378                        if (end && ((p + 2) >= end)) {
 
  415                if (end && ((p + 2) >= end)) 
break;
 
  420                if (p[1] < 
' ') 
break;
 
  427        if (eol) *eol = (
depth > 0);
 
  429        if (terminal[(
uint8_t) *p]) 
return p - start;
 
 
static uint8_t depth(fr_minmax_heap_index_t i)
ssize_t fr_skip_condition(char const *start, char const *end, bool const terminal[static UINT8_MAX+1], bool *eol)
Skip a conditional expression.
ssize_t fr_skip_brackets(char const *start, char const *end, char end_quote)
Skip a generic {...} or (...) arguments.
ssize_t fr_skip_string(char const *start, char const *end)
Skip a quoted string.
ssize_t fr_skip_xlat(char const *start, char const *end)
Skip an xlat expression.
#define fr_strerror_const(_msg)