1 /****************************************************************************
3 * GNAT COMPILER COMPONENTS *
9 * Copyright (C) 1992-2009, Free Software Foundation, Inc. *
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. *
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. *
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/>. *
27 * GNAT was originally developed by the GNAT team at New York University. *
28 * Extensive contributions were provided by Ada Core Technologies Inc. *
30 ****************************************************************************/
41 /* Constants used for the form parameter encoding values */
42 #define Encoding_UTF8 0 /* UTF-8 */
43 #define Encoding_8bits 1 /* Standard 8bits, CP_ACP on Windows. */
44 #define Encoding_Unspecified 2 /* Based on GNAT_CODE_PAGE env variable. */
46 /* Large file support. It is unclear what portable mechanism we can
47 use to determine at compile time what support the system offers for
48 large files. For now we just list the platforms we have manually
51 #if defined (__GLIBC__) || defined (sun) || defined (__sgi)
56 #define STRUCT_STAT struct stat64
62 #define STRUCT_STAT struct stat
65 /* Type corresponding to GNAT.OS_Lib.OS_Time */
67 typedef long long OS_Time;
72 extern int __gnat_max_path_len;
73 extern OS_Time __gnat_current_time (void);
74 extern void __gnat_current_time_string (char *);
75 extern void __gnat_to_gm_time (OS_Time *, int *, int *,
78 extern int __gnat_get_maximum_file_name_length (void);
79 extern int __gnat_get_switches_case_sensitive (void);
80 extern int __gnat_get_file_names_case_sensitive (void);
81 extern char __gnat_get_default_identifier_character_set (void);
82 extern void __gnat_get_current_dir (char *, int *);
83 extern void __gnat_get_object_suffix_ptr (int *,
85 extern void __gnat_get_executable_suffix_ptr (int *,
87 extern void __gnat_get_debuggable_suffix_ptr (int *,
89 extern int __gnat_readlink (char *, char *,
91 extern int __gnat_symlink (char *, char *);
92 extern int __gnat_try_lock (char *, char *);
93 extern int __gnat_open_new (char *, int);
94 extern int __gnat_open_new_temp (char *, int);
95 extern int __gnat_mkdir (char *);
96 extern int __gnat_stat (char *,
98 extern int __gnat_unlink (char *);
99 extern int __gnat_rename (char *, char *);
100 extern int __gnat_chdir (char *);
101 extern int __gnat_rmdir (char *);
103 extern FILE *__gnat_fopen (char *, char *, int);
104 extern FILE *__gnat_freopen (char *, char *, FILE *,
106 extern int __gnat_open_read (char *, int);
107 extern int __gnat_open_rw (char *, int);
108 extern int __gnat_open_create (char *, int);
109 extern int __gnat_create_output_file (char *);
110 extern int __gnat_open_append (char *, int);
111 extern long __gnat_file_length (int);
112 extern long __gnat_named_file_length (char *);
113 extern void __gnat_tmp_name (char *);
114 extern DIR *__gnat_opendir (char *);
115 extern char *__gnat_readdir (DIR *, char *, int *);
116 extern int __gnat_closedir (DIR *);
117 extern int __gnat_readdir_is_thread_safe (void);
119 extern OS_Time __gnat_file_time_name (char *);
120 extern OS_Time __gnat_file_time_fd (int);
121 /* return -1 in case of error */
123 extern void __gnat_set_file_time_name (char *, time_t);
125 extern int __gnat_dup (int);
126 extern int __gnat_dup2 (int, int);
127 extern int __gnat_file_exists (char *);
128 extern int __gnat_is_regular_file (char *);
129 extern int __gnat_is_absolute_path (char *,int);
130 extern int __gnat_is_directory (char *);
131 extern int __gnat_is_writable_file (char *);
132 extern int __gnat_is_readable_file (char *name);
133 extern int __gnat_is_executable_file (char *name);
134 extern void __gnat_set_non_writable (char *name);
135 extern void __gnat_set_writable (char *name);
136 extern void __gnat_set_executable (char *name);
137 extern void __gnat_set_readable (char *name);
138 extern void __gnat_set_non_readable (char *name);
139 extern int __gnat_is_symbolic_link (char *name);
140 extern int __gnat_portable_spawn (char *[]);
141 extern int __gnat_portable_no_block_spawn (char *[]);
142 extern int __gnat_portable_wait (int *);
143 extern char *__gnat_locate_exec (char *, char *);
144 extern char *__gnat_locate_exec_on_path (char *);
145 extern char *__gnat_locate_regular_file (char *, char *);
146 extern void __gnat_maybe_glob_args (int *, char ***);
147 extern void __gnat_os_exit (int);
148 extern char *__gnat_get_libraries_from_registry (void);
149 extern int __gnat_to_canonical_file_list_init (char *, int);
150 extern char *__gnat_to_canonical_file_list_next (void);
151 extern void __gnat_to_canonical_file_list_free (void);
152 extern char *__gnat_to_canonical_dir_spec (char *, int);
153 extern char *__gnat_to_canonical_file_spec (char *);
154 extern char *__gnat_to_host_dir_spec (char *, int);
155 extern char *__gnat_to_host_file_spec (char *);
156 extern char *__gnat_to_canonical_path_spec (char *);
157 extern void __gnat_adjust_os_resource_limits (void);
158 extern void convert_addresses (const char *, void *, int,
160 extern int __gnat_copy_attribs (char *, char *, int);
161 extern int __gnat_feof (FILE *);
162 extern int __gnat_ferror (FILE *);
163 extern int __gnat_fileno (FILE *);
164 extern int __gnat_is_regular_file_fd (int);
165 extern FILE *__gnat_constant_stderr (void);
166 extern FILE *__gnat_constant_stdin (void);
167 extern FILE *__gnat_constant_stdout (void);
168 extern char *__gnat_full_name (char *, char *);
170 extern int __gnat_arg_count (void);
171 extern int __gnat_len_arg (int);
172 extern void __gnat_fill_arg (char *, int);
173 extern int __gnat_env_count (void);
174 extern int __gnat_len_env (int);
175 extern void __gnat_fill_env (char *, int);
177 /* Routines for interface to scanf and printf functions for integer values */
179 extern int get_int (void);
180 extern void put_int (int);
181 extern void put_int_stderr (int);
182 extern int get_char (void);
183 extern void put_char (int);
184 extern void put_char_stderr (int);
185 extern char *mktemp (char *);
187 extern void __gnat_set_exit_status (int);
189 extern int __gnat_expect_fork (void);
190 extern void __gnat_expect_portable_execvp (char *, char *[]);
191 extern int __gnat_pipe (int *);
192 extern int __gnat_expect_poll (int *, int, int, int *);
193 extern void __gnat_set_binary_mode (int);
194 extern void __gnat_set_text_mode (int);
195 extern char *__gnat_ttyname (int);
196 extern int __gnat_lseek (int, long, int);
197 extern int __gnat_set_close_on_exec (int, int);
198 extern int __gnat_dup (int);
199 extern int __gnat_dup2 (int, int);
201 extern void __gnat_os_filename (char *, char *, char *,
202 int *, char *, int *);
204 extern void *__gnat_lwp_self (void);
208 /* Interface to delete a handle from internally maintained list of child
209 process handles on Windows */
211 __gnat_win32_remove_handle (HANDLE h, int pid);
215 /* Portable definition of strdup, which is not available on all systems. */
216 #define xstrdup(S) strcpy ((char *) malloc (strlen (S) + 1), S)
219 /* This function returns the version of GCC being used. Here it's GCC 3. */
220 extern int get_gcc_version (void);
222 extern int __gnat_binder_supports_auto_init (void);
223 extern int __gnat_sals_init_using_constructors (void);