Geant4 Cross Reference |
1 /* 1 2 # <<BEGIN-copyright>> 3 # <<END-copyright>> 4 */ 5 6 #include <stdlib.h> 7 #include <string.h> 8 #include <ctype.h> 9 #ifdef WIN32 10 #include <direct.h> 11 #else 12 #include <unistd.h> 13 #endif 14 15 #include "xDataTOM_private.h" 16 17 #if defined __cplusplus 18 namespace GIDI { 19 using namespace GIDI; 20 #endif 21 22 #define nameValueLength 1024 23 24 static xDataTOM_element *xDataTOM_getLinksElem 25 static int xDataTOM_getLinksElement3( statusMe 26 /* 27 ********************************************** 28 */ 29 char *xDataTOMMisc_getAbsPath( statusMessageRe 30 /* 31 * User must free returned string. 32 */ 33 int n = (int) strlen( fileName ) + 1, nCwd 34 char *absPath, cwd[4 * 1024] = "", *p, *ne 35 36 if( fileName[0] != '/' ) { 37 //if( getcwd( cwd, sizeof( cwd ) + 1 ) 38 //TK modified above line for compiler( 39 if( getcwd( cwd, sizeof( cwd ) ) == NU 40 smr_setReportError2p( smr, xDataTO 41 return( NULL ); 42 } 43 nCwd = (int) strlen( cwd ); 44 n += nCwd + 1; 45 } 46 if( ( absPath = (char *) smr_malloc2( smr, 47 if( fileName[0] != '/' ) { 48 strcpy( absPath, cwd ); 49 strcat( absPath, "/" ); 50 strcat( absPath, fileName ); } 51 else { 52 strcpy( absPath, fileName ); 53 } 54 55 while( 1 ) { 56 if( ( needle = strstr( absPath, "/./" 57 p = needle; 58 for( needle += 2; *needle; p++, needle 59 *p = 0; 60 } // Loop checking, 11.06.2015, T. Koi 61 62 while( 1 ) { 63 if( ( needle = strstr( absPath, "/../" 64 p = needle - 1; 65 while( ( p > absPath ) && ( *p != '/' 66 if( *p != '/' ) break; 67 if( p == absPath ) break; 68 for( needle += 3; *needle; p++, needle 69 *p = 0; 70 } // Loop checking, 11.06.2015, T. Koi 71 return( absPath ); 72 } 73 /* 74 ********************************************** 75 */ 76 int xDataTOM_setMessageError_ReturnInt( int va 77 const char *fmt, ... ) { 78 79 va_list args; 80 81 va_start( args, fmt ); 82 smr_setReportError( smr, userInterface, pa 83 va_end( args ); 84 return( value ); 85 } 86 /* 87 ********************************************** 88 */ 89 xDataTOM_element *xDataTOM_getLinksElement( st 90 91 xDataTOM_element *linkedElement = NULL; 92 93 if( link[0] == '/' ) { 94 for( linkedElement = element; linkedEl 95 linkedElement = xDataTOM_getLinksEleme 96 else { 97 smr_setReportError2( smr, smr_unknownI 98 } 99 return( linkedElement ); 100 } 101 /* 102 ********************************************** 103 */ 104 static xDataTOM_element *xDataTOM_getLinksElem 105 106 int n = (int) strlen( link ); 107 char const *slash = strchr( link, '/' ), * 108 char name[nameValueLength], value[nameValu 109 xDataTOM_element *child; 110 111 if( bracket != NULL ) n = (int) ( bracket 112 if( slash != NULL ) { 113 if( (int) ( slash - link ) < n ) { 114 n = (int) ( slash - link ); 115 bracket = NULL; 116 } 117 } 118 for( child = element->children; child != N 119 if( strncmp( link, child->name, n ) == 120 if( bracket != NULL ) { 121 if( bracket[1] != '@' ) { 122 smr_setReportError2( smr, 123 return( NULL ); 124 } 125 if( xDataTOM_getLinksElement3( 126 if( ( attributesValue = xDataT 127 if( strcmp( value, attributesV 128 } 129 if( slash == NULL ) return( child 130 return( xDataTOM_getLinksElement2( 131 } 132 } 133 return( NULL ); 134 } 135 /* 136 ********************************************** 137 */ 138 static int xDataTOM_getLinksElement3( statusMe 139 140 int n; 141 char const *equal = strchr( nameValue, '=' 142 char quote = '\''; 143 144 if( equal == NULL ) { 145 smr_setReportError2( smr, smr_unknownI 146 return( 1 ); 147 } 148 n = (int) ( equal - nameValue ); 149 if( n >= ( nameValueLength - 1 ) ) { 150 smr_setReportError2( smr, smr_unknownI 151 return( 1 ); 152 } 153 strncpy( name, nameValue, n ); 154 name[n] = 0; 155 156 equal++; 157 if( *equal != quote ) quote = '"'; 158 if( *equal != quote ) { 159 smr_setReportError2( smr, smr_unknownI 160 return( 1 ); 161 } 162 163 equal++; 164 p = strchr( equal, quote ); 165 if( p == NULL ) { 166 smr_setReportError2( smr, smr_unknownI 167 return( 1 ); 168 } 169 170 n = (int) ( p - equal ); 171 if( n >= ( nameValueLength - 1 ) ) { 172 smr_setReportError2( smr, smr_unknownI 173 return( 1 ); 174 } 175 strncpy( value, equal, n ); 176 value[n] = 0; 177 178 return( 0 ); 179 } 180 181 #if defined __cplusplus 182 } 183 #endif 184