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/ |