static inline
int smp_is_safe(struct sample *smp)
{
+ struct buffer *buf;
+
switch (smp->data.type) {
case SMP_T_METH:
if (smp->data.u.meth.meth != HTTP_METH_OTHER)
__fallthrough;
case SMP_T_STR:
- if (!smp->data.u.str.size || smp->data.u.str.data >= smp->data.u.str.size)
+ buf = (smp->data.type == SMP_T_STR ? &smp->data.u.str : &smp->data.u.meth.str);
+ if (!buf->size || buf->data >= buf->size)
return 0;
- if (smp->data.u.str.area[smp->data.u.str.data] == 0)
+ if (buf->area[buf->data] == 0)
return 1;
if (smp->flags & SMP_F_CONST)
return 0;
- smp->data.u.str.area[smp->data.u.str.data] = 0;
+ buf->area[buf->data] = 0;
return 1;
case SMP_T_BIN:
static inline
int smp_is_rw(struct sample *smp)
{
+ struct buffer *buf;
+
if (smp->flags & SMP_F_CONST)
return 0;
__fallthrough;
case SMP_T_STR:
- if (!smp->data.u.str.size ||
- smp->data.u.str.data >= smp->data.u.str.size)
+ buf = (smp->data.type == SMP_T_STR ? &smp->data.u.str : &smp->data.u.meth.str);
+ if (!buf->size || buf->data >= buf->size)
return 0;
- if (smp->data.u.str.area[smp->data.u.str.data] != 0)
- smp->data.u.str.area[smp->data.u.str.data] = 0;
+ if (buf->area[buf->data] != 0)
+ buf->area[buf->data] = 0;
return 1;
case SMP_T_BIN:
*/
int smp_dup(struct sample *smp)
{
- struct buffer *trash;
+ struct buffer *trash, *buf;
switch (smp->data.type) {
case SMP_T_BOOL:
__fallthrough;
case SMP_T_STR:
- trash = get_trash_chunk_sz(smp->data.u.str.data+1);
+ buf = (smp->data.type == SMP_T_STR ? &smp->data.u.str : &smp->data.u.meth.str);
+ trash = get_trash_chunk_sz(buf->data+1);
if (!trash)
return 0;
- trash->data = smp->data.type == SMP_T_STR ?
- smp->data.u.str.data : smp->data.u.meth.str.data;
+ trash->data = buf->data;
if (trash->data > trash->size - 1)
trash->data = trash->size - 1;
- memcpy(trash->area, smp->data.type == SMP_T_STR ?
- smp->data.u.str.area : smp->data.u.meth.str.area,
- trash->data);
+ memcpy(trash->area, buf->area, trash->data);
trash->area[trash->data] = 0;
- smp->data.u.str = *trash;
+ *buf = *trash;
break;
case SMP_T_BIN: