ss_prop_t *
ss_prop_dup(ss_prop_t *prop, /* source property list */
const char *name /* optional name for debugging */
)
{
SS_ENTER(ss_prop_dup, ss_prop_tP);
ss_prop_t *newprop = NULL;
SS_ASSERT_TYPE(prop, ss_prop_t);
if (NULL==(newprop=ss_prop_new(name))) SS_ERROR(CONS);
if (!name && prop->name)
newprop->name = strdup(prop->name);
if (prop->type>0) {
size_t size;
if (0==(size=H5Tget_size(newprop->type))) SS_ERROR(HDF5);
if ((newprop->type=H5Tcopy(prop->type))<0) SS_ERROR(HDF5);
if (NULL==(newprop->values=malloc(size))) SS_ERROR(RESOURCE);
memcpy(newprop->values, prop->values, size);
}
SS_CLEANUP:
if (newprop) ss_prop_dest(newprop);
SS_LEAVE(newprop);
}