File: fix_C_fortran_interface_PR882.patch

package info (click to toggle)
libcgns 4.5.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 15,136 kB
  • sloc: ansic: 115,975; f90: 29,757; tcl: 9,199; sh: 6,658; makefile: 1,800; fortran: 346; csh: 152
file content (224 lines) | stat: -rw-r--r-- 9,566 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
Index: libcgns/src/adfh/ADFH.c
===================================================================
--- libcgns.orig/src/adfh/ADFH.c	2025-10-20 17:17:02.704437037 +0200
+++ libcgns/src/adfh/ADFH.c	2025-10-20 17:17:02.702405144 +0200
@@ -1477,6 +1477,7 @@
       return;
     }
 
+    /* Integer values - passed by value (encoded as pointer) */
     if (option == ADFH_CONFIG_COMPRESS) {
         int compress = (int)((size_t)value);
         if (compress < 0)
@@ -1495,16 +1496,11 @@
         core_vfd_backing_store = (hbool_t)((size_t)value);
         set_error(NO_ERROR, err);
     }
+    /* size_t values - passed by value (encoded as pointer) */
     else if (option == ADFH_CONFIG_CORE_INCR) {
         core_vfd_increment = (size_t)value;
         set_error(NO_ERROR, err);
     }
-    else if (option == ADFH_CONFIG_ALIGNMENT) {
-      const size_t* val = (const size_t*)value; 
-      h5pset_alignment_threshold = (hsize_t)(val[0]);
-      h5pset_alignment_alignment = (hsize_t)(val[1]);
-      set_error(NO_ERROR, err);
-    }
     else if (option == ADFH_CONFIG_MD_BLOCK_SIZE) {
       h5pset_meta_block_size_size = (hsize_t)value;
       set_error(NO_ERROR, err);
@@ -1521,6 +1517,13 @@
       h5pset_elink_file_cache_size_size = (unsigned)((size_t)value);
       set_error(NO_ERROR, err);
     }
+    /* Pointer values - passed by reference */
+    else if (option == ADFH_CONFIG_ALIGNMENT) {
+      const size_t* val = (const size_t*)value;
+      h5pset_alignment_threshold = (hsize_t)(val[0]);
+      h5pset_alignment_alignment = (hsize_t)(val[1]);
+      set_error(NO_ERROR, err);
+    }
 #if CG_BUILD_PARALLEL
     else if (option == ADFH_CONFIG_MPI_COMM) {
       MPI_Comm* comm = (MPI_Comm*)value;
Index: libcgns/src/cg_ftoc.c
===================================================================
--- libcgns.orig/src/cg_ftoc.c	2025-10-20 17:17:02.704437037 +0200
+++ libcgns/src/cg_ftoc.c	2025-10-20 17:17:34.869967565 +0200
@@ -119,44 +119,57 @@
 
 /*-----------------------------------------------------------------------*/
 
-CGNSDLL void cg_configure_c_ptr(cgint_f *what, void *value, cgint_f *ier)
+CGNSDLL void cg_configure_c_ptr(int *what, void *value, cgint_f *ier)
 {
-  /* CHARACTERS */
-  if( (int)*what == CG_CONFIG_SET_PATH ||
-      (int)*what == CG_CONFIG_ADD_PATH) {
-    *ier = (cgint_f)cg_configure((int)*what, value);
-  } else if( (int)*what == CG_CONFIG_ERROR) {
+  /* CHARACTERS/STRINGS - pass pointer directly */
+  if( *what == CG_CONFIG_SET_PATH ||
+      *what == CG_CONFIG_ADD_PATH) {
+    *ier = (cgint_f)cg_configure(*what, value);
+
+  /* ERROR HANDLER - not supported via C_PTR interface */
+  } else if( *what == CG_CONFIG_ERROR) {
     *ier = (cgint_f)CG_ERROR;
 
   /* MPI COMMUNICATOR */
 #if CG_BUILD_PARALLEL
-  } else if( (int)*what == CG_CONFIG_HDF5_MPI_COMM ) {
+  } else if( *what == CG_CONFIG_HDF5_MPI_COMM ) {
     MPI_Fint F_comm = *(MPI_Fint *)value;
     MPI_Comm C_comm = MPI_Comm_f2c(F_comm);
-    *ier = (cgint_f)cg_configure((int)*what, &C_comm);
+    *ier = (cgint_f)cg_configure(*what, &C_comm);
 #endif
 
-  /* RIND */
-  } else if( (int)*what == CG_CONFIG_RIND_INDEX) {
+  /* RIND INDEX - special handling for enum values */
+  } else if( *what == CG_CONFIG_RIND_INDEX) {
     if(*(int*)value == 0) {
-      *ier = (cgint_f)cg_configure((int)*what, CG_CONFIG_RIND_ZERO);
+      *ier = (cgint_f)cg_configure(*what, CG_CONFIG_RIND_ZERO);
     } else if(*(int*)value == 1) {
-      *ier = (cgint_f)cg_configure((int)*what, CG_CONFIG_RIND_CORE);
+      *ier = (cgint_f)cg_configure(*what, CG_CONFIG_RIND_CORE);
     } else {
       *ier = (cgint_f)CG_ERROR;
       return;
     }
 
-  /* EVERYTHING ELSE */
+  /* SIZE_T VALUES - cast size_t value as pointer using intptr_t for clarity and portability */
+  } else if( *what == CG_CONFIG_HDF5_DISKLESS_INCR ||
+             *what == CG_CONFIG_HDF5_MD_BLOCK_SIZE ||
+             *what == CG_CONFIG_HDF5_BUFFER ||
+             *what == CG_CONFIG_HDF5_SIEVE_BUF_SIZE ||
+             *what == CG_CONFIG_HDF5_ELINK_CACHE_SIZE ) {
+    /* For these options, the value is a size_t that needs to be passed by value (as pointer) */
+    *ier = (cgint_f)cg_configure(*what, (void *)(intptr_t)(*(size_t *)value));
+
+  /* INTEGER VALUES - cast int to intptr_t then to pointer */
   } else {
-    *ier = (cgint_f)cg_configure((int)*what, (void *)(*(size_t *)value));
+    /* For most other options (FILE_TYPE, COMPRESS, HDF5 flags, etc.),
+       the value is an int that gets cast to intptr_t then to pointer */
+    *ier = (cgint_f)cg_configure(*what, (void *)(intptr_t)(*(int *)value));
   }
 }
 
-CGNSDLL void cg_configure_c_funptr(cgint_f *what, void *value, cgint_f *ier)
+CGNSDLL void cg_configure_c_funptr(int *what, void *value, cgint_f *ier)
 {
-  if ( (int)*what == CG_CONFIG_ERROR ) {
-      *ier = (cgint_f)cg_configure((int)*what, value);
+  if ( *what == CG_CONFIG_ERROR ) {
+      *ier = (cgint_f)cg_configure(*what, value);
   } else {
       *ier = (cgint_f)CG_ERROR;
   }
Index: libcgns/src/cgns_f.F90
===================================================================
--- libcgns.orig/src/cgns_f.F90	2025-10-20 17:17:02.704437037 +0200
+++ libcgns/src/cgns_f.F90	2025-10-20 17:17:02.704020163 +0200
@@ -225,31 +225,32 @@
 !* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
 !*     Configuration options (found in cgnslib.h)                      *
 !* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
-  INTEGER, PARAMETER :: CG_CONFIG_ERROR      = 1
-  INTEGER, PARAMETER :: CG_CONFIG_COMPRESS   = 2
-  INTEGER, PARAMETER :: CG_CONFIG_SET_PATH   = 3
-  INTEGER, PARAMETER :: CG_CONFIG_ADD_PATH   = 4
-  INTEGER, PARAMETER :: CG_CONFIG_FILE_TYPE  = 5
-  INTEGER, PARAMETER :: CG_CONFIG_RIND_INDEX = 6
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_ERROR      = 1
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_COMPRESS   = 2
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_SET_PATH   = 3
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_ADD_PATH   = 4
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_FILE_TYPE  = 5
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_RIND_INDEX = 6
 
 ! Fortran length of names for variables is limited to 31 characters
-  INTEGER, PARAMETER :: CG_CONFIG_HDF5_COMPRESS         = 201
-  INTEGER, PARAMETER :: CG_CONFIG_HDF5_MPI_COMM         = 202
-  INTEGER, PARAMETER :: CG_CONFIG_HDF5_DISKLESS         = 203
-  INTEGER, PARAMETER :: CG_CONFIG_HDF5_DISKLESS_INCR    = 204
-  INTEGER, PARAMETER :: CG_CONFIG_HDF5_DISKLESS_WRITE   = 205
-  INTEGER, PARAMETER :: CG_CONFIG_HDF5_ALIGNMENT        = 206
-  INTEGER, PARAMETER :: CG_CONFIG_HDF5_MD_BLOCK_SIZE    = 207
-  INTEGER, PARAMETER :: CG_CONFIG_HDF5_BUFFER           = 208
-  INTEGER, PARAMETER :: CG_CONFIG_HDF5_SIEVE_BUF_SIZE   = 209
-  INTEGER, PARAMETER :: CG_CONFIG_HDF5_ELINK_CACHE_SIZE = 210
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_HDF5_COMPRESS         = 201
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_HDF5_MPI_COMM         = 202
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_HDF5_DISKLESS         = 203
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_HDF5_DISKLESS_INCR    = 204
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_HDF5_DISKLESS_WRITE   = 205
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_HDF5_ALIGNMENT        = 206
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_HDF5_MD_BLOCK_SIZE    = 207
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_HDF5_BUFFER           = 208
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_HDF5_SIEVE_BUF_SIZE   = 209
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_HDF5_ELINK_CACHE_SIZE = 210
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_GET_MAXIMUM_FILES     = 401
 
 
-  INTEGER, PARAMETER :: CG_CONFIG_RESET = 1000
-  INTEGER, PARAMETER :: CG_CONFIG_RESET_HDF5 = 1
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_RESET = 1000
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_RESET_HDF5 = 1
 
-  INTEGER, PARAMETER :: CG_CONFIG_RIND_ZERO = 0
-  INTEGER, PARAMETER :: CG_CONFIG_RIND_CORE = 1
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_RIND_ZERO = 0
+  INTEGER(C_INT), PARAMETER :: CG_CONFIG_RIND_CORE = 1
 
 !DEC$if defined(BUILD_CGNS_DLL)
 !DEC$ATTRIBUTES DLLEXPORT :: CG_CONFIG_ERROR
@@ -6493,17 +6494,17 @@
 !DEC$ATTRIBUTES DLLEXPORT :: cg_configure_ptr
 !DEC$endif
   SUBROUTINE cg_configure_ptr(what, value, ier)
-    USE ISO_C_BINDING, ONLY : C_PTR
+    USE ISO_C_BINDING, ONLY : C_PTR, C_INT
     IMPLICIT NONE
-    INTEGER, INTENT(IN) :: what
+    INTEGER(C_INT), INTENT(IN) :: what
     TYPE(C_PTR), VALUE :: value
     INTEGER, INTENT(OUT) :: ier
 
     INTERFACE
        SUBROUTINE cg_configure_c_ptr(what, value, ier) BIND(C, name="cg_configure_c_ptr")
-         IMPORT :: C_PTR
+         IMPORT :: C_PTR, C_INT
          IMPLICIT NONE
-         INTEGER :: what
+         INTEGER(C_INT) :: what
          TYPE(C_PTR), VALUE :: value
          INTEGER :: ier
        END SUBROUTINE cg_configure_c_ptr
@@ -6517,17 +6518,17 @@
 !DEC$ATTRIBUTES DLLEXPORT :: cg_configure_funptr
 !DEC$endif
   SUBROUTINE cg_configure_funptr(what, value, ier)
-    USE ISO_C_BINDING, ONLY : C_FUNPTR
+    USE ISO_C_BINDING, ONLY : C_FUNPTR, C_INT
     IMPLICIT NONE
-    INTEGER, INTENT(IN) :: what
+    INTEGER(C_INT), INTENT(IN) :: what
     TYPE(C_FUNPTR), VALUE :: value
     INTEGER, INTENT(OUT) :: ier
 
     INTERFACE
       SUBROUTINE cg_configure_c_funptr(what, value, ier) BIND(C, name="cg_configure_c_funptr")
-        IMPORT :: C_FUNPTR
+        IMPORT :: C_FUNPTR, C_INT
         IMPLICIT NONE
-        INTEGER :: what
+        INTEGER(C_INT) :: what
         TYPE(C_FUNPTR), VALUE :: value
         INTEGER :: ier
       END SUBROUTINE cg_configure_c_funptr