1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 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);
 }