static NEOERR * _copy_nodes (HDF *dest, HDF *src) { NEOERR *err = STATUS_OK; HDF *dt, *st; HDF_ATTR *attr_copy; st = src->child; while (st != NULL) { err = _copy_attr(&attr_copy, st->attr); if (err) return nerr_pass(err); err = _set_value(dest, st->name, st->value, 1, 1, st->link, attr_copy, &dt); if (err) { _dealloc_hdf_attr(&attr_copy); return nerr_pass(err); } if (src->child) { err = _copy_nodes (dt, st); if (err) return nerr_pass(err); } st = st->next; } return STATUS_OK; }
NEOERR* hdf_copy (HDF *dest, const char *name, HDF *src) { NEOERR *err; HDF *node; HDF_ATTR *attr_copy; if (_walk_hdf(dest, name, &node) == -1) { err = _copy_attr(&attr_copy, src->attr); if (err) return nerr_pass(err); err = _set_value (dest, name, src->value, 1, 1, src->link, attr_copy, &node); if (err) { _dealloc_hdf_attr(&attr_copy); return nerr_pass(err); } } return nerr_pass (_copy_nodes (node, src)); }