OSDN Git Service

PR 43839
[pf3gnuchains/gcc-fork.git] / libgfortran / io / unix.h
1 /* Copyright (C) 2009, 2010
2    Free Software Foundation, Inc.
3    Contributed by Janne Blomqvist
4
5 This file is part of the GNU Fortran runtime library (libgfortran).
6
7 Libgfortran is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11
12 Libgfortran is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 Under Section 7 of GPL version 3, you are granted additional
18 permissions described in the GCC Runtime Library Exception, version
19 3.1, as published by the Free Software Foundation.
20
21 You should have received a copy of the GNU General Public License and
22 a copy of the GCC Runtime Library Exception along with this program;
23 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
24 <http://www.gnu.org/licenses/>.  */
25
26 #ifndef GFOR_UNIX_H
27 #define GFOR_UNIX_H
28
29 #include "io.h"
30
31
32 struct stream
33 {
34   ssize_t (*read) (struct stream *, void *, ssize_t);
35   ssize_t (*write) (struct stream *, const void *, ssize_t);
36   gfc_offset (*seek) (struct stream *, gfc_offset, int);
37   gfc_offset (*tell) (struct stream *);
38   /* Avoid keyword truncate due to AIX namespace collision.  */
39   int (*trunc) (struct stream *, gfc_offset);
40   int (*flush) (struct stream *);
41   int (*close) (struct stream *);
42 };
43
44 /* Inline functions for doing file I/O given a stream.  */
45 static inline ssize_t
46 sread (stream * s, void * buf, ssize_t nbyte)
47 {
48   return s->read (s, buf, nbyte);
49 }
50
51 static inline ssize_t
52 swrite (stream * s, const void * buf, ssize_t nbyte)
53 {
54   return s->write (s, buf, nbyte);
55 }
56
57 static inline gfc_offset
58 sseek (stream * s, gfc_offset offset, int whence)
59 {
60   return s->seek (s, offset, whence);
61 }
62
63 static inline gfc_offset
64 stell (stream * s)
65 {
66   return s->tell (s);
67 }
68
69 static inline int
70 struncate (stream * s, gfc_offset length)
71 {
72   return s->trunc (s, length);
73 }
74
75 static inline int
76 sflush (stream * s)
77 {
78   return s->flush (s);
79 }
80
81 static inline int
82 sclose (stream * s)
83 {
84   return s->close (s);
85 }
86
87
88 extern int compare_files (stream *, stream *);
89 internal_proto(compare_files);
90
91 extern stream *open_external (st_parameter_open *, unit_flags *);
92 internal_proto(open_external);
93
94 extern stream *open_internal (char *, int, gfc_offset);
95 internal_proto(open_internal);
96
97 extern char * mem_alloc_w (stream *, int *);
98 internal_proto(mem_alloc_w);
99
100 extern char * mem_alloc_r (stream *, int *);
101 internal_proto(mem_alloc_r);
102
103 extern stream *input_stream (void);
104 internal_proto(input_stream);
105
106 extern stream *output_stream (void);
107 internal_proto(output_stream);
108
109 extern stream *error_stream (void);
110 internal_proto(error_stream);
111
112 extern int compare_file_filename (gfc_unit *, const char *, int);
113 internal_proto(compare_file_filename);
114
115 extern gfc_unit *find_file (const char *file, gfc_charlen_type file_len);
116 internal_proto(find_file);
117
118 extern int delete_file (gfc_unit *);
119 internal_proto(delete_file);
120
121 extern int file_exists (const char *file, gfc_charlen_type file_len);
122 internal_proto(file_exists);
123
124 extern GFC_IO_INT file_size (const char *file, gfc_charlen_type file_len);
125 internal_proto(file_size);
126
127 extern const char *inquire_sequential (const char *, int);
128 internal_proto(inquire_sequential);
129
130 extern const char *inquire_direct (const char *, int);
131 internal_proto(inquire_direct);
132
133 extern const char *inquire_formatted (const char *, int);
134 internal_proto(inquire_formatted);
135
136 extern const char *inquire_unformatted (const char *, int);
137 internal_proto(inquire_unformatted);
138
139 extern const char *inquire_read (const char *, int);
140 internal_proto(inquire_read);
141
142 extern const char *inquire_write (const char *, int);
143 internal_proto(inquire_write);
144
145 extern const char *inquire_readwrite (const char *, int);
146 internal_proto(inquire_readwrite);
147
148 extern gfc_offset file_length (stream *);
149 internal_proto(file_length);
150
151 extern int is_seekable (stream *);
152 internal_proto(is_seekable);
153
154 extern int is_special (stream *);
155 internal_proto(is_special);
156
157 extern void flush_if_preconnected (stream *);
158 internal_proto(flush_if_preconnected);
159
160 extern void empty_internal_buffer(stream *);
161 internal_proto(empty_internal_buffer);
162
163 extern int stream_isatty (stream *);
164 internal_proto(stream_isatty);
165
166 extern char * stream_ttyname (stream *);
167 internal_proto(stream_ttyname);
168
169 extern int unpack_filename (char *, const char *, int);
170 internal_proto(unpack_filename);
171
172
173 #endif