00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "med_config.h"
00020 #include "med_outils.h"
00021 #include <string.h>
00022
00023 #include <2.3.6/med23v30.h>
00024 #include <2.3.6/med23v30_proto.h>
00025 #include "2.3.6/med23v30_misc.h"
00026
00027 #include "MAJ_236_300.h"
00028
00029 extern MEDC_EXPORT
00030 med_err _MEDdatasetStringLire(med_idt pere,char *nom,char *val);
00031
00032 int MAJ_236_300_string_datasets(med_idt fid,
00033 const char * const absdatagrouppath,
00034 const char * const datasetname,
00035 int isubstringsize,
00036 int fsubstringsize,
00037 int nsubstring) {
00038
00039 med_err _ret = -1;
00040 char * _itmpbuff = NULL;
00041 char * _ftmpbuff = NULL;
00042 med_idt _datagroup = 0;
00043 med_filter _filter = MED_FILTER_INIT;
00044 char _pathi[MED_TAILLE_MAA+MED_NAME_SIZE+1+2*MED_TAILLE_NOM_ENTITE+1+3+1]="";
00045 int _itmplen = 0;
00046 med_internal_type _medinternaltype=MED_INTERNAL_UNDEF;
00047
00048 strcpy(_pathi,absdatagrouppath);
00049 _itmplen=strlen(_pathi);
00050
00051
00052
00053 if ((_datagroup = _MEDdatagroupOuvrir(fid,_pathi)) < 0) {
00054 MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_pathi);
00055 goto ERROR;
00056 }
00057
00058 _pathi[_itmplen]='/';
00059 strcpy(&_pathi[_itmplen+1],datasetname);
00060
00061
00062
00063
00064 _itmpbuff = (char *) malloc(nsubstring*sizeof(char)*isubstringsize+1);
00065
00066 if ( _MEDdatasetStringLire(_datagroup,(char*)datasetname,_itmpbuff) < 0) {
00067 MED_ERR_(_ret,MED_ERR_READ,MED_ERR_DATASET,_pathi);
00068 goto ERROR;
00069
00070 };
00071
00072
00073 if ( _MEDselectAllEntitiesNoI(fid, nsubstring, 1, 1,
00074 MED_ALL_CONSTITUENT, &_filter) < 0) {
00075 MED_ERR_(_ret,MED_ERR_SELECT,MED_ERR_FILTER,MED_ERR_MODE_MSG);
00076 MESSAGE("MED_NO_INTERLACE, MED_NO_PROFILE, MED_NO_FILTER");
00077 goto ERROR;
00078 };
00079
00080 if ( isubstringsize != fsubstringsize ) {
00081 _ftmpbuff = (char *) malloc(nsubstring*sizeof(char)*fsubstringsize+1);
00082 _MED23v30stringConvert(_ftmpbuff,fsubstringsize,_itmpbuff,isubstringsize,nsubstring);
00083 } else
00084 _ftmpbuff = _itmpbuff;
00085
00086
00087 switch(fsubstringsize)
00088 {
00089 case MED_NAME_SIZE:
00090 _medinternaltype=MED_INTERNAL_NAME;
00091 break;
00092 case MED_SNAME_SIZE:
00093 _medinternaltype=MED_INTERNAL_SNAME;
00094 break;
00095 case MED_LNAME_SIZE:
00096 _medinternaltype=MED_INTERNAL_LNAME;
00097 break;
00098 case MED_IDENT_SIZE:
00099 _medinternaltype=MED_INTERNAL_IDENT;
00100 break;
00101 default:
00102 MED_ERR_EXIT_IF(1,MED_ERR_RANGE,MED_ERR_PARAMETER,"fsubstringsize");
00103
00104 }
00105
00106
00107
00108
00109
00110
00111
00112
00113 if ( _MEDdatasetWr(_datagroup,datasetname,_medinternaltype,&_filter,_ftmpbuff) < 0) {
00114 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_DATASET,datasetname);
00115 goto ERROR;
00116 }
00117
00118 MEDfilterClose(&_filter);
00119
00120 if (_datagroup>0) {
00121 if (_MEDdatagroupFermer(_datagroup) < 0) {
00122 _pathi[_itmplen]='\0';
00123 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_pathi);
00124 goto ERROR;
00125 } else {
00126 _datagroup=0;
00127 }
00128 }
00129
00130
00131
00132
00133
00134 if ( _MEDattributeNumWrByName(fid,_pathi,MED_NOM_NBR,MED_INTERNAL_INT,
00135 (const unsigned char * const) &nsubstring ) < 0 ) {
00136 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_NBR);
00137 SSCRUTE(_pathi);
00138 goto ERROR;
00139 }
00140
00141 _ret=0;
00142 ERROR:
00143
00144 if (_datagroup>0)
00145 if (_MEDdatagroupFermer(_datagroup) < 0) {
00146 _pathi[_itmplen]='\0';
00147 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_pathi);
00148 }
00149
00150 if (_itmpbuff ) {free(_itmpbuff);}
00151
00152 if ( isubstringsize != fsubstringsize ) {
00153 if (_ftmpbuff ) { free(_ftmpbuff);};
00154 }
00155
00156 return (int) _ret;
00157 }