Example #1
0
File: rr.c Project: spease/hammer
const HParsedToken* act_cstr(const HParseResult *p) {
  dns_cstr_t *cs = H_ALLOC(dns_cstr_t);

  const HCountedArray *arr = H_CAST_SEQ(p->ast);
  uint8_t *ret = h_arena_malloc(arr->arena, sizeof(uint8_t)*arr->used);
  for (size_t i=0; i<arr->used; ++i)
    ret[i] = H_CAST_UINT(arr->elements[i]);
  assert(ret[arr->used-1] == '\0'); // XXX Is this right?! If so, shouldn't it be a validation?
  *cs = ret;

  return H_MAKE(dns_cstr_t, cs);
}
Example #2
0
static HParsedToken *act_bytes(const HParseResult *p, void *user)
{
    DNP3_Object *o = H_ALLOC(DNP3_Object);
    HCountedArray *a = H_CAST_SEQ(p->ast);
    size_t n = a->used;

    o->applid.len = n;
    o->applid.str = h_arena_malloc(p->arena, n+1);  // null-terminate

    for(size_t i=0; i<n; i++)
        o->applid.str[i] = H_CAST_UINT(a->elements[i]);
    o->applid.str[n] = '\0';

    return H_MAKE(DNP3_Object, o);
}
Example #3
0
File: rr.c Project: spease/hammer
const HParsedToken *act_txt(const HParseResult *p) {
  dns_rr_txt_t *txt = H_ALLOC(dns_rr_txt_t);

  const HCountedArray *arr = H_CAST_SEQ(p->ast);
  uint8_t **ret = h_arena_malloc(arr->arena, sizeof(uint8_t*)*arr->used);
  for (size_t i=0; i<arr->used; ++i) {
    size_t len = h_seq_len(arr->elements[i]);
    uint8_t *tmp = h_arena_malloc(arr->arena, sizeof(uint8_t)*len);
    for (size_t j=0; j<len; ++j)
      tmp[j] = H_INDEX_UINT(arr->elements[i], j);
    ret[i] = tmp;
  }

  txt->count = arr->used;
  txt->txt_data = ret;

  return H_MAKE(dns_rr_txt_t, txt);
}