static list_chunk_t * chunk_alloc(data_t *data){ // {{{ ssize_t ret; list_chunk_t *chunk; data_t consumed; holder_consume(ret, consumed, data); if(ret < 0) return NULL; ref_t *ref = ref_t_alloc(&consumed); data_t d_ref = DATA_PTR_REFT(ref); if(data == NULL || ref == NULL) return NULL; if( (chunk = malloc(sizeof(list_chunk_t))) == NULL) return NULL; chunk->cnext = NULL; chunk->data = d_ref; return chunk; } // }}}
static ssize_t data_ref_t_convert_from(data_t *dst, fastcall_convert_from *fargs){ // {{{ ssize_t ret; if(dst->ptr != NULL) return data_ref_t_handler(dst, (fastcall_header *)fargs); // already inited - pass to underlying data switch(fargs->format){ case FORMAT(hash):; hash_t *config; data_t data; data_get(ret, TYPE_HASHT, config, fargs->src); if(ret != 0) return -EINVAL; hash_holder_consume(ret, data, config, HK(data)); return ( (dst->ptr = ref_t_alloc(&data)) == NULL ) ? -EFAULT : 0; default: break; } return -ENOSYS; } // }}}