From: jb Date: Mon, 2 Nov 2009 21:52:59 +0000 (+0000) Subject: Split up io/io.h X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=f65f6629c1b7adae8d06582111f02e58b609a3c1 Split up io/io.h git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@153825 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index b749ea108b7..3ee00936037 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,80 @@ +2009-11-02 Janne Blomqvist + + * Makefile.am (gfor_io_headers): Add fbuf.h, format.h, unix.h. + * Makefile.in: Regenerated. + * io/fbuf.h: New file. + * io/format.h: New file. + * io/unix.h: New file. + * io/io.h (struct stream): Move to unix.h, add forward declaration. + (sread): Likewise. + (swrite): Likewise. + (sseek): Likewise. + (stell): Likewise. + (struncate): Likewise. + (sflush): Likewise. + (sflush): Likewise. + (sclose): Likewise. + (compared_files): Move prototype to unix.h. + (open_external): Likewise. + (open_internal): Likewise. + (mem_alloc_w): Likewise. + (mem_alloc_r): Likewise. + (input_stream): Likewise. + (output_stream): Likewise. + (error_stream): Likewise. + (compare_file_filename): Likewise. + (find_file): Likewise. + (delete_file): Likewise. + (file_exists): Likewise. + (inquire_sequential): Likewise. + (inquire_direct): Likewise. + (inquire_formatted): Likewise. + (inquire_unformatted): Likewise. + (inquire_read): Likewise. + (inquire_write): Likewise. + (inquire_readwrite): Likewise. + (file_length): Likewise. + (is_seekable): Likewise. + (is_special): Likewise. + (flush_if_preconnected): Likewise. + (empty_internal_buffer): Likewise. + (stream_isatty): Likewise. + (stream_ttyname): Likewise. + (unpack_filename): Likewise. + (struct fbuf): Move to fbuf.h, add forward declaration. + (fbuf_init): Move prototype to fbuf.h. + (fbuf_destroy): Likewise. + (fbuf_reset): Likewise. + (fbuf_alloc): Likewise. + (fbuf_flush): Likewise. + (fbuf_seek): Likewise. + (fbuf_read): Likewise. + (fbuf_getc_refill): Likewise. + (fbuf_getc): Move inline function to fbuf.h. + (enum format_token): Move to format.h. + (struct fnode): Move to format.h, add forward declaration. + (parse_format): Move prototype to format.h. + (next_format): Likewise. + (unget_format): Likewise. + (format_error): Likewise. + (free_format_data): Likewise. + (free_format_hash_table): Likewise. + (init_format_hash): Likewise. + (free_format_hash): Likewise. + * io/close.c: Include unix.h. + * io/fbuf.c: Include fbuf.h and unix.h. + * io/file_pos.c: Include fbuf.h and unix.h. + * io/format.c: Include format.h. + * io/inquire.c: Include unix.h. + * io/intrinsics.c: Include fbuf.h and unix.h. + * io/list_read.c: Include fbuf.h and unix.h. + * io/open.c: Include fbuf.h and unix.h. + * io/read.c: Include format.h. + * io/transfer.c: Include fbuf.h, format.h, and unix.h. + * io/unit.c: Likewise. + * io/unix.c: Include unix.h. + * io/write.c: Include format.h and unix.h. + 2009-10-31 Janne Blomqvist PR libfortran/41219 diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am index c2fd941a992..db086bbc6c5 100644 --- a/libgfortran/Makefile.am +++ b/libgfortran/Makefile.am @@ -59,7 +59,10 @@ io/write.c \ io/fbuf.c gfor_io_headers= \ -io/io.h +io/io.h \ +io/fbuf.h \ +io/format.h \ +io/unix.h gfor_helper_src= \ intrinsics/associated.c \ diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in index 462b07b487b..8fca11eaa1c 100644 --- a/libgfortran/Makefile.in +++ b/libgfortran/Makefile.in @@ -451,8 +451,8 @@ am__libgfortran_la_SOURCES_DIST = runtime/backtrace.c runtime/bounds.c \ intrinsics/time.c intrinsics/transpose_generic.c \ intrinsics/umask.c intrinsics/unlink.c \ intrinsics/unpack_generic.c runtime/in_pack_generic.c \ - runtime/in_unpack_generic.c io/io.h \ - $(srcdir)/generated/_abs_c4.F90 \ + runtime/in_unpack_generic.c io/io.h io/fbuf.h io/format.h \ + io/unix.h $(srcdir)/generated/_abs_c4.F90 \ $(srcdir)/generated/_abs_c8.F90 \ $(srcdir)/generated/_abs_c10.F90 \ $(srcdir)/generated/_abs_c16.F90 \ @@ -1004,7 +1004,10 @@ io/write.c \ io/fbuf.c gfor_io_headers = \ -io/io.h +io/io.h \ +io/fbuf.h \ +io/format.h \ +io/unix.h gfor_helper_src = \ intrinsics/associated.c \ diff --git a/libgfortran/io/close.c b/libgfortran/io/close.c index 848b7c9e71a..1a4d7d16eb6 100644 --- a/libgfortran/io/close.c +++ b/libgfortran/io/close.c @@ -23,6 +23,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "io.h" +#include "unix.h" #include typedef enum diff --git a/libgfortran/io/fbuf.c b/libgfortran/io/fbuf.c index e1daa0d32d6..d79cf15c473 100644 --- a/libgfortran/io/fbuf.c +++ b/libgfortran/io/fbuf.c @@ -24,6 +24,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #include "io.h" +#include "fbuf.h" +#include "unix.h" #include #include @@ -37,7 +39,7 @@ fbuf_init (gfc_unit * u, int len) if (len == 0) len = 512; /* Default size. */ - u->fbuf = get_mem (sizeof (fbuf)); + u->fbuf = get_mem (sizeof (struct fbuf)); u->fbuf->buf = get_mem (len); u->fbuf->len = len; u->fbuf->act = u->fbuf->pos = 0; diff --git a/libgfortran/io/file_pos.c b/libgfortran/io/file_pos.c index c1690173658..f7d94996163 100644 --- a/libgfortran/io/file_pos.c +++ b/libgfortran/io/file_pos.c @@ -23,6 +23,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "io.h" +#include "fbuf.h" +#include "unix.h" #include /* file_pos.c-- Implement the file positioning statements, i.e. BACKSPACE, diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c index 0ee60ea9012..cafea8732e4 100644 --- a/libgfortran/io/format.c +++ b/libgfortran/io/format.c @@ -29,6 +29,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see * interpretation during I/O statements */ #include "io.h" +#include "format.h" #include #include #include diff --git a/libgfortran/io/inquire.c b/libgfortran/io/inquire.c index 015b68a26f8..c36b9e5fa69 100644 --- a/libgfortran/io/inquire.c +++ b/libgfortran/io/inquire.c @@ -26,6 +26,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see /* Implement the non-IOLENGTH variant of the INQUIRY statement */ #include "io.h" +#include "unix.h" static const char undefined[] = "UNDEFINED"; diff --git a/libgfortran/io/intrinsics.c b/libgfortran/io/intrinsics.c index 0e33e8490da..9428b759d15 100644 --- a/libgfortran/io/intrinsics.c +++ b/libgfortran/io/intrinsics.c @@ -24,6 +24,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "io.h" +#include "fbuf.h" +#include "unix.h" #ifdef HAVE_STDLIB_H #include diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h index 51143f548aa..b24f81026f0 100644 --- a/libgfortran/io/io.h +++ b/libgfortran/io/io.h @@ -42,63 +42,13 @@ typedef enum } bt; +/* Forward declarations. */ struct st_parameter_dt; - -typedef struct stream -{ - ssize_t (*read) (struct stream *, void *, ssize_t); - ssize_t (*write) (struct stream *, const void *, ssize_t); - off_t (*seek) (struct stream *, off_t, int); - off_t (*tell) (struct stream *); - /* Avoid keyword truncate due to AIX namespace collision. */ - int (*trunc) (struct stream *, off_t); - int (*flush) (struct stream *); - int (*close) (struct stream *); -} -stream; - -/* Inline functions for doing file I/O given a stream. */ -static inline ssize_t -sread (stream * s, void * buf, ssize_t nbyte) -{ - return s->read (s, buf, nbyte); -} - -static inline ssize_t -swrite (stream * s, const void * buf, ssize_t nbyte) -{ - return s->write (s, buf, nbyte); -} - -static inline off_t -sseek (stream * s, off_t offset, int whence) -{ - return s->seek (s, offset, whence); -} - -static inline off_t -stell (stream * s) -{ - return s->tell (s); -} - -static inline int -struncate (stream * s, off_t length) -{ - return s->trunc (s, length); -} - -static inline int -sflush (stream * s) -{ - return s->flush (s); -} - -static inline int -sclose (stream * s) -{ - return s->close (s); -} +typedef struct stream stream; +struct fbuf; +struct format_data; +typedef struct fnode fnode; +struct gfc_unit; /* Macros for testing what kinds of I/O we are doing. */ @@ -131,7 +81,7 @@ array_loop_spec; /* A stucture to build a hash table for format data. */ -#define FORMAT_HASH_SIZE 16 +#define FORMAT_HASH_SIZE 16 typedef struct format_hash_entry { @@ -386,8 +336,6 @@ typedef struct } st_parameter_inquire; -struct gfc_unit; -struct format_data; #define IOPARM_DT_LIST_FORMAT (1 << 7) #define IOPARM_DT_NAMELIST_READ_MODE (1 << 8) @@ -564,24 +512,6 @@ typedef struct unit_flags; -/* Formatting buffer. This is a temporary scratch buffer. Currently used only - by formatted writes. After every - formatted write statement, this buffer is flushed. This buffer is needed since - not all devices are seekable, and T or TL edit descriptors require - moving backwards in the record. However, advance='no' complicates the - situation, so the buffer must only be partially flushed from the end of the - last flush until the current position in the record. */ - -typedef struct fbuf -{ - char *buf; /* Start of buffer. */ - int len; /* Length of buffer. */ - int act; /* Active bytes in buffer. */ - int pos; /* Current position in buffer. */ -} -fbuf; - - typedef struct gfc_unit { int unit_number; @@ -645,152 +575,6 @@ typedef struct gfc_unit } gfc_unit; -/* Format tokens. Only about half of these can be stored in the - format nodes. */ - -typedef enum -{ - FMT_NONE = 0, FMT_UNKNOWN, FMT_SIGNED_INT, FMT_ZERO, FMT_POSINT, FMT_PERIOD, - FMT_COMMA, FMT_COLON, FMT_SLASH, FMT_DOLLAR, FMT_T, FMT_TR, FMT_TL, - FMT_LPAREN, FMT_RPAREN, FMT_X, FMT_S, FMT_SS, FMT_SP, FMT_STRING, - FMT_BADSTRING, FMT_P, FMT_I, FMT_B, FMT_BN, FMT_BZ, FMT_O, FMT_Z, FMT_F, - FMT_E, FMT_EN, FMT_ES, FMT_G, FMT_L, FMT_A, FMT_D, FMT_H, FMT_END, FMT_DC, - FMT_DP, FMT_STAR, FMT_RC, FMT_RD, FMT_RN, FMT_RP, FMT_RU, FMT_RZ -} -format_token; - - -/* Format nodes. A format string is converted into a tree of these - structures, which is traversed as part of a data transfer statement. */ - -typedef struct fnode -{ - format_token format; - int repeat; - struct fnode *next; - char *source; - - union - { - struct - { - int w, d, e; - } - real; - - struct - { - int length; - char *p; - } - string; - - struct - { - int w, m; - } - integer; - - int w; - int k; - int r; - int n; - - struct fnode *child; - } - u; - - /* Members for traversing the tree during data transfer. */ - - int count; - struct fnode *current; - -} -fnode; - - -/* unix.c */ - -extern int compare_files (stream *, stream *); -internal_proto(compare_files); - -extern stream *open_external (st_parameter_open *, unit_flags *); -internal_proto(open_external); - -extern stream *open_internal (char *, int, gfc_offset); -internal_proto(open_internal); - -extern char * mem_alloc_w (stream *, int *); -internal_proto(mem_alloc_w); - -extern char * mem_alloc_r (stream *, int *); -internal_proto(mem_alloc_w); - -extern stream *input_stream (void); -internal_proto(input_stream); - -extern stream *output_stream (void); -internal_proto(output_stream); - -extern stream *error_stream (void); -internal_proto(error_stream); - -extern int compare_file_filename (gfc_unit *, const char *, int); -internal_proto(compare_file_filename); - -extern gfc_unit *find_file (const char *file, gfc_charlen_type file_len); -internal_proto(find_file); - -extern int delete_file (gfc_unit *); -internal_proto(delete_file); - -extern int file_exists (const char *file, gfc_charlen_type file_len); -internal_proto(file_exists); - -extern const char *inquire_sequential (const char *, int); -internal_proto(inquire_sequential); - -extern const char *inquire_direct (const char *, int); -internal_proto(inquire_direct); - -extern const char *inquire_formatted (const char *, int); -internal_proto(inquire_formatted); - -extern const char *inquire_unformatted (const char *, int); -internal_proto(inquire_unformatted); - -extern const char *inquire_read (const char *, int); -internal_proto(inquire_read); - -extern const char *inquire_write (const char *, int); -internal_proto(inquire_write); - -extern const char *inquire_readwrite (const char *, int); -internal_proto(inquire_readwrite); - -extern gfc_offset file_length (stream *); -internal_proto(file_length); - -extern int is_seekable (stream *); -internal_proto(is_seekable); - -extern int is_special (stream *); -internal_proto(is_special); - -extern void flush_if_preconnected (stream *); -internal_proto(flush_if_preconnected); - -extern void empty_internal_buffer(stream *); -internal_proto(empty_internal_buffer); - -extern int stream_isatty (stream *); -internal_proto(stream_isatty); - -extern char * stream_ttyname (stream *); -internal_proto(stream_ttyname); - -extern int unpack_filename (char *, const char *, int); -internal_proto(unpack_filename); /* unit.c */ @@ -847,31 +631,6 @@ internal_proto(get_unique_unit_number); extern gfc_unit *new_unit (st_parameter_open *, gfc_unit *, unit_flags *); internal_proto(new_unit); -/* format.c */ - -extern void parse_format (st_parameter_dt *); -internal_proto(parse_format); - -extern const fnode *next_format (st_parameter_dt *); -internal_proto(next_format); - -extern void unget_format (st_parameter_dt *, const fnode *); -internal_proto(unget_format); - -extern void format_error (st_parameter_dt *, const fnode *, const char *); -internal_proto(format_error); - -extern void free_format_data (struct format_data *); -internal_proto(free_format_data); - -extern void free_format_hash_table (gfc_unit *); -internal_proto(free_format_hash_table); - -extern void init_format_hash (st_parameter_dt *); -internal_proto(init_format_hash); - -extern void free_format_hash (st_parameter_dt *); -internal_proto(free_format_hash); /* transfer.c */ @@ -1014,39 +773,6 @@ internal_proto(size_from_real_kind); extern size_t size_from_complex_kind (int); internal_proto(size_from_complex_kind); -/* fbuf.c */ -extern void fbuf_init (gfc_unit *, int); -internal_proto(fbuf_init); - -extern void fbuf_destroy (gfc_unit *); -internal_proto(fbuf_destroy); - -extern int fbuf_reset (gfc_unit *); -internal_proto(fbuf_reset); - -extern char * fbuf_alloc (gfc_unit *, int); -internal_proto(fbuf_alloc); - -extern int fbuf_flush (gfc_unit *, unit_mode); -internal_proto(fbuf_flush); - -extern int fbuf_seek (gfc_unit *, int, int); -internal_proto(fbuf_seek); - -extern char * fbuf_read (gfc_unit *, int *); -internal_proto(fbuf_read); - -/* Never call this function, only use fbuf_getc(). */ -extern int fbuf_getc_refill (gfc_unit *); -internal_proto(fbuf_getc_refill); - -static inline int -fbuf_getc (gfc_unit * u) -{ - if (u->fbuf->pos < u->fbuf->act) - return (unsigned char) u->fbuf->buf[u->fbuf->pos++]; - return fbuf_getc_refill (u); -} /* lock.c */ extern void free_ionml (st_parameter_dt *); diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c index d8ad602e593..c281e34eacf 100644 --- a/libgfortran/io/list_read.c +++ b/libgfortran/io/list_read.c @@ -27,6 +27,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #include "io.h" +#include "fbuf.h" +#include "unix.h" #include #include #include diff --git a/libgfortran/io/open.c b/libgfortran/io/open.c index d5b4007ea23..bca21062956 100644 --- a/libgfortran/io/open.c +++ b/libgfortran/io/open.c @@ -25,6 +25,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "io.h" +#include "fbuf.h" +#include "unix.h" #include #include #include diff --git a/libgfortran/io/read.c b/libgfortran/io/read.c index 23a8fa3019d..a5cb97a00e5 100644 --- a/libgfortran/io/read.c +++ b/libgfortran/io/read.c @@ -24,6 +24,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "io.h" +#include "format.h" #include #include #include diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index 06a1d2eb984..b5f52b1ccf3 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -29,6 +29,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see /* transfer.c -- Top level handling of data transfer statements. */ #include "io.h" +#include "fbuf.h" +#include "format.h" +#include "unix.h" #include #include #include diff --git a/libgfortran/io/unit.c b/libgfortran/io/unit.c index 5dc3538f264..3eb66e9d26d 100644 --- a/libgfortran/io/unit.c +++ b/libgfortran/io/unit.c @@ -24,6 +24,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "io.h" +#include "fbuf.h" +#include "format.h" +#include "unix.h" #include #include diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index 4ecba3a8f69..d385b040c9e 100644 --- a/libgfortran/io/unix.c +++ b/libgfortran/io/unix.c @@ -27,6 +27,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see /* Unix stream I/O module */ #include "io.h" +#include "unix.h" #include #include diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c index 8a1c20abee3..63482461cc2 100644 --- a/libgfortran/io/write.c +++ b/libgfortran/io/write.c @@ -26,6 +26,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "io.h" +#include "format.h" +#include "unix.h" #include #include #include