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