OSDN Git Service

2009-06-22 Vincent Celier <celier@adacore.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
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
49    tested.  */
50
51 #if defined (__GLIBC__) || defined (sun)  || defined (__sgi)
52 #define FOPEN fopen64
53 #define STAT stat64
54 #define FSTAT fstat64
55 #define LSTAT lstat64
56 #define STRUCT_STAT struct stat64
57 #else
58 #define FOPEN fopen
59 #define STAT stat
60 #define FSTAT fstat
61 #define STRUCT_STAT struct stat
62 #endif
63
64 typedef long OS_Time; /* Type corresponding to GNAT.OS_Lib.OS_Time */
65
66 extern int    __gnat_max_path_len;
67 extern OS_Time __gnat_current_time                 (void);
68 extern void   __gnat_current_time_string           (char *);
69 extern void   __gnat_to_gm_time                    (OS_Time *, int *, int *,
70                                                     int *, int *,
71                                                     int *, int *);
72 extern int    __gnat_get_maximum_file_name_length  (void);
73 extern int    __gnat_get_switches_case_sensitive   (void);
74 extern int    __gnat_get_file_names_case_sensitive (void);
75 extern char   __gnat_get_default_identifier_character_set (void);
76 extern void   __gnat_get_current_dir               (char *, int *);
77 extern void   __gnat_get_object_suffix_ptr         (int *,
78                                                     const char **);
79 extern void   __gnat_get_executable_suffix_ptr     (int *,
80                                                     const char **);
81 extern void   __gnat_get_debuggable_suffix_ptr     (int *,
82                                                     const char **);
83 extern int    __gnat_readlink                      (char *, char *,
84                                                     size_t);
85 extern int    __gnat_symlink                       (char *, char *);
86 extern int    __gnat_try_lock                      (char *, char *);
87 extern int    __gnat_open_new                      (char *, int);
88 extern int    __gnat_open_new_temp                 (char *, int);
89 extern int    __gnat_mkdir                         (char *);
90 extern int    __gnat_stat                          (char *,
91                                                     STRUCT_STAT *);
92 extern int    __gnat_unlink                        (char *);
93 extern int    __gnat_rename                        (char *, char *);
94 extern int    __gnat_chdir                         (char *);
95 extern int    __gnat_rmdir                         (char *);
96
97 extern FILE  *__gnat_fopen                         (char *, char *, int);
98 extern FILE  *__gnat_freopen                       (char *, char *, FILE *,
99                                                     int);
100 extern int    __gnat_open_read                     (char *, int);
101 extern int    __gnat_open_rw                       (char *, int);
102 extern int    __gnat_open_create                   (char *, int);
103 extern int    __gnat_create_output_file            (char *);
104 extern int    __gnat_open_append                   (char *, int);
105 extern long   __gnat_file_length                   (int);
106 extern long   __gnat_named_file_length             (char *);
107 extern void   __gnat_tmp_name                      (char *);
108 extern DIR   *__gnat_opendir                       (char *);
109 extern char  *__gnat_readdir                       (DIR *, char *, int *);
110 extern int    __gnat_closedir                      (DIR *);
111 extern int    __gnat_readdir_is_thread_safe        (void);
112
113 extern OS_Time __gnat_file_time_name                (char *);
114 extern OS_Time __gnat_file_time_fd                  (int);
115 /* return -1 in case of error */
116
117 extern void   __gnat_set_file_time_name            (char *, time_t);
118
119 extern int    __gnat_dup                           (int);
120 extern int    __gnat_dup2                          (int, int);
121 extern int    __gnat_file_exists                   (char *);
122 extern int    __gnat_is_regular_file               (char *);
123 extern int    __gnat_is_absolute_path              (char *,int);
124 extern int    __gnat_is_directory                  (char *);
125 extern int    __gnat_is_writable_file              (char *);
126 extern int    __gnat_is_readable_file              (char *name);
127 extern int    __gnat_is_executable_file            (char *name);
128 extern void   __gnat_set_non_writable              (char *name);
129 extern void   __gnat_set_writable                  (char *name);
130 extern void   __gnat_set_executable                (char *name);
131 extern void   __gnat_set_readable                  (char *name);
132 extern void   __gnat_set_non_readable              (char *name);
133 extern int    __gnat_is_symbolic_link              (char *name);
134 extern int    __gnat_portable_spawn                (char *[]);
135 extern int    __gnat_portable_no_block_spawn       (char *[]);
136 extern int    __gnat_portable_wait                 (int *);
137 extern char  *__gnat_locate_exec                   (char *, char *);
138 extern char  *__gnat_locate_exec_on_path           (char *);
139 extern char  *__gnat_locate_regular_file           (char *, char *);
140 extern void   __gnat_maybe_glob_args               (int *, char ***);
141 extern void   __gnat_os_exit                       (int);
142 extern char  *__gnat_get_libraries_from_registry   (void);
143 extern int    __gnat_to_canonical_file_list_init   (char *, int);
144 extern char  *__gnat_to_canonical_file_list_next   (void);
145 extern void   __gnat_to_canonical_file_list_free   (void);
146 extern char  *__gnat_to_canonical_dir_spec         (char *, int);
147 extern char  *__gnat_to_canonical_file_spec        (char *);
148 extern char  *__gnat_to_host_dir_spec              (char *, int);
149 extern char  *__gnat_to_host_file_spec             (char *);
150 extern char  *__gnat_to_canonical_path_spec        (char *);
151 extern void   __gnat_adjust_os_resource_limits     (void);
152 extern void   convert_addresses                    (const char *, void *, int,
153                                                     void *, int *);
154 extern int    __gnat_copy_attribs                  (char *, char *, int);
155 extern int    __gnat_feof                          (FILE *);
156 extern int    __gnat_ferror                        (FILE *);
157 extern int    __gnat_fileno                        (FILE *);
158 extern int    __gnat_is_regular_file_fd            (int);
159 extern FILE  *__gnat_constant_stderr               (void);
160 extern FILE  *__gnat_constant_stdin                (void);
161 extern FILE  *__gnat_constant_stdout               (void);
162 extern char  *__gnat_full_name                     (char *, char *);
163
164 extern int    __gnat_arg_count                     (void);
165 extern int    __gnat_len_arg                       (int);
166 extern void   __gnat_fill_arg                      (char *, int);
167 extern int    __gnat_env_count                     (void);
168 extern int    __gnat_len_env                       (int);
169 extern void   __gnat_fill_env                      (char *, int);
170
171 /* Routines for interface to scanf and printf functions for integer values */
172
173 extern int    get_int                              (void);
174 extern void   put_int                              (int);
175 extern void   put_int_stderr                       (int);
176 extern int    get_char                             (void);
177 extern void   put_char                             (int);
178 extern void   put_char_stderr                      (int);
179 extern char  *mktemp                               (char *);
180
181 extern void   __gnat_set_exit_status               (int);
182
183 extern int    __gnat_expect_fork                   (void);
184 extern void   __gnat_expect_portable_execvp        (char *, char *[]);
185 extern int    __gnat_pipe                          (int *);
186 extern int    __gnat_expect_poll                   (int *, int, int, int *);
187 extern void   __gnat_set_binary_mode               (int);
188 extern void   __gnat_set_text_mode                 (int);
189 extern char  *__gnat_ttyname                       (int);
190 extern int    __gnat_lseek                         (int, long, int);
191 extern int    __gnat_set_close_on_exec             (int, int);
192 extern int    __gnat_dup                           (int);
193 extern int    __gnat_dup2                          (int, int);
194
195 extern void   __gnat_os_filename                   (char *, char *, char *,
196                                                     int *, char *, int *);
197 #if defined (linux)
198 extern void   *__gnat_lwp_self                     (void);
199 #endif
200
201 #if defined (__MINGW32__) && !defined (RTX)
202 extern void   __gnat_plist_init                    (void);
203 #endif
204
205 #ifdef IN_RTS
206 /* Portable definition of strdup, which is not available on all systems.  */
207 #define xstrdup(S)  strcpy ((char *) malloc (strlen (S) + 1), S)
208 #endif
209
210 /* This function returns the version of GCC being used.  Here it's GCC 3.  */
211 extern int    get_gcc_version                      (void);
212
213 extern int    __gnat_binder_supports_auto_init     (void);
214 extern int    __gnat_sals_init_using_constructors  (void);