(root)/
gcc-13.2.0/
gcc/
ada/
adaint.h
       1  /****************************************************************************
       2   *                                                                          *
       3   *                         GNAT COMPILER COMPONENTS                         *
       4   *                                                                          *
       5   *                               A D A I N T                                *
       6   *                                                                          *
       7   *                              C Header File                               *
       8   *                                                                          *
       9   *          Copyright (C) 1992-2023, Free Software Foundation, Inc.         *
      10   *                                                                          *
      11   * GNAT is free software;  you can  redistribute it  and/or modify it under *
      12   * terms of the  GNU General Public License as published  by the Free Soft- *
      13   * ware  Foundation;  either version 3,  or (at your option) any later ver- *
      14   * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
      15   * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
      16   * or FITNESS FOR A PARTICULAR PURPOSE.                                     *
      17   *                                                                          *
      18   * As a special exception under Section 7 of GPL version 3, you are granted *
      19   * additional permissions described in the GCC Runtime Library Exception,   *
      20   * version 3.1, as published by the Free Software Foundation.               *
      21   *                                                                          *
      22   * You should have received a copy of the GNU General Public License and    *
      23   * a copy of the GCC Runtime Library Exception along with this program;     *
      24   * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    *
      25   * <http://www.gnu.org/licenses/>.                                          *
      26   *                                                                          *
      27   * GNAT was originally developed  by the GNAT team at  New York University. *
      28   * Extensive contributions were provided by Ada Core Technologies Inc.      *
      29   *                                                                          *
      30   ****************************************************************************/
      31  
      32  #ifdef __cplusplus
      33  extern "C" {
      34  #endif
      35  
      36  #include <sys/stat.h>
      37  #include <stdio.h>
      38  
      39  #if defined (_WIN32) || defined (__CYGWIN__)
      40  #include "mingw32.h"
      41  #endif
      42  
      43  #include <dirent.h>
      44  
      45  /*  Constants used for the form parameter encoding values  */
      46  #define Encoding_UTF8 0         /* UTF-8 */
      47  #define Encoding_8bits 1        /* Standard 8bits, CP_ACP on Windows. */
      48  #define Encoding_Unspecified 2  /* Based on GNAT_CODE_PAGE env variable. */
      49  
      50  /* Large file support. It is unclear what portable mechanism we can use to
      51     determine at compile time what support the system offers for large files.
      52     For now we just list the platforms we have manually tested. */
      53  
      54  #if (defined (__GLIBC__) && !defined(STANDALONE)) || defined (__sun__) || defined (__QNX__)
      55  #define GNAT_FOPEN fopen64
      56  #define GNAT_OPEN open64
      57  #define GNAT_STAT stat64
      58  #define GNAT_FSTAT fstat64
      59  #define GNAT_LSTAT lstat64
      60  #define GNAT_STRUCT_STAT struct stat64
      61  
      62  #elif defined(_WIN32)
      63  #define GNAT_FOPEN fopen64
      64  #define GNAT_OPEN open
      65  #define GNAT_STAT stat64
      66  #define GNAT_FSTAT fstat64
      67  #define GNAT_LSTAT lstat
      68  #define GNAT_STRUCT_STAT struct stat64
      69  
      70  #elif defined(__APPLE__)
      71  
      72  # include <TargetConditionals.h>
      73  
      74  # if TARGET_IPHONE_SIMULATOR
      75    /* On iOS (simulator or not), the stat structure is the 64 bit one.
      76       But the simulator uses the MacOS X syscalls that aren't 64 bit.
      77       Fix this interfacing issue here.  */
      78      int fstat64(int, struct stat *);
      79      int stat64(const char *, struct stat *);
      80      int lstat64(const char *, struct stat *);
      81  #   define GNAT_STAT stat64
      82  #   define GNAT_FSTAT fstat64
      83  #   define GNAT_LSTAT lstat64
      84  # else
      85  #   define GNAT_STAT stat
      86  #   define GNAT_FSTAT fstat
      87  #   define GNAT_LSTAT lstat
      88  # endif
      89  
      90  #   define GNAT_FOPEN fopen
      91  #   define GNAT_OPEN open
      92  #   define GNAT_STRUCT_STAT struct stat
      93  
      94  #else
      95  #define GNAT_FOPEN fopen
      96  #define GNAT_OPEN open
      97  #define GNAT_STAT stat
      98  #define GNAT_FSTAT fstat
      99  #define GNAT_LSTAT lstat
     100  #define GNAT_STRUCT_STAT struct stat
     101  #endif
     102  
     103  /* Type corresponding to GNAT.OS_Lib.OS_Time */
     104  typedef long long OS_Time;
     105  
     106  #define __int64 long long
     107  GNAT_STRUCT_STAT;
     108  
     109  /* A lazy cache for the attributes of a file. On some systems, a single call to
     110     stat() will give all this information, so it is better than doing a system
     111     call every time. On other systems this require several system calls.
     112  */
     113  
     114  struct file_attributes {
     115    int           error;
     116    /* Errno value returned by stat()/fstat(). If non-zero, other fields should
     117     * be considered as invalid.
     118     */
     119  
     120    unsigned char exists;
     121  
     122    unsigned char writable;
     123    unsigned char readable;
     124    unsigned char executable;
     125  
     126    unsigned char symbolic_link;
     127    unsigned char regular;
     128    unsigned char directory;
     129  
     130    OS_Time timestamp;
     131    __int64 file_length;
     132  };
     133  /* WARNING: changing the size here might require changing the constant
     134   * File_Attributes_Size in osint.ads (which should be big enough to
     135   * fit the above struct on any system)
     136   */
     137  
     138  extern int  __gnat_max_path_len;
     139  extern int  __gnat_in_child_after_fork;
     140  /* This flag expresses the state when the fork call just returned zero result,
     141   * i.e. when the new born child process is created and the new executable is
     142   * not loaded yet. It is used to e.g. disable tracing memory
     143   * allocation/deallocation in memtrack.adb just after fork returns in the child
     144   * process to avoid both parent and child writing to the same gmem.out file
     145   * simultaneously */
     146  
     147  extern OS_Time __gnat_current_time		   (void);
     148  extern void   __gnat_current_time_string           (char *);
     149  extern void   __gnat_to_gm_time			   (OS_Time *, int *, int *,
     150  				                    int *, int *,
     151  				                    int *, int *);
     152  extern void   __gnat_to_os_time                    (OS_Time *, int, int, int,
     153                                                      int, int, int);
     154  extern int    __gnat_get_maximum_file_name_length  (void);
     155  extern int    __gnat_get_switches_case_sensitive   (void);
     156  extern int    __gnat_get_file_names_case_sensitive (void);
     157  extern int    __gnat_get_env_vars_case_sensitive   (void);
     158  extern char   __gnat_get_default_identifier_character_set (void);
     159  extern void   __gnat_get_current_dir		   (char *, int *);
     160  extern void   __gnat_get_object_suffix_ptr         (int *,
     161  						    const char **);
     162  extern void   __gnat_get_executable_suffix_ptr     (int *,
     163  						    const char **);
     164  extern void   __gnat_get_debuggable_suffix_ptr     (int *,
     165  						    const char **);
     166  extern int    __gnat_readlink			   (char *, char *,
     167  						    size_t);
     168  extern int    __gnat_symlink                       (char *, char *);
     169  extern int    __gnat_try_lock                      (char *, char *);
     170  extern int    __gnat_open_new                      (char *, int);
     171  extern int    __gnat_open_new_temp		   (char *, int);
     172  extern int    __gnat_mkdir			   (char *, int);
     173  extern int    __gnat_stat			   (char *,
     174  						    GNAT_STRUCT_STAT *);
     175  extern int    __gnat_unlink                        (char *);
     176  extern int    __gnat_rename                        (char *, char *);
     177  extern int    __gnat_chdir                         (char *);
     178  extern int    __gnat_rmdir                         (char *);
     179  
     180  extern FILE  *__gnat_fopen			   (char *, char *, int);
     181  extern FILE  *__gnat_freopen			   (char *, char *, FILE *,
     182  				                    int);
     183  extern int    __gnat_open                          (char *, int);
     184  extern int    __gnat_open_read                     (char *, int);
     185  extern int    __gnat_open_rw                       (char *, int);
     186  extern int    __gnat_open_create                   (char *, int);
     187  extern int    __gnat_create_output_file            (char *);
     188  extern int    __gnat_create_output_file_new        (char *);
     189  
     190  extern int    __gnat_open_append                   (char *, int);
     191  extern long   __gnat_file_length_long              (int);
     192  extern __int64 __gnat_file_length                  (int);
     193  extern __int64 __gnat_named_file_length            (char *);
     194  extern void   __gnat_tmp_name			   (char *);
     195  extern DIR   *__gnat_opendir                       (char *);
     196  extern char  *__gnat_readdir                       (DIR *, char *, int *);
     197  extern int    __gnat_closedir                      (DIR *);
     198  extern int    __gnat_readdir_is_thread_safe        (void);
     199  
     200  extern OS_Time __gnat_file_time_name                (char *);
     201  extern OS_Time __gnat_file_time_fd                  (int);
     202  /* return -1 in case of error */
     203  
     204  extern void   __gnat_set_file_time_name		   (char *, OS_Time);
     205  
     206  extern int    __gnat_dup			            (int);
     207  extern int    __gnat_dup2			            (int, int);
     208  extern int    __gnat_file_exists		         (char *);
     209  extern int    __gnat_is_regular_file         (char *);
     210  extern int    __gnat_is_absolute_path        (char *,int);
     211  extern int    __gnat_is_directory		      (char *);
     212  extern int    __gnat_is_writable_file		   (char *);
     213  extern int    __gnat_is_readable_file		   (char *name);
     214  extern int    __gnat_is_executable_file      (char *name);
     215  extern int    __gnat_is_write_accessible_file	(char *name);
     216  extern int    __gnat_is_read_accessible_file	(char *name);
     217  
     218  extern void   __gnat_reset_attributes (struct file_attributes *);
     219  extern int    __gnat_error_attributes (struct file_attributes *);
     220  extern __int64 __gnat_file_length_attr       (int, char *, struct file_attributes *);
     221  extern OS_Time __gnat_file_time_name_attr    (char *, struct file_attributes *);
     222  extern OS_Time __gnat_file_time_fd_attr      (int,    struct file_attributes *);
     223  extern int    __gnat_file_exists_attr        (char *, struct file_attributes *);
     224  extern int    __gnat_is_regular_file_attr    (char *, struct file_attributes *);
     225  extern int    __gnat_is_directory_attr       (char *, struct file_attributes *);
     226  extern int    __gnat_is_readable_file_attr   (char *, struct file_attributes *);
     227  extern int    __gnat_is_writable_file_attr   (char *, struct file_attributes *);
     228  extern int    __gnat_is_executable_file_attr (char *, struct file_attributes *);
     229  extern int    __gnat_is_symbolic_link_attr   (char *, struct file_attributes *);
     230  
     231  extern void   __gnat_set_non_writable              (char *name);
     232  extern void   __gnat_set_writable                  (char *name);
     233  extern void   __gnat_set_executable                (char *name, int);
     234  extern void   __gnat_set_readable                  (char *name);
     235  extern void   __gnat_set_non_readable              (char *name);
     236  extern int    __gnat_is_symbolic_link		   (char *name);
     237  extern int    __gnat_portable_spawn                (char *[]);
     238  extern int    __gnat_portable_no_block_spawn       (char *[]);
     239  extern int    __gnat_portable_wait                 (int *);
     240  extern int    __gnat_portable_no_block_wait        (int *);
     241  extern int    __gnat_current_process_id            (void);
     242  extern char  *__gnat_locate_exec                   (char *, char *);
     243  extern char  *__gnat_locate_exec_on_path           (char *);
     244  extern char  *__gnat_locate_regular_file           (char *, char *);
     245  extern void   __gnat_maybe_glob_args               (int *, char ***);
     246  extern void   __gnat_os_exit			   (int);
     247  extern char  *__gnat_get_libraries_from_registry   (void);
     248  extern int    __gnat_to_canonical_file_list_init   (char *, int);
     249  extern char  *__gnat_to_canonical_file_list_next   (void);
     250  extern void   __gnat_to_canonical_file_list_free   (void);
     251  extern char  *__gnat_to_canonical_dir_spec         (char *, int);
     252  extern char  *__gnat_to_canonical_file_spec        (char *);
     253  extern char  *__gnat_to_host_dir_spec              (char *, int);
     254  extern char  *__gnat_to_host_file_spec             (char *);
     255  extern char  *__gnat_to_canonical_path_spec	   (char *);
     256  extern void   __gnat_adjust_os_resource_limits	   (void);
     257  extern int    __gnat_copy_attribs		   (char *, char *, int);
     258  extern int    __gnat_feof		  	   (FILE *);
     259  extern int    __gnat_ferror                        (FILE *);
     260  extern int    __gnat_fileno		  	   (FILE *);
     261  extern int    __gnat_is_regular_file_fd  	   (int);
     262  extern FILE  *__gnat_constant_stderr	  	   (void);
     263  extern FILE  *__gnat_constant_stdin	  	   (void);
     264  extern FILE  *__gnat_constant_stdout	  	   (void);
     265  extern char  *__gnat_full_name		  	   (char *, char *);
     266  
     267  extern int    __gnat_arg_count			   (void);
     268  extern int    __gnat_len_arg			   (int);
     269  extern void   __gnat_fill_arg			   (char *, int);
     270  extern int    __gnat_env_count			   (void);
     271  extern int    __gnat_len_env			   (int);
     272  extern void   __gnat_fill_env			   (char *, int);
     273  
     274  /* Routines for interface to scanf and printf functions for integer values */
     275  
     276  extern int    get_int				   (void);
     277  extern void   put_int				   (int);
     278  extern void   put_int_stderr			   (int);
     279  extern int    get_char				   (void);
     280  extern void   put_char				   (int);
     281  extern void   put_char_stderr			   (int);
     282  extern char  *mktemp				   (char *);
     283  
     284  extern void   __gnat_set_exit_status		   (int);
     285  
     286  extern int    __gnat_expect_fork		   (void);
     287  extern void   __gnat_expect_portable_execvp	   (int *, char *, char *[]);
     288  extern int    __gnat_pipe			   (int *);
     289  extern int    __gnat_expect_poll		   (int *, int, int, int *,
     290  						    int *);
     291  extern void   __gnat_set_binary_mode		   (int);
     292  extern void   __gnat_set_text_mode		   (int);
     293  extern void   __gnat_set_mode			   (int,int);
     294  extern char  *__gnat_ttyname			   (int);
     295  extern int    __gnat_lseek			   (int, long, int);
     296  extern int    __gnat_set_close_on_exec		   (int, int);
     297  extern int    __gnat_dup			   (int);
     298  extern int    __gnat_dup2			   (int, int);
     299  
     300  /* large file support */
     301  extern __int64 __gnat_ftell64                      (FILE *);
     302  extern int     __gnat_fseek64                      (FILE *, __int64, int);
     303  
     304  extern int    __gnat_number_of_cpus                (void);
     305  
     306  extern void   __gnat_os_filename                   (char *, char *, char *,
     307  						    int *, char *, int *);
     308  
     309  extern char * __gnat_locate_executable_file        (char *, char *);
     310  extern char * __gnat_locate_file_with_predicate    (char *, char *,
     311  						    int (*)(char*));
     312  
     313  #if defined (__ANDROID__)
     314  #undef __linux__
     315  extern void   *__gnat_lwp_self                     (void);
     316  
     317  #elif defined (__linux__)
     318  extern void   *__gnat_lwp_self			   (void);
     319  
     320  /* Routines for interface to required CPU set primitives */
     321  
     322  #include <sched.h>
     323  
     324  extern cpu_set_t *__gnat_cpu_alloc                 (size_t);
     325  extern size_t __gnat_cpu_alloc_size                (size_t);
     326  extern void   __gnat_cpu_free                  (cpu_set_t *);
     327  extern void   __gnat_cpu_zero                      (size_t, cpu_set_t *);
     328  extern void   __gnat_cpu_set                       (int, size_t, cpu_set_t *);
     329  #endif
     330  
     331  #if defined (_WIN32)
     332  /* Interface to delete a handle from internally maintained list of child
     333     process handles on Windows */
     334  extern int
     335  __gnat_win32_remove_handle (HANDLE h, int pid);
     336  #endif
     337  
     338  #ifdef IN_RTS
     339  /* Portable definition of strdup, which is not available on all systems.  */
     340  #define xstrdup(S)  strcpy ((char *) malloc (strlen (S) + 1), S)
     341  #endif
     342  
     343  /* This function returns the version of GCC being used.  Here it's GCC 3.  */
     344  extern int    get_gcc_version                      (void);
     345  
     346  extern int    __gnat_binder_supports_auto_init     (void);
     347  extern int    __gnat_sals_init_using_constructors  (void);
     348  
     349  extern const void * __gnat_get_executable_load_address  (void);
     350  
     351  #ifdef __cplusplus
     352  }
     353  #endif