Changeset 1747


Ignore:
Timestamp:
08/11/11 16:13:19 (7 months ago)
Author:
Freddie Akeroyd
Message:

Add optional name syntax checking via NXACC_CHECKNAMESYNTAX flag
refs #301

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/napi.h

    r1742 r1747  
    9797 * \li NXACC_CREATE5 create a NeXus HDF-5 file. 
    9898 * \li NXACC_CREATEXML create a NeXus XML file. 
     99 * \li NXACC_CHECKNAMESYNTAX Check names conform to NeXus allowed characters. 
    99100 */ 
    100101typedef enum {NXACC_READ=1, NXACC_RDWR=2, NXACC_CREATE=3, NXACC_CREATE4=4,  
    101               NXACC_CREATE5=5, NXACC_CREATEXML=6, NXACC_TABLE=8, NXACC_NOSTRIP=128} NXaccess_mode; 
     102              NXACC_CREATE5=5, NXACC_CREATEXML=6, NXACC_TABLE=8, NXACC_NOSTRIP=128, NXACC_CHECKNAMESYNTAX=256 } NXaccess_mode; 
    102103 
    103104/** 
     
    896897  typedef struct { 
    897898        NXhandle pNexusData;    
    898         int stripFlag; 
    899899        NXstatus ( *nxreopen)(NXhandle pOrigHandle, NXhandle* pNewHandle); 
    900900        NXstatus ( *nxclose)(NXhandle* pHandle); 
     
    931931        NXstatus ( *nxnativeinquirefile)(NXhandle handle, char* externalfile, const int filenamelength); 
    932932        NXstatus ( *nxnativeisexternallink)(NXhandle handle, CONSTCHAR* name, char* url, int urllen); 
     933        int stripFlag; 
     934        int checkNameSyntax; 
    933935  } NexusFunction, *pNexusFunction; 
    934936  /*---------------------*/ 
  • trunk/src/napi.c

    r1745 r1747  
    143143 * valid NeXus names 
    144144 */ 
    145 int validNXName(const char* name) 
     145int validNXName(const char* name, int allow_colon) 
    146146{ 
    147147    int i; 
     
    156156             (name[i] >= '0' && name[i] <= '9') || 
    157157             (name[i] == '_') ) 
     158        { 
     159            ; 
     160        } 
     161        else if (allow_colon && name[i] == ':') 
    158162        { 
    159163            ; 
     
    491495      am = (NXaccess)(am & ~NXACC_NOSTRIP); 
    492496    } 
     497    fHandle->checkNameSyntax = 0; 
     498    if (am & NXACC_CHECKNAMESYNTAX) { 
     499        fHandle->checkNameSyntax = 1; 
     500        am = (NXaccess)(am & ~NXACC_CHECKNAMESYNTAX); 
     501    } 
     502 
    493503 
    494504    if (my_am==NXACC_CREATE) { 
     
    685695     char buffer[256]; 
    686696     pNexusFunction pFunc = handleToNexusFunc(fid); 
    687      if ( (nxclass != NULL) && !strncmp("NX", nxclass, 2) && !validNXName(name) ) 
     697     if ( pFunc->checkNameSyntax && (nxclass != NULL) /* && !strncmp("NX", nxclass, 2) */ && !validNXName(name, 0) ) 
    688698     { 
    689699        sprintf(buffer, "ERROR: invalid characters in group name \"%s\"", name); 
     
    822832                                  int rank, int64_t dimensions[]) 
    823833  { 
     834    char buffer[256]; 
    824835    pNexusFunction pFunc = handleToNexusFunc(fid); 
     836    if ( pFunc->checkNameSyntax && !validNXName(name, 0) ) 
     837    { 
     838        sprintf(buffer, "ERROR: invalid characters in dataset name \"%s\"", name); 
     839        NXReportError(buffer); 
     840        return NX_ERROR; 
     841    } 
    825842    return LOCKED_CALL(pFunc->nxmakedata64(pFunc->pNexusData, name, datatype, rank, dimensions));  
    826843  } 
     
    843860                           int rank, int64_t dimensions[], int compress_type, int64_t chunk_size[]) 
    844861  { 
     862    char buffer[256]; 
    845863    pNexusFunction pFunc = handleToNexusFunc(fid);  
     864    if ( pFunc->checkNameSyntax && !validNXName(name, 0) ) 
     865    { 
     866        sprintf(buffer, "ERROR: invalid characters in dataset name \"%s\"", name); 
     867        NXReportError(buffer); 
     868        return NX_ERROR; 
     869    } 
    846870    return LOCKED_CALL(pFunc->nxcompmakedata64 (pFunc->pNexusData, name, datatype, rank, dimensions, compress_type, chunk_size));  
    847871  }  
     
    945969                                  int datalen, int iType) 
    946970  { 
     971    char buffer[256]; 
    947972    pNexusFunction pFunc = handleToNexusFunc(fid); 
    948973    if (datalen > 1 && iType != NX_CHAR) 
     
    951976        return NX_ERROR; 
    952977    } 
    953     else 
    954     { 
    955         return LOCKED_CALL(pFunc->nxputattr(pFunc->pNexusData, name, data, datalen, iType)); 
    956     } 
     978    if ( pFunc->checkNameSyntax && !validNXName(name, 0) ) 
     979    { 
     980        sprintf(buffer, "ERROR: invalid characters in attribute name \"%s\"", name); 
     981        NXReportError(buffer); 
     982        return NX_ERROR; 
     983    } 
     984    return LOCKED_CALL(pFunc->nxputattr(pFunc->pNexusData, name, data, datalen, iType)); 
    957985  } 
    958986 
     
    10011029  NXstatus  NXmakenamedlink (NXhandle fid, CONSTCHAR *newname,  NXlink* sLink) 
    10021030  { 
     1031    char buffer[256]; 
    10031032    pNexusFunction pFunc = handleToNexusFunc(fid); 
     1033    if ( pFunc->checkNameSyntax && !validNXName(newname, 0) ) 
     1034    { 
     1035        sprintf(buffer, "ERROR: invalid characters in link name \"%s\"", newname); 
     1036        NXReportError(buffer); 
     1037        return NX_ERROR; 
     1038    } 
    10041039    return LOCKED_CALL(pFunc->nxmakenamedlink(pFunc->pNexusData, newname, sLink)); 
    10051040  } 
  • trunk/src/nxxml.c

    r1738 r1747  
    3636 
    3737extern  void *NXpData; 
    38 extern int validNXName(const char* name); /* from napi.c */ 
     38extern int validNXName(const char* name, int allow_colon); /* from napi.c */ 
    3939char *nxitrim(char *str); /* from napi.c */ 
    4040 
     
    259259  assert(xmlHandle); 
    260260 
    261   if (!validNXName(name)) 
     261  if (!validNXName(name, 0)) 
    262262  { 
    263263    sprintf(buffer, "ERROR: invalid characters in group name \"%s\"", name); 
     
    428428  xmlHandle = (pXMLNexus)fid; 
    429429  assert(xmlHandle); 
    430   if (!validNXName(name)) 
     430  if (!validNXName(name, 0)) 
    431431  { 
    432432    sprintf(buffer, "ERROR: invalid characters in dataset name \"%s\"", name); 
     
    506506  xmlHandle = (pXMLNexus)fid; 
    507507  assert(xmlHandle); 
    508   if (!validNXName(name)) 
     508  if (!validNXName(name, 0)) 
    509509  { 
    510510    sprintf(buffer, "ERROR: invalid characters in dataset name \"%s\"", name); 
     
    12891289NXstatus  NXXputattr (NXhandle fid, CONSTCHAR *name, void *data,  
    12901290                                   int datalen, int iType){ 
     1291  char buffer[256]; 
    12911292  pXMLNexus xmlHandle = NULL; 
    12921293  mxml_node_t *current = NULL; 
     
    12951296  xmlHandle = (pXMLNexus)fid; 
    12961297  assert(xmlHandle); 
     1298  if (!validNXName(name, 1)) 
     1299  { 
     1300    sprintf(buffer, "ERROR: invalid characters in attribute name \"%s\"", name); 
     1301    NXReportError(buffer); 
     1302    return NX_ERROR; 
     1303  } 
    12971304 
    12981305  current = xmlHandle->stack[xmlHandle->stackPointer].current; 
     
    18961903  xmlHandle = (pXMLNexus)fid; 
    18971904  assert(xmlHandle); 
    1898   if (!validNXName(name)) 
     1905  if (!validNXName(name, 0)) 
    18991906  { 
    19001907    sprintf(buffer, "ERROR: invalid characters in link name \"%s\"", name); 
Note: See TracChangeset for help on using the changeset viewer.