1 /*  This file is part of MED.
2  *
3  *  COPYRIGHT (C) 1999 - 2019  EDF R&D, CEA/DEN
4  *  MED is free software: you can redistribute it and/or modify
5  *  it under the terms of the GNU Lesser General Public License as published by
6  *  the Free Software Foundation, either version 3 of the License, or
7  *  (at your option) any later version.
8  *
9  *  MED is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU Lesser General Public License for more details.
13  *
14  *  You should have received a copy of the GNU Lesser General Public License
15  *  along with MED.  If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 
19 #include <med.h>
20 #include <med_config.h>
21 #include <med_outils.h>
22 #include <hdf5.h>
23 #include <string.h>
24 
_MEDcheckAttributeStringFunc(med_idt id,const char * lname,const H5L_info_t * linfo,med_string_itdatas * data)25 med_err _MEDcheckAttributeStringFunc(med_idt id,const char *lname, const H5L_info_t *linfo, med_string_itdatas  *data) {
26 
27   med_err  _ret=-1;
28   H5O_info_t oinfo;
29 
30 
31 #ifdef _DEBUG_
32   SSCRUTE(lname);
33 #endif
34 
35   if (!strcmp(lname,".")) return 0;
36 
37   switch ( (*linfo).type ) {
38 
39   case H5L_TYPE_SOFT:
40     oinfo.type=H5G_LINK;
41     break;
42   case H5L_TYPE_HARD:
43     if ( H5Oget_info_by_name( id, lname, &oinfo, H5P_DEFAULT ) <0) {
44       MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name");
45       SSCRUTE(lname);
46     }
47     break;
48   case H5L_TYPE_EXTERNAL:
49   case H5L_TYPE_ERROR:
50   default:
51     MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_HDFTYPE,lname);
52     ISCRUTE_int((*linfo).type);
53     goto ERROR;
54     break;
55  }
56 
57   switch ( oinfo.type ) {
58 
59   case H5G_GROUP:
60 
61 
62     if ( _MEDattributeStringRdByName(id, lname, data->attname,
63 				     data->attsize, data->attval) < 0 ) {
64 	MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_ATTRIBUTE, MED_ERR_NAME_MSG );
65 	SSCRUTE(data->attname);SSCRUTE(data->attval); SSCRUTE(data->attvalprec);goto ERROR;
66       }
67 
68  /*    ISCRUTE_id(id); */
69 /*     SSCRUTE(lname); */
70 /*     SSCRUTE(data->attval); */
71 
72     if (strlen(data->attvalprec)) {
73       if ( strcmp(data->attval,data->attvalprec) ) {
74 	MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ATTRIBUTE,MED_ERR_NAME_MSG);
75 	SSCRUTE(data->attname);SSCRUTE(data->attval);SSCRUTE(data->attvalprec);
76 	goto ERROR;
77       }
78     } else {
79       strcpy(data->attvalprec,data->attval);
80     }
81 
82     break;
83 
84   case H5G_DATASET:
85   case H5G_LINK:
86     MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_HDFTYPE,lname);
87     goto ERROR;
88 
89     break;
90   case H5G_TYPE:
91   default:
92     MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_HDFTYPE,lname);
93     goto ERROR;
94   }
95   _ret = 0;
96 
97  ERROR:
98   return _ret;
99 }
100 
101