sexp-manip_r.c   sexp-manip_r.c 
skipping to change at line 341 skipping to change at line 341
va_list ap; va_list ap;
SEXP_t *ret; SEXP_t *ret;
va_start(ap, memb); va_start(ap, memb);
ret = SEXP_list_new_rv(sexp_mem, memb, ap); ret = SEXP_list_new_rv(sexp_mem, memb, ap);
va_end(ap); va_end(ap);
return (ret); return (ret);
} }
SEXP_t *SEXP_list_rest_r (SEXP_t *rest, const SEXP_t *list)
{
SEXP_val_t v_dsc_o, v_dsc_r;
struct SEXP_val_lblk *lblk;
if (rest == NULL) {
errno = EINVAL;
return (NULL);
}
if (list == NULL) {
errno = EINVAL;
return (NULL);
}
SEXP_VALIDATE(list);
SEXP_val_dsc (&v_dsc_o, list->s_valp);
if (v_dsc_o.type != SEXP_VALTYPE_LIST) {
errno = EINVAL;
return (NULL);
}
if (SEXP_val_new (&v_dsc_r, sizeof (void *) + sizeof (uint16_t),
SEXP_VALTYPE_LIST) != 0)
{
/* TODO: handle this */
return (NULL);
}
SEXP_LCASTP(v_dsc_r.mem)->offset = SEXP_LCASTP(v_dsc_o.mem)->offset
+ 1;
SEXP_LCASTP(v_dsc_r.mem)->b_addr = SEXP_LCASTP(v_dsc_o.mem)->b_addr
;
lblk = SEXP_VALP_LBLK(SEXP_LCASTP(v_dsc_r.mem)->b_addr);
if (lblk != NULL) {
if (SEXP_LCASTP(v_dsc_r.mem)->offset == lblk->real) {
SEXP_LCASTP(v_dsc_r.mem)->offset = 0;
SEXP_LCASTP(v_dsc_r.mem)->b_addr = SEXP_VALP_LBLK(l
blk->nxsz);
}
if (SEXP_VALP_LBLK(SEXP_LCASTP(v_dsc_r.mem)->b_addr) != NUL
L)
SEXP_LCASTP(v_dsc_r.mem)->b_addr = (void *)SEXP_raw
val_lblk_incref ((uintptr_t) SEXP_LCASTP(v_dsc_r.mem)->b_addr);
}
SEXP_init(rest);
rest->s_type = NULL;
rest->s_valp = SEXP_val_ptr (&v_dsc_r);
SEXP_VALIDATE(rest);
return (rest);
}
int SEXP_unref_r(SEXP_t *s_exp) int SEXP_unref_r(SEXP_t *s_exp)
{ {
if (SEXP_refs(s_exp) != 1) if (SEXP_refs(s_exp) != 1)
return (-1); return (-1);
else else
SEXP_rawval_decref(s_exp->s_valp); SEXP_rawval_decref(s_exp->s_valp);
return (0); return (0);
} }
#if defined(NDEBUG) #if defined(NDEBUG)
 End of changes. 1 change blocks. 
0 lines changed or deleted 60 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/