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