int32 getElement(int desc, char **pdata) { int32 length; int32 fid; length = he_desc[desc].length; /* alloc memory to read the element in */ *pdata = (char *) HDmalloc(length); if (*pdata == NULL) return FAIL; /* read in the element and check for error */ if ((fid = Hopen(he_file, DFACC_READ, 0)) == 0) { HEprint(stderr, 0); return FAIL; } if (Hgetelement(fid, he_desc[desc].tag, he_desc[desc].ref, (unsigned char *) (*pdata)) < 0) { HDfree(*pdata); fprintf(stderr, "Cannot read element.\n"); return FAIL; } Hclose(fid); return length; }
/* ** NAME ** DFgetelement -- read an entire data element ** USAGE ** int32 DFgetelement(dfile, tag, ref, ptr) ** DF *dfile; IN: pointer to open DF file ** uint16 tag; IN: tag of element ** uint16 ref; IN: ref number of element ** char *ptr; IN: pointer to space for data element ** RETURNS ** number of bytes read on success, -1 on failure ** DESCRIPTION ** Reads in a data element from an HDF file. ** GLOBAL VARIABLES ** COMMENTS, BUGS, ASSUMPTIONS ** Currently, this function returns 0 on success, not #bytes read. ** EXAMPLES ** REVISION LOG */ int32 DFgetelement(DF * dfile, uint16 tag, uint16 ref, char *ptr) { if (DFIcheck(dfile) != 0) { DFerror = DFE_NOTOPEN; return (-1); } else DFerror = DFE_NONE; /* test if (DFelstat == DFEL_RESIDENT) { Hputelement(DFid, acc_tag, acc_ref, DFelement, DFelsize); HDfree(DFelement); DFIclearacc(); } test */ if (Hgetelement(DFid, tag, ref, (unsigned char *) ptr) == -1) { DFerror = (int)HEvalue(1); return (-1); } else return (Hlength(DFid, tag, ref)); }
int32 vimakecompat(HFILEID f) { VGROUP *vg; VDATA *vs; uint8 *buf = NULL; /* to store an old vdata or vgroup descriptor */ int32 old_bsize = 0, bsize=0; int32 aid; int32 ret; uintn u; uint16 tag=DFTAG_NULL, ref=DFTAG_NULL; CONSTR(FUNC, "vimakecompat"); /* ============================================= */ /* --- read all vgs and convert each --- */ /* allocate space for vg */ if (NULL == (vg =VIget_vgroup_node())) HRETURN_ERROR(DFE_NOSPACE, 0); ret = aid = Hstartread(f, (uint16) OLD_VGDESCTAG, DFREF_WILDCARD); while (ret != FAIL) { HQuerytagref(aid, &tag, &ref); HQuerylength(aid, &bsize); if (buf == NULL || bsize > old_bsize) { if (buf != NULL) HDfree((VOIDP) buf); if ((buf = (uint8 *) HDmalloc(bsize)) == NULL) HRETURN_ERROR(DFE_NOSPACE, 0); old_bsize = bsize; } /* end if */ ret = Hgetelement(f, (uint16) OLD_VGDESCTAG, ref, (uint8 *) buf); if (ret == FAIL) { HDfree((VOIDP) buf); HRETURN_ERROR(DFE_READERROR, 0) } /* end if */ oldunpackvg(vg, buf, &bsize); /* add new items */ vg->vgclass = NULL; /* vg->vgclass[0] = '\0'; */ vg->extag = 0; vg->exref = 0; vg->version = 2; /* version 2 */ vg->more = 0; /* inside each vgroup, change the old tags to new */ for (u = 0; u < (uintn)vg->nvelt; u++) if (vg->tag[u] == OLD_VGDESCTAG) vg->tag[u] = NEW_VGDESCTAG; else if (vg->tag[u] == OLD_VSDESCTAG) vg->tag[u] = NEW_VSDESCTAG; else /* BAD */ HERROR(DFE_NOTINSET); vpackvg(vg, buf, &bsize); ret = Hputelement(f, VGDESCTAG, ref, (uint8 *) buf, bsize); HDfree((VOIDP) buf); if (ret == FAIL) HRETURN_ERROR(DFE_WRITEERROR, 0); ret = Hnextread(aid, (uint16) OLD_VGDESCTAG, DFREF_WILDCARD, DF_CURRENT); } /* while */