OSDN Git Service

2009-08-28 Sebastian Pop <sebastian.pop@amd.com>
[pf3gnuchains/gcc-fork.git] / 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-2009, 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 #include <sys/stat.h>
33 #include <stdio.h>
34
35 #ifdef _WIN32
36 #include "mingw32.h"
37 #endif
38
39 #include <dirent.h>
40
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. */
45
46 /* Large file support. It is unclear what portable mechanism we can use to
47    determine at compile time what support the system offers for large files.
48    For now we just list the platforms we have manually tested. */
49
50 #if defined (__GLIBC__) || defined (sun)  || defined (__sgi)
51 #define GNAT_FOPEN fopen64
52 #define GNAT_STAT stat64
53 #define GNAT_FSTAT fstat64
54 #define GNAT_LSTAT lstat64
55 #define GNAT_STRUCT_STAT struct stat64
56 #else
57 #define GNAT_FOPEN fopen
58 #define GNAT_STAT stat
59 #define GNAT_FSTAT fstat
60 #define GNAT_LSTAT lstat
61 #define GNAT_STRUCT_STAT struct stat
62 #endif
63
64 /* Type corresponding to GNAT.OS_Lib.OS_Time */
65 #if defined (_WIN64)
66 typedef long long OS_Time;
67 #else
68 typedef long OS_Time;
69 #endif
70
71 extern int    __gnat_max_path_len;
72 extern OS_Time __gnat_current_time                 (void);
73 extern void   __gnat_current_time_string           (char *);
74 extern void   __gnat_to_gm_time                    (OS_Time *, int *, int *,
75                                                     int *, int *,
76                                                     int *, int *);
77 extern int    __gnat_get_maximum_file_name_length  (void);
78 extern int    __gnat_get_switches_case_sensitive   (void);
79 extern int    __gnat_get_file_names_case_sensitive (void);
80 extern char   __gnat_get_default_identifier_character_set (void);
81 extern void   __gnat_get_current_dir               (char *, int *);
82 extern void   __gnat_get_object_suffix_ptr         (int *,
83                                                     const char **);
84 extern void   __gnat_get_executable_suffix_ptr     (int *,
85                                                     const char **);
86 extern void   __gnat_get_debuggable_suffix_ptr     (int *,
87                                                     const char **);
88 extern int    __gnat_readlink                      (char *, char *,
89                                                     size_t);
90 extern int    __gnat_symlink                       (char *, char *);
91 extern int    __gnat_try_lock                      (char *, char *);
92 extern int    __gnat_open_new                      (char *, int);
93 extern int    __gnat_open_new_temp                 (char *, int);
94 extern int    __gnat_mkdir                         (char *);
95 extern int    __gnat_stat                          (char *,
96                                                     GNAT_STRUCT_STAT *);
97 extern int    __gnat_unlink                        (char *);
98 extern int    __gnat_rename                        (char *, char *);
99 extern int    __gnat_chdir                         (char *);
100 extern int    __gnat_rmdir                         (char *);
101
102 extern FILE  *__gnat_fopen                         (char *, char *, int);
103 extern FILE  *__gnat_freopen                       (char *, char *, FILE *,
104                                                     int);
105 extern int    __gnat_open_read                     (char *, int);
106 extern int    __gnat_open_rw                       (char *, int);
107 extern int    __gnat_open_create                   (char *, int);
108 extern int    __gnat_create_output_file            (char *);
109 extern int    __gnat_open_append                   (char *, int);
110 extern long   __gnat_file_length                   (int);
111 extern long   __gnat_named_file_length             (char *);
112 extern void   __gnat_tmp_name                      (char *);
113 extern DIR   *__gnat_opendir                       (char *);
114 extern char  *__gnat_readdir                       (DIR *, char *, int *);
115 extern int    __gnat_closedir                      (DIR *);
116 extern int    __gnat_readdir_is_thread_safe        (void);
117
118 extern OS_Time __gnat_file_time_name                (char *);
119 extern OS_Time __gnat_file_time_fd                  (int);
120 /* return -1 in case of error */
121
122 extern void   __gnat_set_file_time_name            (char *, time_t);
123
124 extern int    __gnat_dup                           (int);
125 extern int    __gnat_dup2                          (int, int);
126 extern int    __gnat_file_exists                   (char *);
127 extern int    __gnat_is_regular_file               (char *);
128 extern int    __gnat_is_absolute_path              (char *,int);
129 extern int    __gnat_is_directory                  (char *);
130 extern int    __gnat_is_writable_file              (char *);
131 extern int    __gnat_is_readable_file              (char *name);
132 extern int    __gnat_is_executable_file            (char *name);
133 extern void   __gnat_set_non_writable              (char *name);
134 extern void   __gnat_set_writable                  (char *name);
135 extern void   __gnat_set_executable                (char *name);
136 extern void   __gnat_set_readable                  (char *name);
137 extern void   __gnat_set_non_readable              (char *name);
138 extern int    __gnat_is_symbolic_link              (char *name);
139 extern int    __gnat_portable_spawn                (char *[]);
140 extern int    __gnat_portable_no_block_spawn       (char *[]);
141 extern int    __gnat_portable_wait                 (int *);
142 extern char  *__gnat_locate_exec                   (char *, char *);
143 extern char  *__gnat_locate_exec_on_path           (char *);
144 extern char  *__gnat_locate_regular_file           (char *, char *);
145 extern void   __gnat_maybe_glob_args               (int *, char ***);
146 extern void   __gnat_os_exit                       (int);
147 extern char  *__gnat_get_libraries_from_registry   (void);
148 extern int    __gnat_to_canonical_file_list_init   (char *, int);
149 extern char  *__gnat_to_canonical_file_list_next   (void);
150 extern void   __gnat_to_canonical_file_list_free   (void);
151 extern char  *__gnat_to_canonical_dir_spec         (char *, int);
152 extern char  *__gnat_to_canonical_file_spec        (char *);
153 extern char  *__gnat_to_host_dir_spec              (char *, int);
154 extern char  *__gnat_to_host_file_spec             (char *);
155 extern char  *__gnat_to_canonical_path_spec        (char *);
156 extern void   __gnat_adjust_os_resource_limits     (void);
157 extern void   convert_addresses                    (const char *, void *, int,
158                                                     void *, int *);
159 extern int    __gnat_copy_attribs                  (char *, char *, int);
160 extern int    __gnat_feof                          (FILE *);
161 extern int    __gnat_ferror                        (FILE *);
162 extern int    __gnat_fileno                        (FILE *);
163 extern int    __gnat_is_regular_file_fd            (int);
164 extern FILE  *__gnat_constant_stderr               (void);
165 extern FILE  *__gnat_constant_stdin                (void);
166 extern FILE  *__gnat_constant_stdout               (void);
167 extern char  *__gnat_full_name                     (char *, char *);
168
169 extern int    __gnat_arg_count                     (void);
170 extern int    __gnat_len_arg                       (int);
171 extern void   __gnat_fill_arg                      (char *, int);
172 extern int    __gnat_env_count                     (void);
173 extern int    __gnat_len_env                       (int);
174 extern void   __gnat_fill_env                      (char *, int);
175
176 /* Routines for interface to scanf and printf functions for integer values */
177
178 extern int    get_int                              (void);
179 extern void   put_int                              (int);
180 extern void   put_int_stderr                       (int);
181 extern int    get_char                             (void);
182 extern void   put_char                             (int);
183 extern void   put_char_stderr                      (int);
184 extern char  *mktemp                               (char *);
185
186 extern void   __gnat_set_exit_status               (int);
187
188 extern int    __gnat_expect_fork                   (void);
189 extern void   __gnat_expect_portable_execvp        (char *, char *[]);
190 extern int    __gnat_pipe                          (int *);
191 extern int    __gnat_expect_poll                   (int *, int, int, int *);
192 extern void   __gnat_set_binary_mode               (int);
193 extern void   __gnat_set_text_mode                 (int);
194 extern char  *__gnat_ttyname                       (int);
195 extern int    __gnat_lseek                         (int, long, int);
196 extern int    __gnat_set_close_on_exec             (int, int);
197 extern int    __gnat_dup                           (int);
198 extern int    __gnat_dup2                          (int, int);
199
200 extern void   __gnat_os_filename                   (char *, char *, char *,
201                                                     int *, char *, int *);
202 #if defined (linux)
203 extern void   *__gnat_lwp_self                     (void);
204 #endif
205
206 #if defined (_WIN32)
207 /* Interface to delete a handle from internally maintained list of child
208    process handles on Windows */
209 extern void
210 __gnat_win32_remove_handle (HANDLE h, int pid);
211 #endif
212
213 #ifdef IN_RTS
214 /* Portable definition of strdup, which is not available on all systems.  */
215 #define xstrdup(S)  strcpy ((char *) malloc (strlen (S) + 1), S)
216 #endif
217
218 /* This function returns the version of GCC being used.  Here it's GCC 3.  */
219 extern int    get_gcc_version                      (void);
220
221 extern int    __gnat_binder_supports_auto_init     (void);
222 extern int    __gnat_sals_init_using_constructors  (void);