- Fixed a bug in napi5.c
This commit is contained in:
124
napi5.c
124
napi5.c
@@ -62,8 +62,10 @@ extern void *NXpData;
|
||||
forward declaration of NX5closegroup in order to get rid of a nasty
|
||||
warning
|
||||
*/
|
||||
NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
NXstatus NX5closegroup (NXhandle fid);
|
||||
/*-------------------------------------------------------------------*/
|
||||
static void ignoreError(void *data, char *text){
|
||||
}
|
||||
/*--------------------------------------------------------------------*/
|
||||
|
||||
static pNexusFile5 NXI5assert(NXhandle fid)
|
||||
@@ -112,7 +114,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
---------------------------------------------------------------------*/
|
||||
|
||||
NXstatus CALLING_STYLE NX5open(CONSTCHAR *filename, NXaccess am,
|
||||
NXstatus NX5open(CONSTCHAR *filename, NXaccess am,
|
||||
NXhandle* pHandle)
|
||||
{
|
||||
hid_t attr1,aid1, aid2;
|
||||
@@ -301,7 +303,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
NXstatus CALLING_STYLE NX5close (NXhandle* fid)
|
||||
NXstatus NX5close (NXhandle* fid)
|
||||
{
|
||||
pNexusFile5 pFile = NULL;
|
||||
int iRet;
|
||||
@@ -348,7 +350,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/*-----------------------------------------------------------------------*/
|
||||
|
||||
NXstatus CALLING_STYLE NX5makegroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass)
|
||||
NXstatus NX5makegroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
hid_t iRet;
|
||||
@@ -404,7 +406,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
return strstr(member_name, attr_name) ? 1 : 0;
|
||||
}
|
||||
|
||||
NXstatus CALLING_STYLE NX5opengroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass)
|
||||
NXstatus NX5opengroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass)
|
||||
{
|
||||
|
||||
pNexusFile5 pFile;
|
||||
@@ -436,6 +438,11 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
}
|
||||
/* check contents of group attribute */
|
||||
attr1 = H5Aopen_name(pFile->iCurrentG, "NX_class");
|
||||
if (attr1 < 0)
|
||||
{
|
||||
NXIReportError (NXpData, "Error opening group attribute!");
|
||||
return NX_ERROR;
|
||||
}
|
||||
atype=H5Tcopy(H5T_C_S1);
|
||||
H5Tset_size(atype,128);
|
||||
iRet = H5Aread(attr1, atype, data);
|
||||
@@ -478,6 +485,11 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
}
|
||||
/* check contains of group attribute */
|
||||
attr1 = H5Aopen_name(pFile->iCurrentG, "NX_class");
|
||||
if (attr1 < 0)
|
||||
{
|
||||
NXIReportError (NXpData, "Error opening group attribute!");
|
||||
return NX_ERROR;
|
||||
}
|
||||
atype=H5Tcopy(H5T_C_S1);
|
||||
H5Tset_size(atype,128);
|
||||
iRet = H5Aread(attr1, atype, data);
|
||||
@@ -496,6 +508,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
pFile->iStack5[pFile->iStackPtr].iVref=pFile->iCurrentG;
|
||||
strcpy(pFile->iStack5[pFile->iStackPtr].irefn,name);
|
||||
pFile->iAtt5.iCurrentIDX=0;
|
||||
pFile->iCurrentD = 0;
|
||||
if(pFile->iCurrentLGG != NULL){
|
||||
free(pFile->iCurrentLGG);
|
||||
}
|
||||
@@ -506,7 +519,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/* ------------------------------------------------------------------- */
|
||||
|
||||
NXstatus CALLING_STYLE NX5closegroup (NXhandle fid)
|
||||
NXstatus NX5closegroup (NXhandle fid)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
int i,ii;
|
||||
@@ -563,7 +576,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
NXstatus CALLING_STYLE NX5compmakedata (NXhandle fid, CONSTCHAR *name,
|
||||
NXstatus NX5compmakedata (NXhandle fid, CONSTCHAR *name,
|
||||
int datatype,
|
||||
int rank, int dimensions[],
|
||||
int compress_type, int chunk_size[])
|
||||
@@ -732,7 +745,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
NXstatus CALLING_STYLE NX5makedata (NXhandle fid, CONSTCHAR *name, int datatype,
|
||||
NXstatus NX5makedata (NXhandle fid, CONSTCHAR *name, int datatype,
|
||||
int rank, int dimensions[])
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
@@ -756,7 +769,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
NXstatus CALLING_STYLE NX5compress (NXhandle fid, int compress_type)
|
||||
NXstatus NX5compress (NXhandle fid, int compress_type)
|
||||
{
|
||||
printf(" NXcompress ERROR: NeXus API based on HDF5 doesn't support\n");
|
||||
printf(" NXcompress function! Using HDF5 library,\n");
|
||||
@@ -767,7 +780,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
NXstatus CALLING_STYLE NX5opendata (NXhandle fid, CONSTCHAR *name)
|
||||
NXstatus NX5opendata (NXhandle fid, CONSTCHAR *name)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
char pBuffer[256];
|
||||
@@ -807,7 +820,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/* ----------------------------------------------------------------- */
|
||||
|
||||
NXstatus CALLING_STYLE NX5closedata (NXhandle fid)
|
||||
NXstatus NX5closedata (NXhandle fid)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
int iRet;
|
||||
@@ -828,7 +841,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
|
||||
|
||||
NXstatus CALLING_STYLE NX5putdata (NXhandle fid, void *data)
|
||||
NXstatus NX5putdata (NXhandle fid, void *data)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
hid_t iRet;
|
||||
@@ -850,7 +863,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/* ------------------------------------------------------------------- */
|
||||
|
||||
NXstatus CALLING_STYLE NX5putattr (NXhandle fid, CONSTCHAR *name, void *data,
|
||||
NXstatus NX5putattr (NXhandle fid, CONSTCHAR *name, void *data,
|
||||
int datalen, int iType)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
@@ -967,7 +980,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/* ------------------------------------------------------------------- */
|
||||
|
||||
NXstatus CALLING_STYLE NX5putslab (NXhandle fid, void *data, int iStart[], int iSize[])
|
||||
NXstatus NX5putslab (NXhandle fid, void *data, int iStart[], int iSize[])
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
int iRet, i;
|
||||
@@ -1036,9 +1049,11 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/* ------------------------------------------------------------------- */
|
||||
|
||||
NXstatus CALLING_STYLE NX5getdataID (NXhandle fid, NXlink* sRes)
|
||||
NXstatus NX5getdataID (NXhandle fid, NXlink* sRes)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
ErrFunc oldErr;
|
||||
int datalen, type = NX_CHAR;
|
||||
|
||||
pFile = NXI5assert (fid);
|
||||
|
||||
@@ -1048,15 +1063,31 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
if(pFile->iCurrentD <= 0){
|
||||
return NX_ERROR;
|
||||
}
|
||||
strcpy(sRes->iTag5,"");
|
||||
strcpy(sRes->iRef5,"/");
|
||||
strcat(sRes->iRef5,pFile->name_ref);
|
||||
strcpy(sRes->iRefd,pFile->iCurrentLD);
|
||||
oldErr = NXMGetError();
|
||||
NXMSetError(NXpData, ignoreError);
|
||||
datalen = 1024;
|
||||
memset(&sRes->targetPath,0,datalen*sizeof(char));
|
||||
NX5getattr(fid,"target",&sRes->targetPath,&datalen,&type);
|
||||
return NX_OK;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------- */
|
||||
|
||||
NXstatus CALLING_STYLE NX5makelink (NXhandle fid, NXlink* sLink)
|
||||
NXstatus NX5printlink (NXhandle fid, NXlink* sLink)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
pFile = NXI5assert (fid);
|
||||
printf("HDF5 link: iTag5 = \"%s\", iRef5 = \"%s\", iRefd = \"%s\"\n", sLink->iTag5, sLink->iRef5, sLink->iRefd);
|
||||
return NX_OK;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------- */
|
||||
|
||||
NXstatus NX5makelink (NXhandle fid, NXlink* sLink)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
/* int iRet; */
|
||||
@@ -1076,7 +1107,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
strcpy(sLink->iTag5,pFile->name_ref);
|
||||
} else {
|
||||
/* group link */
|
||||
strcpy(buffer,pFile->iCurrentLGG);
|
||||
strcpy(buffer,pFile->name_ref);
|
||||
strcat(buffer, sLink->iTag5);
|
||||
strcpy(sLink->iTag5,"/");
|
||||
strcat(sLink->iTag5,buffer);
|
||||
@@ -1127,7 +1158,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
NXstatus CALLING_STYLE NX5flush(NXhandle *pHandle)
|
||||
NXstatus NX5flush(NXhandle *pHandle)
|
||||
{
|
||||
pNexusFile5 pFile = NULL;
|
||||
int iRet;
|
||||
@@ -1206,7 +1237,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
NXstatus CALLING_STYLE NX5getgroupinfo (NXhandle fid, int *iN, NXname pName, NXname pClass)
|
||||
NXstatus NX5getgroupinfo (NXhandle fid, int *iN, NXname pName, NXname pClass)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
hid_t atype,attr_id;
|
||||
@@ -1243,7 +1274,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
NXstatus CALLING_STYLE NX5getnextentry (NXhandle fid,NXname name, NXname nxclass, int *datatype)
|
||||
NXstatus NX5getnextentry (NXhandle fid,NXname name, NXname nxclass, int *datatype)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
hid_t grp, attr1,type,atype;
|
||||
@@ -1253,6 +1284,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
char ph_name[1024];
|
||||
info_type op_data;
|
||||
int iRet_iNX=-1;
|
||||
char pBuffer[256];
|
||||
|
||||
pFile = NXI5assert (fid);
|
||||
op_data.iname = NULL;
|
||||
@@ -1295,7 +1327,17 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
}
|
||||
strcat(ph_name,name);
|
||||
grp=H5Gopen(pFile->iFID,ph_name);
|
||||
if (grp < 0) {
|
||||
sprintf (pBuffer, "ERROR: Group %s does not exist!", ph_name);
|
||||
NXIReportError (NXpData, pBuffer);
|
||||
return NX_ERROR;
|
||||
}
|
||||
attr1 = H5Aopen_name(grp, "NX_class");
|
||||
if (attr1 < 0) {
|
||||
H5Gclose(grp);
|
||||
NXIReportError (NXpData, "Error opening group class");
|
||||
return NX_ERROR;
|
||||
}
|
||||
type=H5T_C_S1;
|
||||
atype=H5Tcopy(type);
|
||||
H5Tset_size(atype,128);
|
||||
@@ -1385,7 +1427,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
NXstatus CALLING_STYLE NX5getdata (NXhandle fid, void *data)
|
||||
NXstatus NX5getdata (NXhandle fid, void *data)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
int iStart[H5S_MAX_RANK], status;
|
||||
@@ -1468,7 +1510,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
NXstatus CALLING_STYLE NX5getinfo (NXhandle fid, int *rank, int dimension[], int *iType)
|
||||
NXstatus NX5getinfo (NXhandle fid, int *rank, int dimension[], int *iType)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
int i, iRank, mType, iRet;
|
||||
@@ -1551,7 +1593,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
NXstatus CALLING_STYLE NX5getslab (NXhandle fid, void *data, int iStart[], int iSize[])
|
||||
NXstatus NX5getslab (NXhandle fid, void *data, int iStart[], int iSize[])
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
hssize_t myStart[H5S_MAX_RANK];
|
||||
@@ -1686,7 +1728,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
return 1;
|
||||
}
|
||||
|
||||
NXstatus CALLING_STYLE NX5getnextattr (NXhandle fileid, NXname pName,
|
||||
NXstatus NX5getnextattr (NXhandle fileid, NXname pName,
|
||||
int *iLength, int *iType)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
@@ -1717,7 +1759,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
NXIReportError (NXpData, "ERROR iterating through ROOT Attr. list!");
|
||||
return NX_ERROR;
|
||||
}
|
||||
} else {
|
||||
} else if (pFile->iCurrentD > 0) {
|
||||
intern_idx=H5Aget_num_attrs(pFile->iCurrentD);
|
||||
if (intern_idx > idx) {
|
||||
iRet=H5Aiterate(pFile->iCurrentD,&idx,attr_info,&iname);
|
||||
@@ -1728,10 +1770,15 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
}
|
||||
intern_idx=-1;
|
||||
if (iRet < 0) {
|
||||
NXIReportError (NXpData, "ERROR iterating through Attr. list!");
|
||||
NXIReportError (NXpData, "ERROR iterating through data Attr. list!");
|
||||
return NX_ERROR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pFile->iAtt5.iCurrentIDX = 0;
|
||||
return NX_EOD; /* no group attributes */
|
||||
}
|
||||
if (iRet>0)
|
||||
{
|
||||
pFile->iAtt5.iCurrentIDX++;
|
||||
@@ -1836,7 +1883,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
NXstatus CALLING_STYLE NX5getattr (NXhandle fid, char *name, void *data, int* datalen, int* iType)
|
||||
NXstatus NX5getattr (NXhandle fid, char *name, void *data, int* datalen, int* iType)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
int iNew, iRet;
|
||||
@@ -1938,7 +1985,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
NXstatus CALLING_STYLE NX5getattrinfo (NXhandle fid, int *iN)
|
||||
NXstatus NX5getattrinfo (NXhandle fid, int *iN)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
char *iname = NULL;
|
||||
@@ -2000,7 +2047,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
NXstatus CALLING_STYLE NX5getgroupID (NXhandle fileid, NXlink* sRes)
|
||||
NXstatus NX5getgroupID (NXhandle fileid, NXlink* sRes)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
int u;
|
||||
@@ -2017,6 +2064,11 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
strcpy(sRes->iTag5,"/");
|
||||
strcat(sRes->iTag5, pFile->iCurrentLGG);
|
||||
strcpy(sRes->iRefd,"");
|
||||
/*
|
||||
TODO: once we have group attributes, this should be set to
|
||||
the groups target attribute
|
||||
*/
|
||||
strcpy(sRes->targetPath, sRes->iTag5);
|
||||
return NX_OK;
|
||||
}
|
||||
/* not reached */
|
||||
@@ -2025,14 +2077,12 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/* ------------------------------------------------------------------- */
|
||||
|
||||
NXstatus CALLING_STYLE NX5sameID (NXhandle fileid, NXlink* pFirstID, NXlink* pSecondID)
|
||||
NXstatus NX5sameID (NXhandle fileid, NXlink* pFirstID, NXlink* pSecondID)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
|
||||
pFile = NXI5assert (fileid);
|
||||
if ((strcmp(pFirstID->iTag5,pSecondID->iTag5) == 0) &
|
||||
(strcmp(pFirstID->iRef5,pSecondID->iRef5) == 0) &
|
||||
(strcmp(pFirstID->iRefd,pSecondID->iRefd) == 0)) {
|
||||
if ((strcmp(pFirstID->targetPath,pSecondID->targetPath) == 0)){
|
||||
return NX_OK;
|
||||
} else {
|
||||
return NX_ERROR;
|
||||
@@ -2041,7 +2091,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
NXstatus CALLING_STYLE NX5initattrdir (NXhandle fid)
|
||||
NXstatus NX5initattrdir (NXhandle fid)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
|
||||
@@ -2052,7 +2102,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
NXstatus CALLING_STYLE NX5initgroupdir (NXhandle fid)
|
||||
NXstatus NX5initgroupdir (NXhandle fid)
|
||||
{
|
||||
pNexusFile5 pFile;
|
||||
|
||||
@@ -2091,5 +2141,5 @@ void NX5assignFunctions(pNexusFunction fHandle)
|
||||
fHandle->nxsameID=NX5sameID;
|
||||
fHandle->nxinitgroupdir=NX5initgroupdir;
|
||||
fHandle->nxinitattrdir=NX5initattrdir;
|
||||
|
||||
fHandle->nxprintlink=NX5printlink;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user