Changeset 1728


Ignore:
Timestamp:
02/11/11 14:49:41 (7 months ago)
Author:
Tobias Richter
Message:

external linking in hdf5

refs #290

external links are created correctly, but not displayed through napi
(h5dump and other hdf tools work)

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/napi.h

    r1687 r1728  
    44  Application Program Interface Header File 
    55   
    6   Copyright (C) 2000-2007 Mark Koennecke, Uwe Filges 
     6  Copyright (C) 2000-2011 Mark Koennecke, Uwe Filges 
    77   
    88  This library is free software; you can redistribute it and/or 
     
    904904        NXstatus ( *nxsetnumberformat)(NXhandle handle, int type, char *format); 
    905905        NXstatus ( *nxprintlink)(NXhandle handle, NXlink* link); 
     906        NXstatus ( *nxnativeexternallink)(NXhandle handle, CONSTCHAR* name, CONSTCHAR* externalfile, CONSTCHAR* remotetarget); 
    906907  } NexusFunction, *pNexusFunction; 
    907908  /*---------------------*/ 
  • trunk/src/napi.c

    r1687 r1728  
    13231323} 
    13241324/*------------------------------------------------------------------------*/ 
    1325 NXstatus  NXlinkexternal(NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass,  
    1326                          CONSTCHAR *url){ 
    1327   int status, type = NX_CHAR, length; 
     1325NXstatus  NXlinkexternal(NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass, CONSTCHAR *url){ 
     1326  int status, type = NX_CHAR, length=1024, urllen; 
     1327  char nxurl[1024], exfile[512], expath[512]; 
    13281328  pNexusFunction pFunc = handleToNexusFunc(fid); 
     1329 
     1330  // in HDF5 we support external linking natively 
     1331  if (pFunc->nxnativeexternallink != NULL) { 
     1332        urllen = strlen(url); 
     1333        memset(nxurl, 0, length); 
     1334        if(urllen > length){ 
     1335          urllen = length - 1; 
     1336        } 
     1337        memcpy(nxurl, url, urllen); 
     1338        status = analyzeNapimount(nxurl,exfile,511,expath,511); 
     1339        if(status != NX_OK){ 
     1340           return status; 
     1341        } 
     1342        status = LOCKED_CALL(pFunc->nxnativeexternallink(pFunc->pNexusData, name, exfile, expath)); 
     1343        if(status != NX_OK){ 
     1344           return status; 
     1345        } 
     1346        return NX_OK; 
     1347  } 
     1348 
     1349  NXMDisableErrorReporting(); 
     1350  LOCKED_CALL(pFunc->nxmakegroup(pFunc->pNexusData,name,nxclass)); 
     1351  NXMEnableErrorReporting(); 
    13291352 
    13301353  status = LOCKED_CALL(pFunc->nxopengroup(pFunc->pNexusData,name,nxclass)); 
     
    13431366NXstatus  NXlinkexternaldataset(NXhandle fid, CONSTCHAR *name,  
    13441367                         CONSTCHAR *url){ 
    1345   int status, type = NX_CHAR, length; 
     1368  int status, type = NX_CHAR, length=1024, urllen; 
     1369  char nxurl[1024], exfile[512], expath[512]; 
    13461370  pNexusFunction pFunc = handleToNexusFunc(fid); 
    13471371  int64_t rank = 1; 
    13481372  int64_t dims[1] = {1}; 
    13491373   
     1374  //TODO cut and paste 
     1375 
     1376  // in HDF5 we support external linking natively 
     1377  if (pFunc->nxnativeexternallink != NULL) { 
     1378        urllen = strlen(url); 
     1379        memset(nxurl, 0, length); 
     1380        if(urllen > length){ 
     1381          urllen = length - 1; 
     1382        } 
     1383        memcpy(nxurl, url, urllen); 
     1384        status = analyzeNapimount(nxurl,exfile,511,expath,511); 
     1385        if(status != NX_OK){ 
     1386           return status; 
     1387        } 
     1388        status = LOCKED_CALL(pFunc->nxnativeexternallink(pFunc->pNexusData, name, exfile, expath)); 
     1389        if(status != NX_OK){ 
     1390           return status; 
     1391        } 
     1392        return NX_OK; 
     1393  } 
     1394 
     1395 
    13501396  status = LOCKED_CALL(pFunc->nxmakedata64(pFunc->pNexusData, name, NX_CHAR, rank, dims)); 
    13511397  if(status != NX_OK){ 
  • trunk/src/napi4.c

    r1673 r1728  
    19781978      fHandle->nxinitattrdir=NX4initattrdir; 
    19791979      fHandle->nxprintlink=NX4printlink; 
     1980      fHandle->nxnativeexternallink=NULL; 
    19801981} 
    19811982 
  • trunk/src/napi5.c

    r1687 r1728  
    20122012     } 
    20132013 
    2014      iRet = H5Aclose(pFile->iCurrentA); 
     2014     H5Aclose(pFile->iCurrentA); 
    20152015 
    20162016     killAttVID(pFile,vid); 
     
    20812081  }   
    20822082  
     2083  /* ------------------------------------------------------------------- */ 
     2084 
     2085   NXstatus  NX5nativeexternallink(NXhandle fileid, const char* name, const char* externalfile, const char* remotetarget) 
     2086  { 
     2087     herr_t iRet; 
     2088     pNexusFile5 pFile; 
     2089 
     2090     pFile = NXI5assert(fileid); 
     2091     iRet = H5Lcreate_external(externalfile, remotetarget, pFile->iFID, name, H5P_DEFAULT, H5P_DEFAULT); 
     2092     if (iRet < 0) { 
     2093       NXReportError("ERROR: making external link failed"); 
     2094       return NX_ERROR; 
     2095     } 
     2096     return NX_OK; 
     2097  } 
    20832098  /* ------------------------------------------------------------------- */ 
    20842099 
     
    21472162      fHandle->nxinitattrdir=NX5initattrdir; 
    21482163      fHandle->nxprintlink=NX5printlink; 
     2164      fHandle->nxnativeexternallink=NX5nativeexternallink; 
    21492165} 
    21502166 
  • trunk/src/nxxml.c

    r1673 r1728  
    19681968      fHandle->nxsetnumberformat=NXXsetnumberformat; 
    19691969      fHandle->nxprintlink=NXXprintlink; 
     1970      fHandle->nxnativeexternallink=NULL; 
    19701971} 
    19711972 
Note: See TracChangeset for help on using the changeset viewer.