1 /**************************************************************************** 2 * * 3 * GNAT COMPILER COMPONENTS * 4 * * 5 * A D A I N T * 6 * * 7 * C Header File * 8 * * 9 * Copyright (C) 1992-2003 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 2, 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. See the GNU General Public License * 17 * for more details. You should have received a copy of the GNU General * 18 * Public License distributed with GNAT; see file COPYING. If not, write * 19 * to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, * 20 * MA 02111-1307, USA. * 21 * * 22 * As a special exception, if you link this file with other files to * 23 * produce an executable, this file does not by itself cause the resulting * 24 * executable to be covered by the GNU General Public License. This except- * 25 * ion does not however invalidate any other reasons why the executable * 26 * file might be covered by the GNU Public License. * 27 * * 28 * GNAT was originally developed by the GNAT team at New York University. * 29 * Extensive contributions were provided by Ada Core Technologies Inc. * 30 * * 31 ****************************************************************************/ 32 33 #include <stdio.h> 34 #include <dirent.h> 35 36 typedef long OS_Time; /* Type corresponding to GNAT.OS_Lib.OS_Time */ 37 38 extern int __gnat_max_path_len; 39 extern void __gnat_to_gm_time (OS_Time *, int *, 40 int *, int *, 41 int *, int *, 42 int *); 43 extern int __gnat_get_maximum_file_name_length (void); 44 extern int __gnat_get_switches_case_sensitive (void); 45 extern int __gnat_get_file_names_case_sensitive (void); 46 extern char __gnat_get_default_identifier_character_set (void); 47 extern void __gnat_get_current_dir (char *, int *); 48 extern void __gnat_get_object_suffix_ptr (int *, 49 const char **); 50 extern void __gnat_get_executable_suffix_ptr (int *, 51 const char **); 52 extern void __gnat_get_debuggable_suffix_ptr (int *, 53 const char **); 54 extern int __gnat_readlink (char *, char *, 55 size_t); 56 extern int __gnat_symlink (char *, char *); 57 extern int __gnat_try_lock (char *, char *); 58 extern int __gnat_open_new (char *, int); 59 extern int __gnat_open_new_temp (char *, int); 60 extern int __gnat_mkdir (char *); 61 extern int __gnat_stat (char *, 62 struct stat *); 63 extern int __gnat_open_read (char *, int); 64 extern int __gnat_open_rw (char *, int); 65 extern int __gnat_open_create (char *, int); 66 extern int __gnat_open_append (char *, int); 67 extern long __gnat_file_length (int); 68 extern void __gnat_tmp_name (char *); 69 extern char *__gnat_readdir (DIR *, char *); 70 extern int __gnat_readdir_is_thread_safe (void); 71 extern time_t __gnat_file_time_name (char *); 72 extern time_t __gnat_file_time_fd (int); 73 extern void __gnat_set_file_time_name (char *, time_t); 74 extern void __gnat_get_env_value_ptr (char *, int *, 75 char **); 76 extern int __gnat_file_exists (char *); 77 extern int __gnat_is_regular_file (char *); 78 extern int __gnat_is_absolute_path (char *); 79 extern int __gnat_is_directory (char *); 80 extern int __gnat_is_writable_file (char *); 81 extern int __gnat_is_readable_file (char *name); 82 extern void __gnat_set_readonly (char *name); 83 extern void __gnat_set_writable (char *name); 84 extern int __gnat_is_symbolic_link (char *name); 85 extern int __gnat_portable_spawn (char *[]); 86 extern int __gnat_portable_no_block_spawn (char *[]); 87 extern int __gnat_portable_wait (int *); 88 extern int __gnat_waitpid (int); 89 extern char *__gnat_locate_exec (char *, char *); 90 extern char *__gnat_locate_exec_on_path (char *); 91 extern char *__gnat_locate_regular_file (char *, char *); 92 extern void __gnat_maybe_glob_args (int *, char ***); 93 extern void __gnat_os_exit (int); 94 extern void __gnat_set_env_value (char *, char *); 95 extern char *__gnat_get_libraries_from_registry (void); 96 extern int __gnat_to_canonical_file_list_init (char *, int); 97 extern char *__gnat_to_canonical_file_list_next (void); 98 extern void __gnat_to_canonical_file_list_free (void); 99 extern char *__gnat_to_canonical_dir_spec (char *, int); 100 extern char *__gnat_to_canonical_file_spec (char *); 101 extern char *__gnat_to_host_dir_spec (char *, int); 102 extern char *__gnat_to_host_file_spec (char *); 103 extern char *__gnat_to_canonical_path_spec (char *); 104 extern void __gnat_adjust_os_resource_limits (void); 105 extern void convert_addresses (void *, int, 106 void *, int *); 107 extern int __gnat_copy_attribs (char *, char *, int); 108 extern int __gnat_feof (FILE *); 109 extern int __gnat_ferror (FILE *); 110 extern int __gnat_fileno (FILE *); 111 extern int __gnat_is_regular_file_fd (int); 112 extern FILE *__gnat_constant_stderr (void); 113 extern FILE *__gnat_constant_stdin (void); 114 extern FILE *__gnat_constant_stdout (void); 115 extern char *__gnat_full_name (char *, char *); 116 117 extern int __gnat_arg_count (void); 118 extern int __gnat_len_arg (int); 119 extern void __gnat_fill_arg (char *, int); 120 extern int __gnat_env_count (void); 121 extern int __gnat_len_env (int); 122 extern void __gnat_fill_env (char *, int); 123 124 /* Routines for interface to scanf and printf functions for integer values */ 125 126 extern int get_int (void); 127 extern void put_int (int); 128 extern void put_int_stderr (int); 129 extern int get_char (void); 130 extern void put_char (int); 131 extern void put_char_stderr (int); 132 extern char *mktemp (char *); 133 134 extern void __gnat_set_exit_status (int); 135 136 extern int __gnat_expect_fork (void); 137 extern void __gnat_expect_portable_execvp (char *, char *[]); 138 extern int __gnat_pipe (int *); 139 extern int __gnat_expect_poll (int *, int, int, int *); 140 extern void __gnat_set_binary_mode (int); 141 extern void __gnat_set_text_mode (int); 142 extern char *__gnat_ttyname (int); 143 extern int __gnat_lseek (int, long, int); 144 145 #ifdef __MINGW32__ 146 extern void __gnat_plist_init (void); 147 #endif 148 149 #ifdef IN_RTS 150 /* Portable definition of strdup, which is not available on all systems. */ 151 #define xstrdup(S) strcpy ((char *) malloc (strlen (S) + 1), S) 152 #endif 153 154 /* This function returns the version of GCC being used. Here it's GCC 3. */ 155 extern int get_gcc_version (void); 156 157 /* This function offers a hook for libgnarl to set the 158 locking subprograms for libgcc_eh. */ 159 extern void __gnatlib_install_locks (void (*) (void), 160 void (*) (void)); 161