20 #include "nc4internal.h" 
   21 #include "nc4dispatch.h" 
   22 #include "ncdispatch.h" 
   46 nc4_get_att_ptrs(NC_FILE_INFO_T *h5, NC_GRP_INFO_T *grp, NC_VAR_INFO_T *var,
 
   48                  size_t *lenp, 
int *attnum, 
void *data)
 
   50     NC_ATT_INFO_T *att = NULL;
 
   52     int need_to_convert = 0;
 
   60     LOG((3, 
"%s: mem_type %d", __func__, mem_type));
 
   72     if ((retval = nc4_find_grp_att(grp, varid, name, my_attnum, &att)))
 
   78         mem_type = att->nc_typeid;
 
   93         *xtype = att->nc_typeid;
 
   95         *attnum = att->hdr.id;
 
  103     if ((retval = nc4_get_typelen_mem(h5, mem_type, &type_size)))
 
  109     if (data && att->len && mem_type != att->nc_typeid &&
 
  114         if (!(bufr = malloc((
size_t)(att->len * type_size))))
 
  117         if ((retval = nc4_convert_type(att->data, bufr, att->nc_typeid,
 
  118                                        mem_type, (
size_t)att->len, &range_error,
 
  144             nc_hvl_t *vldest = data;
 
  145             NC_TYPE_INFO_T *type;
 
  148             if ((retval = nc4_find_type(h5, att->nc_typeid, &type)))
 
  152             if ((retval = nc4_get_typelen_mem(h5, type->u.v.base_nc_typeid, &base_typelen)))
 
  155             for (i = 0; i < att->len; i++)
 
  157                 vldest[i].len = att->vldata[i].len;
 
  158                 if (!(vldest[i].p = malloc(vldest[i].len * base_typelen)))
 
  160                 memcpy(vldest[i].p, att->vldata[i].p, vldest[i].len * base_typelen);
 
  163         else if (att->stdata)
 
  165             for (i = 0; i < att->len; i++)
 
  170                     if (!(((
char **)data)[i] = strdup(att->stdata[i])))
 
  174                     ((
char **)data)[i] = att->stdata[i];
 
  179             memcpy(data, bufr, (
size_t)(att->len * type_size));
 
  213 nc4_get_att(
int ncid, 
int varid, 
const char *name, 
nc_type *xtype,
 
  214             nc_type mem_type, 
size_t *lenp, 
int *attnum, 
void *data)
 
  218     NC_VAR_INFO_T *var = NULL;
 
  222     LOG((3, 
"%s: ncid 0x%x varid %d mem_type %d", __func__, ncid,
 
  226     if ((retval = nc4_find_grp_h5(ncid, &grp, &h5)))
 
  233         if (!(var = (NC_VAR_INFO_T*)ncindexith(grp->vars,varid)))
 
  235         assert(var->hdr.id == varid);
 
  243     if ((retval = nc4_normalize_name(name, norm_name)))
 
  246     return nc4_get_att_ptrs(h5, grp, var, norm_name, xtype, mem_type, lenp,
 
  265 NC4_inq_att(
int ncid, 
int varid, 
const char *name, 
nc_type *xtypep,
 
  268     LOG((2, 
"%s: ncid 0x%x varid %d name %s", __func__, ncid, varid, name));
 
  269     return nc4_get_att(ncid, varid, name, xtypep, 
NC_NAT, lenp, NULL, NULL);
 
  284 NC4_inq_attid(
int ncid, 
int varid, 
const char *name, 
int *attnump)
 
  286     LOG((2, 
"%s: ncid 0x%x varid %d name %s", __func__, ncid, varid, name));
 
  287     return nc4_get_att(ncid, varid, name, NULL, 
NC_NAT, NULL, attnump, NULL);
 
  303 NC4_inq_attname(
int ncid, 
int varid, 
int attnum, 
char *name)
 
  308     LOG((2, 
"nc_inq_attname: ncid 0x%x varid %d attnum %d", ncid, varid,
 
  312     if ((retval = nc4_find_nc_att(ncid, varid, NULL, attnum, &att)))
 
  317         strcpy(name, att->hdr.name);
 
  336 NC4_get_att(
int ncid, 
int varid, 
const char *name, 
void *value, 
nc_type memtype)
 
  338     return nc4_get_att(ncid, varid, name, NULL, memtype, NULL, NULL, value);