Salome HOME
merge from master
[tools/sat_salome.git] / products / patches / med-4.0.0_unicode.patch
1 diff -Naur med-4.0.0_orig/CMakeLists.txt med-4.0.0_modif/CMakeLists.txt
2 --- med-4.0.0_orig/CMakeLists.txt       2018-12-10 20:41:59.000000000 +0300
3 +++ med-4.0.0_modif/CMakeLists.txt      2019-02-26 19:14:45.310698300 +0300
4 @@ -35,6 +35,7 @@
5  OPTION (MEDFILE_BUILD_STATIC_LIBS "Build MED-file static libraries" OFF)
6  OPTION (MEDFILE_INSTALL_DOC "Install pre-built documentation" ON)
7  OPTION (MEDFILE_BUILD_PYTHON "Build Python bindings (needs SWIG)" OFF)
8 +OPTION (MEDFILE_USE_UNICODE "Use unicode filenames" ON)
9  
10  #-- Add an Option to toggle the generation of the API documentation
11  #-- Embedded documentation contains patched doxygen generated fortran documention
12 @@ -50,6 +51,10 @@
13    ADD_SUBDIRECTORY(doc)
14  endif()
15  
16 +IF(MEDFILE_USE_UNICODE)
17 +  ADD_DEFINITIONS(-DUNICODE)
18 +ENDIF()
19 +
20  # Option checking.
21  IF(MEDFILE_BUILD_SHARED_LIBS AND MEDFILE_BUILD_STATIC_LIBS)
22    MESSAGE(FATAL_ERROR "You can not build shared and static libraries at the same time! ")
23 diff -Naur med-4.0.0_orig/include/med_misc.h med-4.0.0_modif/include/med_misc.h
24 --- med-4.0.0_orig/include/med_misc.h   2018-12-10 13:17:52.000000000 +0300
25 +++ med-4.0.0_modif/include/med_misc.h  2019-02-26 18:05:01.054155600 +0300
26 @@ -149,6 +149,9 @@
27                                        med_geometry_type * const smeshgeotype,
28                                        char * const              smeshgeotypename,
29                                        med_int * const           smeshnentity);
30 +extern MEDC_EXPORT
31 +int med_access(const char * const fichier, int mode);
32 +
33  
34  /* Gestion des messages d'erreur */
35  /* extern MEDC_EXPORT */
36 diff -Naur med-4.0.0_orig/src/2.3.6/ci/MEDmonter.c med-4.0.0_modif/src/2.3.6/ci/MEDmonter.c
37 --- med-4.0.0_orig/src/2.3.6/ci/MEDmonter.c     2018-12-10 13:17:55.000000000 +0300
38 +++ med-4.0.0_modif/src/2.3.6/ci/MEDmonter.c    2019-02-26 18:15:57.706349300 +0300
39 @@ -47,7 +47,7 @@
40     * On regarde si le fichier de nom "acces" existe
41     * Si ce n'est pas le cas => erreur
42     */
43 -  if (access(acces,F_OK))
44 +  if (med_access(acces,F_OK))
45      return -1;
46  
47    if ( (MED_MODE_ACCES = _MEDmodeAcces(fid) ) == MED_UNDEF_MODE_ACCES ) {
48 diff -Naur med-4.0.0_orig/src/2.3.6/ci/MEDouvrir.c med-4.0.0_modif/src/2.3.6/ci/MEDouvrir.c
49 --- med-4.0.0_orig/src/2.3.6/ci/MEDouvrir.c     2018-12-10 13:17:55.000000000 +0300
50 +++ med-4.0.0_modif/src/2.3.6/ci/MEDouvrir.c    2019-02-26 18:16:21.655051700 +0300
51 @@ -49,7 +49,7 @@
52    switch(mode_acces)
53      {
54      case MED_LECTURE :
55 -      if (access(nom,F_OK)) {
56 +      if (med_access(nom,F_OK)) {
57  
58         MESSAGE("Impossible d'accĂ©der aux fichier :");
59         SSCRUTE(nom);
60 @@ -62,7 +62,7 @@
61        break;
62  
63      case MED_LECTURE_ECRITURE : 
64 -      if (access(nom,F_OK)) {
65 +      if (med_access(nom,F_OK)) {
66           if ((fid = _MEDfichierCreer(nom,mode_acces)) < 0)
67             return -1;
68        } else 
69 @@ -71,7 +71,7 @@
70        break;
71  
72      case MED_LECTURE_AJOUT    :
73 -      if (access(nom,F_OK))
74 +      if (med_access(nom,F_OK))
75         {
76           if ((fid = _MEDfichierCreer(nom,mode_acces)) < 0)
77             return -1;
78 diff -Naur med-4.0.0_orig/src/ci/MEDfileExist.c med-4.0.0_modif/src/ci/MEDfileExist.c
79 --- med-4.0.0_orig/src/ci/MEDfileExist.c        2017-07-10 17:25:29.000000000 +0300
80 +++ med-4.0.0_modif/src/ci/MEDfileExist.c       2019-02-26 18:16:44.260571900 +0300
81 @@ -74,7 +74,7 @@
82    /*
83     * On ouvre le fichier MED sous HDF
84     */ 
85 -  if ( access(filename,F_OK) ) {
86 +  if ( med_access(filename,F_OK) ) {
87      
88      *fileexist = MED_FALSE;
89      *accessok  = MED_FALSE;
90 @@ -107,13 +107,13 @@
91      // Join drive letter and directory name:
92      _makepath(_dirname, _drive, _direc, NULL, NULL);
93  #endif
94 -    if ( access(_dirname,_mode) )  *accessok = MED_FALSE; else *accessok = MED_TRUE;
95 +    if ( med_access(_dirname,_mode) )  *accessok = MED_FALSE; else *accessok = MED_TRUE;
96      
97    } else {
98      
99      *fileexist = MED_TRUE;
100      (accessmode!=MED_ACC_RDONLY) && (_mode=_mode|W_OK);
101 -    if ( access(filename,_mode) ) *accessok = MED_FALSE; else *accessok = MED_TRUE;
102 +    if ( med_access(filename,_mode) ) *accessok = MED_FALSE; else *accessok = MED_TRUE;
103      
104    }
105    
106 diff -Naur med-4.0.0_orig/src/ci/MEDfileVersionOpen.c med-4.0.0_modif/src/ci/MEDfileVersionOpen.c
107 --- med-4.0.0_orig/src/ci/MEDfileVersionOpen.c  2018-12-10 13:17:55.000000000 +0300
108 +++ med-4.0.0_modif/src/ci/MEDfileVersionOpen.c 2019-02-26 18:17:50.884971000 +0300
109 @@ -62,7 +62,7 @@
110    switch(accessmode)
111      {
112      case MED_ACC_RDONLY :
113 -      if (access(filename,F_OK)) {
114 +      if (med_access(filename,F_OK)) {
115         MED_ERR_(_ret,MED_ERR_EXIST,MED_ERR_FILE,filename);
116         goto ERROR;
117  
118 @@ -75,7 +75,7 @@
119        break;
120  
121      case MED_ACC_RDWR :
122 -      if (access(filename,F_OK)) {
123 +      if (med_access(filename,F_OK)) {
124         if ((_fid = _MEDfileCreate((char*) filename,accessmode,major,minor,release)) < 0) {
125           MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_FILE,filename);
126           goto ERROR;
127 @@ -88,7 +88,7 @@
128        break;
129  
130      case MED_ACC_RDEXT :
131 -      if (access(filename,F_OK))
132 +      if (med_access(filename,F_OK))
133         {
134           if ((_fid = _MEDfileCreate((char*) filename,accessmode,major,minor,release)) < 0) {
135             MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_FILE,filename);
136 diff -Naur med-4.0.0_orig/src/ci/MEDparFileOpen.c med-4.0.0_modif/src/ci/MEDparFileOpen.c
137 --- med-4.0.0_orig/src/ci/MEDparFileOpen.c      2018-12-10 13:17:53.000000000 +0300
138 +++ med-4.0.0_modif/src/ci/MEDparFileOpen.c     2019-02-26 18:18:10.362058500 +0300
139 @@ -62,7 +62,7 @@
140    switch(accessmode)
141      {
142      case MED_ACC_RDONLY :
143 -      if (access(filename,F_OK)) {
144 +      if (med_access(filename,F_OK)) {
145         MED_ERR_(_fid,MED_ERR_DOESNTEXIST,MED_ERR_FILE,filename);
146         goto ERROR;
147  
148 @@ -75,7 +75,7 @@
149        break;
150  
151      case MED_ACC_RDWR :
152 -      if (access(filename,F_OK)) {
153 +      if (med_access(filename,F_OK)) {
154         if ((_fid = _MEDparFileCreate((char*) filename,accessmode, comm, info)) < 0) {
155           MED_ERR_(_fid,MED_ERR_CREATE,MED_ERR_FILE,filename);
156           goto ERROR;
157 @@ -88,7 +88,7 @@
158        break;
159  
160      case MED_ACC_RDEXT :
161 -      if (access(filename,F_OK))
162 +      if (med_access(filename,F_OK))
163         {
164           if ((_fid = _MEDparFileCreate((char*) filename,accessmode, comm, info)) < 0) {
165             MED_ERR_(_fid,MED_ERR_CREATE,MED_ERR_FILE,filename);
166 diff -Naur med-4.0.0_orig/src/ci/_MEDfileObjectsMount236.c med-4.0.0_modif/src/ci/_MEDfileObjectsMount236.c
167 --- med-4.0.0_orig/src/ci/_MEDfileObjectsMount236.c     2018-12-10 13:17:54.000000000 +0300
168 +++ med-4.0.0_modif/src/ci/_MEDfileObjectsMount236.c    2019-02-26 18:18:20.374401600 +0300
169 @@ -73,7 +73,7 @@
170    /*
171     * does the file exist ?
172     */
173 -  if (access(mountfilename,F_OK)) {
174 +  if (med_access(mountfilename,F_OK)) {
175      MED_ERR_(_ret,MED_ERR_EXIST,MED_ERR_FILE,mountfilename);
176      goto ERROR;
177    }
178 diff -Naur med-4.0.0_orig/src/ci/_MEDfileObjectsMount30.c med-4.0.0_modif/src/ci/_MEDfileObjectsMount30.c
179 --- med-4.0.0_orig/src/ci/_MEDfileObjectsMount30.c      2018-12-10 13:17:55.000000000 +0300
180 +++ med-4.0.0_modif/src/ci/_MEDfileObjectsMount30.c     2019-02-26 18:18:29.115797700 +0300
181 @@ -86,7 +86,7 @@
182      _id=chfid;
183    } else {
184      /* does the file exist ? */
185 -    if (access(mountfilename,F_OK)) {
186 +    if (med_access(mountfilename,F_OK)) {
187        MED_ERR_(_ret,MED_ERR_EXIST,MED_ERR_FILE,mountfilename);
188        goto ERROR;
189      }
190 diff -Naur med-4.0.0_orig/src/hdfi/_MEDmemFileOpen.c med-4.0.0_modif/src/hdfi/_MEDmemFileOpen.c
191 --- med-4.0.0_orig/src/hdfi/_MEDmemFileOpen.c   2017-07-26 16:45:49.000000000 +0300
192 +++ med-4.0.0_modif/src/hdfi/_MEDmemFileOpen.c  2019-02-26 18:18:40.606423800 +0300
193 @@ -421,7 +421,7 @@
194                                             (void *)(memfile)};
195    memfile->flags = accessmode;
196  
197 -  file_exist=!access(filename,F_OK);
198 +  file_exist=!med_access(filename,F_OK);
199  
200    /*
201     * On inhibe le gestionnaire d'erreur HDF 5
202 diff -Naur med-4.0.0_orig/src/misc/CMakeLists.txt med-4.0.0_modif/src/misc/CMakeLists.txt
203 --- med-4.0.0_orig/src/misc/CMakeLists.txt      2017-11-06 19:19:17.000000000 +0300
204 +++ med-4.0.0_modif/src/misc/CMakeLists.txt     2019-02-26 19:19:26.331544200 +0300
205 @@ -1,4 +1,5 @@
206  SET(misc_SOURCES
207 +  MEDaccess.c 
208    MEDsetFilter.c
209    MEDcstring.c
210    MED1cstring.c
211 diff -Naur med-4.0.0_orig/src/misc/MEDaccess.c med-4.0.0_modif/src/misc/MEDaccess.c
212 --- med-4.0.0_orig/src/misc/MEDaccess.c 1970-01-01 03:00:00.000000000 +0300
213 +++ med-4.0.0_modif/src/misc/MEDaccess.c        2019-03-07 15:15:56.880252400 +0300
214 @@ -0,0 +1,46 @@
215 +/*  This file is part of MED.
216 + *
217 + *  COPYRIGHT (C) 1999 - 2019  EDF R&D, CEA/DEN
218 + *  MED is free software: you can redistribute it and/or modify
219 + *  it under the terms of the GNU Lesser General Public License as published by
220 + *  the Free Software Foundation, either version 3 of the License, or
221 + *  (at your option) any later version.
222 + *
223 + *  MED is distributed in the hope that it will be useful,
224 + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
225 + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
226 + *  GNU Lesser General Public License for more details.
227 + *
228 + *  You should have received a copy of the GNU Lesser General Public License
229 + *  along with MED.  If not, see <http://www.gnu.org/licenses/>.
230 + */
231 +
232 +#if defined(WIN32)
233 +#include <windows.h>
234 +#endif
235 +
236 +/******************************************************************************
237 + *
238 + * - Nom de la fonction : med_access
239 + * - Description : 
240 + * - Parametres :
241 + *     - fichier    (IN) : nom du fichier.
242 + *     - mode       (IN) : 
243 + *
244 + ******************************************************************************/
245 +int med_access(const char * const fichier, int mode) {
246 +  int ret;
247 +#if defined(WIN32) && defined(UNICODE)
248 +  int size_needed;
249 +  wchar_t* afilename = NULL;
250 +  size_needed = MultiByteToWideChar(CP_UTF8, 0, fichier, strlen(fichier), NULL, 0);
251 +  afilename = malloc((size_needed+1)*sizeof(wchar_t));
252 +  MultiByteToWideChar(CP_UTF8, 0, fichier, strlen(fichier), afilename, size_needed);
253 +  afilename[size_needed] = '\0';
254 +  ret = _waccess(afilename, mode);
255 +  free(afilename);
256 +#else
257 +  ret = access(fichier, mode);
258 +#endif 
259 +  return ret;
260 +}