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
