PR libfortran/25116
* io/transfer.c (data_transfer_init): Don't set the default for
namelist I/O on preconnected files to UNFORMATTED.
From-SVN: r107900
2005-11-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/25109
* io/unit.c (init_units): Set default flag to BLANK_NULL per
requirement of F95 standard. Set PAD_YES for stdin.
From-SVN: r107588
PR libfortran/24919
* io/list_read.c (eat_separator, finish_separator,
read_character): Handle CRLF separators correctly during reads.
(nml_query): Use the HAVE_CRLF macro to print adequate newlines.
* io/io.h (st_parameter_dt): Add comment about the possible
values for sf_seen_eor.
* io/unix.c (tempfile, regular_file): HAVE_CRLF doesn't imply
that O_BINARY is defined, so we add that condition.
(stream_at_bof): Fix typo in comment.
* io/transfer.c (read_sf): Handle correctly CRLF, setting
sf_seen_eor value to 2 instead of 1.
(formatted_transfer_scalar): Use the sf_seen_eor value to
handle CRLF the right way.
* io/write.c (nml_write_obj, namelist_write): Use CRLF as newline
when HAVE_CRLF is defined.
* gfortran.dg/ftell_1.f90: Modify testcase so that it doesn't
fail on CRLF platforms.
* gfortran.dg/ftell_2.f90: Likewise.
From-SVN: r107563
* io/list_read.c (nml_parse_qualifier): Use memcpy to extract
values from dtp->u.p.value.
* io/io.h (struct st_parameter_dt): Change reversion_flag, first_item,
seen_dollar, sf_seen_eor, eor_condition, no_leading_blank, char_flag,
input_complete, at_eol, comma_flag, namelist_mode, nml_read_error to
single-bit fields. Move value to where it'll be at least pointer
aligned.
From-SVN: r107520
2005-11-22 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/24794
* io/list_read.c (read_character): Add auto completion on short
namelist reads.
From-SVN: r107394
gcc/fortran/
PR fortran/14943
PR fortran/21647
* Make-lang.in (fortran/trans-io.o): Depend on fortran/ioparm.def.
* dump-parse-tree.c (gfc_show_code_node): Dump c->block for
EXEC_{READ,WRITE,IOLENGTH} nodes.
* io.c (terminate_io, match_io, gfc_match_inquire): Put data
transfer commands into EXEC_{READ,WRITE,IOLENGTH}'s code->block.
* resolve.c (resolve_blocks): Handle EXEC_{READ,WRITE,IOLENGTH}.
* trans-io.c (ioparm_unit, ioparm_err, ioparm_end, ioparm_eor,
ioparm_list_format, ioparm_library_return, ioparm_iostat,
ioparm_exist, ioparm_opened, ioparm_number, ioparm_named,
ioparm_rec, ioparm_nextrec, ioparm_size, ioparm_recl_in,
ioparm_recl_out, ioparm_iolength, ioparm_file, ioparm_file_len,
ioparm_status, ioparm_status_len, ioparm_access, ioparm_access_len,
ioparm_form, ioparm_form_len, ioparm_blank, ioparm_blank_len,
ioparm_position, ioparm_position_len, ioparm_action,
ioparm_action_len, ioparm_delim, ioparm_delim_len, ioparm_pad,
ioparm_pad_len, ioparm_format, ioparm_format_len, ioparm_advance,
ioparm_advance_len, ioparm_name, ioparm_name_len,
ioparm_internal_unit, ioparm_internal_unit_len,
ioparm_internal_unit_desc, ioparm_sequential, ioparm_sequential_len,
ioparm_direct, ioparm_direct_len, ioparm_formatted,
ioparm_formatted_len, ioparm_unformatted, ioparm_unformatted_len,
ioparm_read, ioparm_read_len, ioparm_write, ioparm_write_len,
ioparm_readwrite, ioparm_readwrite_len, ioparm_namelist_name,
ioparm_namelist_name_len, ioparm_namelist_read_mode, ioparm_iomsg,
ioparm_iomsg_len, ioparm_var): Remove.
(enum ioparam_type, enum iofield_type, enum iofield,
enum iocall): New enums.
(gfc_st_parameter_field, gfc_st_parameter): New typedefs.
(st_parameter, st_parameter_field, iocall): New variables.
(ADD_FIELD, ADD_STRING): Remove.
(dt_parm, dt_post_end_block): New variables.
(gfc_build_st_parameter): New function.
(gfc_build_io_library_fndecls): Use it. Initialize iocall
array rather than ioparm_*, add extra first arguments to
the function types.
(set_parameter_const): New function.
(set_parameter_value): Add type argument, return a bitmask.
Changed to set a field in automatic structure variable rather
than set a field in a global _gfortran_ioparm variable.
(set_parameter_ref): Likewise. If requested var has different
size than what field should point to, call with a temporary and
then copy into the user variable. Add postblock argument.
(set_string): Remove var_len argument, add type argument, return
a bitmask. Changed to set fields in automatic structure variable
rather than set a field in a global _gfortran_ioparm variable.
(set_internal_unit): Remove iunit, iunit_len, iunit_desc arguments,
add var argument. Return a bitmask. Changed to set fields in
automatic structure variable rather than set a field in a global
_gfortran_ioparm variable.
(set_flag): Removed.
(io_result): Add var argument. Changed to read common.flags field
from automatic structure variable and bitwise AND it with 3.
(set_error_locus): Add var argument. Changed to set fields in
automatic structure variable rather than set a field in a global
_gfortran_{filename,line} variables.
(gfc_trans_open): Use gfc_start_block rather than gfc_init_block.
Create a temporary st_parameter_* structure. Adjust callers of
all above mentioned functions. Pass address of the temporary
variable as first argument to the generated function call.
Use iocall array rather than ioparm_* separate variables.
(gfc_trans_close, build_filepos, gfc_trans_inquire): Likewise.
(build_dt): Likewise. Change first argument to tree from tree *.
Don't dereference code->ext.dt if last_dt == INQUIRE. Emit
IOLENGTH argument setup here. Set dt_parm/dt_post_end_block
variables and gfc_trans_code the nested data transfer commands
in code->block.
(gfc_trans_iolength): Just set last_dt and call build_dt immediately.
(transfer_namelist_element): Pass address of dt_parm variable
to generated functions. Use iocall array rather than ioparm_*
separate variables.
(gfc_trans_backspace, gfc_trans_endfile, gfc_trans_rewind,
gfc_trans_flush, gfc_trans_read, gfc_trans_write): Use iocall array
rather than ioparm_* separate variables.
(gfc_trans_dt_end): Likewise. Pass address of dt_parm variable
as first argument to generated function. Adjust io_result caller.
Prepend dt_post_end_block before io_result code.
(transfer_expr): Use iocall array rather than ioparm_* separate
variables. Pass address of dt_parm variables as first argument
to generated functions.
* ioparm.def: New file.
gcc/testsuite/
PR fortran/24774
* gfortran.dg/inquire_9.f90: New test.
PR fortran/21647
* gfortran.fortran-torture/execute/inquire_5.f90: New test.
libgfortran/
PR fortran/24774
PR fortran/14943
PR fortran/21647
* Makefile.am (AM_CPPFLAGS): Add gcc directories as -I paths,
add -D_GNU_SOURCE.
* Makefile.in: Regenerated.
* acinclude.m4 (LIBGFOR_CHECK_SYNC_FETCH_AND_ADD,
LIBGFOR_CHECK_GTHR_DEFAULT, LIBGFOR_CHECK_PRAGMA_WEAK): New macros.
* configure.ac: Add them.
* configure: Rebuilt.
* config.h.in: Rebuilt.
* libtool-version: Bump libgfortran.so SONAME to libgfortran.so.1.
* libgfortran.h (library_start, show_locus, internal_error,
generate_error, find_option): Add st_parameter_common * argument.
(library_end): Change into a dummy macro.
* io/io.h: Include gthr.h.
(SUPPORTS_WEAK): Define if HAVE_PRAGMA_WEAK.
(CHARACTER): Remove define.
(st_parameter, global_t): Remove typedef.
(ioparm, g, ionml, current_unit): Remove variables.
(init_error_stream): Remove prototype.
(CHARACTER1, CHARACTER2): Define.
(st_parameter_common, st_parameter_open, st_parameter_close,
st_parameter_filepos, st_parameter_inquire, st_parameter_dt): New
typedefs.
(IOPARM_LIBRETURN_MASK, IOPARM_LIBRETURN_OK, IOPARM_LIBRETURN_ERROR,
IOPARM_LIBRETURN_END, IOPARM_LIBRETURN_EOR, IOPARM_ERR, IOPARM_END,
IOPARM_EOR, IOPARM_HAS_IOSTAT, IOPARM_HAS_IOMSG, IOPARM_COMMON_MASK,
IOPARM_OPEN_HAS_RECL_IN, IOPARM_OPEN_HAS_FILE, IOPARM_OPEN_HAS_STATUS,
IOPARM_OPEN_HAS_ACCESS, IOPARM_OPEN_HAS_FORM, IOPARM_OPEN_HAS_BLANK,
IOPARM_OPEN_HAS_POSITION, IOPARM_OPEN_HAS_ACTION,
IOPARM_OPEN_HAS_DELIM, IOPARM_OPEN_HAS_PAD, IOPARM_CLOSE_HAS_STATUS,
IOPARM_INQUIRE_HAS_EXIST, IOPARM_INQUIRE_HAS_OPENED,
IOPARM_INQUIRE_HAS_NUMBER, IOPARM_INQUIRE_HAS_NAMED,
IOPARM_INQUIRE_HAS_NEXTREC, IOPARM_INQUIRE_HAS_RECL_OUT,
IOPARM_INQUIRE_HAS_FILE, IOPARM_INQUIRE_HAS_ACCESS,
IOPARM_INQUIRE_HAS_FORM, IOPARM_INQUIRE_HAS_BLANK,
IOPARM_INQUIRE_HAS_POSITION, IOPARM_INQUIRE_HAS_ACTION,
IOPARM_INQUIRE_HAS_DELIM, IOPARM_INQUIRE_HAS_PAD,
IOPARM_INQUIRE_HAS_NAME, IOPARM_INQUIRE_HAS_SEQUENTIAL,
IOPARM_INQUIRE_HAS_DIRECT, IOPARM_INQUIRE_HAS_FORMATTED,
IOPARM_INQUIRE_HAS_UNFORMATTED, IOPARM_INQUIRE_HAS_READ,
IOPARM_INQUIRE_HAS_WRITE, IOPARM_INQUIRE_HAS_READWRITE,
IOPARM_DT_LIST_FORMAT, IOPARM_DT_NAMELIST_READ_MODE,
IOPARM_DT_HAS_REC, IOPARM_DT_HAS_SIZE, IOPARM_DT_HAS_IOLENGTH,
IOPARM_DT_HAS_FORMAT, IOPARM_DT_HAS_ADVANCE,
IOPARM_DT_HAS_INTERNAL_UNIT, IOPARM_DT_HAS_NAMELIST_NAME,
IOPARM_DT_IONML_SET): Define.
(gfc_unit): Add lock, waiting and close fields. Change file
from flexible array member into pointer to char.
(open_external): Add st_parameter_open * argument.
(find_file, file_exists): Add file and file_len arguments.
(flush_all_units): New prototype.
(max_offset, unit_root, unit_lock): New variable.
(is_internal_unit, is_array_io, next_array_record,
parse_format, next_format, unget_format, format_error,
read_block, write_block, next_record, convert_real,
read_a, read_f, read_l, read_x, read_radix, read_decimal,
list_formatted_read, finish_list_read, namelist_read,
namelist_write, write_a, write_b, write_d, write_e, write_en,
write_es, write_f, write_i, write_l, write_o, write_x, write_z,
list_formatted_write, get_unit): Add st_parameter_dt * argument.
(insert_unit): Remove prototype.
(find_or_create_unit, unlock_unit): New prototype.
(new_unit): Return gfc_unit *. Add st_parameter_open *
and gfc_unit * arguments.
(free_fnodes): Remove prototype.
(free_format_data): New prototype.
(scratch): Remove.
(init_at_eol): Remove prototype.
(free_ionml): New prototype.
(inc_waiting_locked, predec_waiting_locked, dec_waiting_unlocked):
New inline functions.
* io/unit.c (max_offset, unit_root, unit_lock): New variables.
(insert): Adjust os_error caller.
(insert_unit): Made static. Allocate memory here, initialize
lock and after inserting it return it, locked.
(delete_unit): Adjust for deletion of g.
(find_unit_1): New function.
(find_unit): Use it.
(find_or_create_unit): New function.
(get_unit): Add dtp argument, change meaning of the int argument
as creation request flag. Adjust for different st_* calling
conventions, lock internal unit's lock before returning it
and removal of g. Call find_unit_1 instead of find_unit.
(is_internal_unit, is_array_io): Add dtp argument, adjust for
removal of most of global variables.
(init_units): Initialize unit_lock. Adjust insert_unit callers
and adjust for g removal.
(close_unit_1): New function.
(close_unit): Use it.
(unlock_unit): New function.
(close_units): Lock unit_lock, use close_unit_1 rather than
close_unit.
* io/close.c (st_close): Add clp argument. Adjust for new
st_* calling conventions and internal function API changes.
* io/file_pos.c (st_backspace, st_endfile, st_rewind, st_flush):
Add fpp argument. Adjust for new st_* calling conventions and
internal function API changes.
(formatted_backspace, unformatted_backspace): Likewise. Add
u argument.
* io/open.c (edit_modes, st_open): Add opp argument. Adjust for
new st_* calling conventions and internal function API changes.
(already_open): Likewise. If not HAVE_UNLINK_OPEN_FILE, unlink
scratch file. Instead of calling close_unit just call sclose,
free u->file if any and clear a few u fields before calling
new_unit.
(new_unit): Return gfc_unit *. Add opp and u arguments.
Adjust for new st_* calling conventions and internal function
API changes. Don't allocate unit here, rather than work with
already created unit u already locked on entry. In case
of failure, close_unit it.
* io/unix.c: Include unix.h.
(BUFFER_SIZE, unix_stream): Moved to unix.h.
(unit_to_fd): Add unlock_unit call.
(tempfile): Add opp argument, use its fields rather than ioparm.
(regular_file): Likewise.
(open_external): Likewise. Only unlink file if fd >= 0.
(init_error_stream): Add error argument, set structure it points
to rather than filling static variable and returning its address.
(FIND_FILE0_DECL, FIND_FILE0_ARGS): Define.
(find_file0): Use them. Don't crash if u->s == NULL.
(find_file): Add file and file_len arguments, use them instead
of ioparm. Add locking. Pass either an array of 2 struct stat
or file and file_len pair to find_file0.
(flush_all_units_1, flush_all_units): New functions.
(file_exists): Add file and file_len arguments, use them instead
of ioparm.
* io/unix.h: New file.
* io/lock.c (ioparm, g, ionml): Remove variables.
(library_start): Add cmp argument, adjust for new st_* calling
conventions.
(library_end): Remove.
(free_ionml): New function.
* io/inquire.c (inquire_via_unit, inquire_via_filename,
st_inquire): Add iqp argument, adjust for new st_* calling
conventions and internal function API changes.
* io/format.c (FARRAY_SIZE): Decrease to 64.
(fnode_array, format_data): New typedefs.
(avail, array, format_string, string, error, saved_token, value,
format_string_len, reversion_ok, saved_format): Remove variables.
(colon_node): Add const.
(free_fnode, free_fnodes): Remove.
(free_format_data): New function.
(next_char, unget_char, get_fnode, format_lex, parse_format_list,
format_error, parse_format, revert, unget_format, next_test): Add
fmt or dtp arguments, pass it all around, adjust for internal
function API changes and adjust for removal of global variables.
(next_format): Likewise. Constify return type.
(next_format0): Constify return type.
* io/transfer.c (current_unit, sf_seen_eor, eor_condition, max_pos,
skips, pending_spaces, scratch, line_buffer, advance_status,
transfer): Remove variables.
(transfer_integer, transfer_real, transfer_logical,
transfer_character, transfer_complex, transfer_array, current_mode,
read_sf, read_block, read_block_direct, write_block,
write_block_direct, unformatted_read, unformatted_write,
type_name, write_constant_string, require_type,
formatted_transfer_scalar, us_read, us_write, pre_position,
data_transfer_init, next_record_r, next_record_w, next_record,
finalize_transfer, iolength_transfer, iolength_transfer_init,
st_iolength, st_iolength_done, st_read, st_read_done, st_write,
st_write_done, st_set_nml_var, st_set_nml_var_dim,
next_array_record): Add dtp argument, pass it all around, adjust for
internal function API changes and removal of global variables.
* io/list_read.c (repeat_count, saved_length, saved_used,
input_complete, at_eol, comma_flag, last_char, saved_string,
saved_type, namelist_mode, nml_read_error, value, parse_err_msg,
nml_err_msg, prev_nl): Remove variables.
(push_char, free_saved, next_char, unget_char, eat_spaces,
eat_separator, finish_separator, nml_bad_return, convert_integer,
parse_repeat, read_logical, read_integer, read_character,
parse_real, read_complex, read_real, check_type,
list_formatted_read_scalar, list_formatted_read, finish_list_read,
find_nml_node, nml_untouch_nodes, nml_match_name, nml_query,
namelist_read): Add dtp argument, pass it all around, adjust for
internal function API changes and removal of global variables.
(nml_parse_qualifier): Likewise. Add parse_err_msg argument.
(nml_read_obj): Likewise. Add pprev_nl, nml_err_msg, clow and
chigh arguments.
(nml_get_obj_data): Likewise. Add pprev_nl and nml_err_msg
arguments.
(init_at_eol): Removed.
* io/read.c (convert_real, read_l, read_a, next_char, read_decimal,
read_radix, read_f, read_x): Add dtp argument, pass it all around,
adjust for internal function API changes and removal of global
variables.
(set_integer): Adjust internal_error caller.
* io/write.c (no_leading_blank, nml_delim): Remove variables.
(write_a, calculate_sign, calculate_G_format, output_float,
write_l, write_float, write_int, write_decimal, write_i, write_b,
write_o, write_z, write_d, write_e, write_f, write_en, write_es,
write_x, write_char, write_logical, write_integer, write_character,
write_real, write_complex, write_separator,
list_formatted_write_scalar, list_formatted_write, nml_write_obj,
namelist_write): Add dtp argument, pass it all around, adjust for
internal function API changes and removal of global variables.
(extract_int, extract_uint, extract_real): Adjust internal_error
callers.
* runtime/fpu.c (_GNU_SOURCE): Don't define here.
* runtime/error.c: Include ../io/unix.h.
(filename, line): Remove variables.
(st_printf): Pass address of a local variable to init_error_stream.
(show_locus): Add cmp argument. Use fields it points to rather than
filename and line variables.
(os_error, runtime_error): Remove show_locus calls.
(internal_error): Add cmp argument. Pass it down to show_locus.
(generate_error): Likewise. Use flags bitmask instead of non-NULL
check for iostat and iomsg parameter presence, adjust for st_*
calling convention changes.
* runtime/stop.c (stop_numeric, stop_string): Remove show_locus
calls.
* runtime/pause.c (pause_numeric, pause_string): Likewise.
* runtime/string.c: Include ../io/io.h.
(find_option): Add cmp argument. Pass it down to generate_error.
* intrinsics/flush.c (recursive_flush): Remove.
(flush_i4, flush_i8): Use flush_all_units. Add unlock_unit
call.
* intrinsics/rand.c: Include ../io/io.h.
(rand_seed_lock): New variable.
(srand, irand): Add locking.
(init): New constructor function.
* intrinsics/random.c: Include ../io/io.h.
(random_lock): New variable.
(random_r4, random_r8, arandom_r4, arandom_r8): Add locking.
(random_seed): Likewise. open failed if fd < 0. Set i correctly.
(init): New constructor function.
* intrinsics/system_clock.c (tp0, t0): Remove.
(system_clock_4, system_clock_8): Don't subtract tp0/t0 from current
time, use just integer arithmetics.
* intrinsics/tty.c (isatty_l4, isatty_l8, ttynam_sub): Add
unlock_unit calls.
From-SVN: r107328
PR fortran/24892
* io/io.h (unit_access): Add ACCESS_APPEND.
* io/open.c (access_opt): Add APPEND value for ACCESS keyword.
(st_open): Use that new value to set the POSITION accordingly.
* gfortran.dg/open_access_append_1.f90: New test.
* gfortran.dg/open_access_append_2.f90: New test.
From-SVN: r107119
2005-10-24 Jerry DeLisle <jvdelisle@verizon.net>
PR libgfortran/24224
* libgfortran.h: Remove array stride error code.
* runtime/error.c: Remove array stride error.
* io/io.h: Change name of 'nml_loop_spec' to 'array_loop_spec' to be
generic. Add pointer to array_loop_spec and rank to gfc_unit
structure.
* io/list_read.c: Revise nml_loop_spec references to array_loop_spec.
* io/transfer.c (init_loop_spec): New function to initialize
an array_loop_spec.
(next_array_record): New function to return the index to the next array
record by incrementing through the array_loop_spec.
(next_record_r): Use new function.
(next_record_w): Use new function.
(finalize_transfer): Free memory allocated for array_loop_spec.
* io/unit.c (get_array_unit_len): Delete this function. Use new
function init_loop_spec to initialize the array_loop_spec.
From-SVN: r105878
2005-10-24 Paul Thomas <pault@gcc.gnu.org>
PR fortran/24416
* libgfortran/io/list_read.c (namelist_read): Exit with call to
free_saved () so that character strings do not accumulate.
2005-10-24 Paul Thomas <pault@gcc.gnu.org>
PR fortran/24416
gfortran.dg/namelist_char_only.f90: New test.
From-SVN: r105862
2005-10-23 Jerry DeLisle <jvdelisle@verizon.net>
PR libgfortran/24489
* io/transfer.c (read_block): Change the order of execution to not read
past end-of-record.
(read_block_direct): Same change.
From-SVN: r105840
PR libfortran/23272
* acinclude.m4 (LIBGFOR_CHECK_WORKING_STAT): New check.
* configure.ac: Use LIBGFOR_CHECK_WORKING_STAT.
* Makefile.in: Regenerate.
* aclocal.m4: Regenerate.
* config.h.in: Regenerate.
* configure: Regenerate.
* io/unix.c (compare_file_filename): Add fallback case for
systems without working stat.
* io/open.c (already_open): Correct call to
compare_file_filename.
* io/io.h: Correct proto for compare_file_filename.
From-SVN: r105824
2005-10-13 Thomas Koenig <Thomas.Koenig@online.de>
* io/unix.c(fd_alloc_r_at): Use read() instead of do_read()
only in case of special files (e.g. terminals).
From-SVN: r105373
2005-10-12 Janne Blomqvist <jblomqvi@cc.hut.fi>
* io/unix.c: Remove parts of patch of 2005/10/07 that cause
input from the terminal to hang.
From-SVN: r105324
2005-10-07 Janne Blomqvist <jblomqvi@cc.hut.fi>
PR fortran/16339
PR fortran/23363
* io/io.h: Add read and write members to stream, define access
macros.
* io/transfer.c (read_block_direct): New function.
(write_block_direct): New function.
(unformatted_read): Change to use read_block_direct.
(unformatted_write): Change to use write_block_direct.
* io/unix.c: Remove mmap includes and defines.
(writen): Remove.
(readn): Remove.
(reset_stream): New function.
(do_read): New function.
(do_write): New function.
(fd_flush): Change to use do_write() instead of writen().
(fd_alloc_r_at): Change to use do_read().
(fd_seek): Change return type to try, as the prototype. Add check
to avoid syscall overhead if possible.
(fd_read): New function.
(fd_write): New function.
(fd_open): Set pointers for new functions.
(mem_read): New function.
(mem_write): New function.
(open_internal): Set pointers for new functions.
(is_seekable): Clean up comment.
From-SVN: r105101
2005-10-07 Jerry DeLisle <jvdelisle@verizon.net>
* io/transfer.c (write_block): Add test for end-of-file condition,
removed from mem_alloc_w_at. (next_record_w): Clean up checks for
NULL pointer returns from s_alloc_w.
* io/unix.c (mem_alloc_w_at): Remove call to generate_error end-of-file.
* io/write.c (write_float): Add checks for NULL pointer returns from
write_block calls. (write_integer): Same.
From-SVN: r105092
2005-09-24 Janne Blomqvist <jblomqvi@cc.hut.fi>
* trans-io.c (gfc_build_io_library_fndecls): Add entry
iocall_x_array for transfer_array. (transfer_array_desc): New
function. (gfc_trans_transfer): Add code to call
transfer_array_desc.
2005-09-24 Janne Blomqvist <jblomqvi@cc.hut.fi>
* io.h: Changed prototypes of list_formatted_{read|write}.
* list_read.c (list_formatted_read): Renamed to
list_formatted_read_scalar and made static. (list_formatted_read):
New function.
* transfer.c: Prototype for transfer_array. Changed transfer
function pointer. (unformatted_read): Add nelems argument, use
it. (unformatted_write): Likewise. (formatted_transfer): Changed
name to formatted_transfer_scalar. (formatted_transfer): New
function. (transfer_integer): Add nelems argument to transfer
call, move updating item count to transfer
functions. (transfer_real): Likewise. (transfer_logical):
Likewise. (transfer_character): Likewise. (transfer_complex):
Likewise. (transfer_array): New function. (data_transfer_init):
Call formatted_transfer with new argument. (iolength_transfer):
New argument, use it.
* write.c (list_formatted_write): Renamed to
list_formatted_write_scalar, made static. (list_formatted_write):
New function.
From-SVN: r104662
2005-09-14 Jerry DeLisle <jvdelisle@verizon.net
PR fortran/21875 Internal Unit Array I/O, NIST
* libgfortran.h: Add run time error code for array stride.
* runtime/error.c (translate_error): Add error message for
array stride.
* io/io.h: Add array descriptor pointer to IOPARM structure.
Add prtotypes for two new functions.
* io/transfer.c (data_transfer_init): Removed initialization and
moved to unit.c (get_unit)
* io/transfer.c (next_record_r): Include internal unit read
functionality.
* io/transfer.c (next_record_w): Include internal unit write
functionality, including padding of character array records.
* io/unit.c (get_array_unit_len): New function to return the number
of records in the character array 'file' from the array descriptor.
* io/unit.c (get_unit): Gathered initialization code from
init_data_transfer for internal units and added initialization of
character array unit.
* io/unit.c (is_array_io): New function to determine if internal unit
is an array.
* io/unix.c (mem_alloc_w_at): Add error checks for bad record length
and end of file.
From-SVN: r104276
PR libfortran/20179
* io/unix.c (is_preconnected): Add function to test if a stream
corresponds to a preconnected unit.
* io/io.h: Add prototype for is_preconnected.
* io/transfer.c (data_transfer_init): Do not truncate
preconnected units.
From-SVN: r104141
PR libfortran/23262
* acinclude.m4 (LIBGFOR_CHECK_CRLF): New check.
* configure.ac: Use new check.
* configure.in: Regenerate.
* config.h.in: Regenerate.
* configure: Regenerate.
* io/transfer.c (next_record_w): Add case for CRLF as line
terminator.
* io/unix.c (tempfile, regular_file): Open files with
O_BINARY on systems with CRLF.
From-SVN: r104009
2005-09-04 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/23321
* io/transfer.c(data_transfer_init): Check for a too-large
record number. Return if sseek failed.
2005-09-04 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/23321
* gfortran.dg/direct_io_4.f90: New test case.
From-SVN: r103835
* io/read.c (read_x): Take int argument instead of fnode * and
digging the N from F->u.n.
* io/io.h (read_x): Adjust prototype.
* io/transfer.c (formatted_transfer): Adjust callers. Don't clobber
f->u.n for FMT_T.
* gfortran.dg/fmt_t_1.f90: New test.
From-SVN: r103811
2005-08-29 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/23598
* io/lock.c(library_start): If ioparm.iostat is present, clear
it unconditionally.
2005-02-29 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/23598
* gfortran.dg/iostat_1.f90: New test.
From-SVN: r103613
* acinclude.m4 (LIBGFOR_CHECK_UNLINK_OPEN_FILE): Add check to see
if target can unlink open files.
* configure.ac: Use this new test.
* config.h.in: Regenerate.
* configure: Regenerate.
* Makefile.in: Regenerate.
* aclocal.ac: Regenerate.
* io/io.h: Add prototype for unpack_filename.
* io/close.c (st_close): Delete file after closing unit if
HAVE_UNLINK_OPEN_FILE is not defined.
* io/unix.c (unpack_filename): Unlink scratch file after opening
it only if HAVE_UNLINK_OPEN_FILE is defined.
From-SVN: r103566
2005-08-16 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/23428
* io/transfer.c (iolength_transfer): Remove __attribute__ ((unused))
from type. Return correct length for inquire(iolength=)
for complex variables.
2005-08-16 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/23428
* gfortran.dg/inquire-complex.f90: New test case.
From-SVN: r103168
PR libfortran/20006
* gfortran.h: Add is_main_program member to symbol_attribute.
* trans-decl: Add a gfor_fndecl_set_std tree.
(gfc_build_builtin_function_decls): Create it.
(gfc_generate_function_code): Add this call at the beginning of
the main program.
* trans.c (gfc_generate_code): Move main_program and attr.
* trans.h: Add declaration for gfor_fndecl_set_std.
* Makefile.am: Add file runtime/compile_options.c.
* Makefile.in: Regenerate.
* libgfortran.h: Create structure compile_options_t. Define the
compile_options variable and GFC_STD_ macros.
* runtime/compile_options.c: New file.
* runtime/error.c (notify_std): New function.
* runtime/main.c (init): Call init_compile_options during
initialization.
* io/format.c: Use the new notify_std function for the $
descriptor extension.
* gfortran.dg/runtime_warning_1.f90: New test.
Co-Authored-By: Steven Bosscher <stevenb@suse.de>
From-SVN: r102990
* check.c (gfc_check_ttynam_sub, gfc_check_isatty): Add check
functions for new intrinsics TTYNAM and ISATTY.
* intrinsic.c (add_functions, add_subroutines): Add new
intrinsics.
* intrinsic.h: Add prototypes for new check and resolve
functions.
* iresolve.c (gfc_resolve_isatty, gfc_resolve_ttynam_sub): New
resolve functions for intrinsics TTYNAM and ISATTY.
* gfortran.h (gfc_generic_isym_id): Add symbol for ISATTY.
* trans-intrinsic.c: Add case for GFC_ISYM_ISATTY.
* Makefile.am: Add file intrinsics/tty.c to Makefile process.
* Makefile.in: Regenerate.
* io/io.h: Prototypes for new functions stream_isatty and
stream_ttyname.
* io/unix (stream_isatty, stream_ttyname): New functions to call
isatty() and ttyname() on a given unit.
* intrinsics/tty.c: New file to implement g77 intrinsics TTYNAM
and ISATTY.
From-SVN: r102915
* io/io.h: Change DEFAULT_TEMPDIR to /tmp instead of /var/tmp.
* io/unix.c (tempfile): Look at the TEMP environment variable
to find the temporary files directory. Whitespace correction.
From-SVN: r102822
2005-08-04 Paul Thomas <pault@gcc.gnu.org>
* transfer.c (data_transfer_init): Truncate file in
sequential WRITE when last_record == 0, rather than
current_record. Cures problem on RH9.
From-SVN: r102746
2005-07-30 Paul Thomas <pault@gcc.gnu.org>
PR fortran/22570 and related issues.
* transfer.c (formatted_transfer): Make sure that there
really is data present before X- or T- editing. Move all
treatment of tabbing during writes to start of next data
producing format. Suppress incorrect zeroing of bytes_left
in slash formating. Insert int cast for assignment of a
difference of two gfc_offsets.
PR fortran/22570 an related issues.
* gfortran.dg/x_slash_1.f: New test.
From-SVN: r102583
2005-07-23 Jerry DeLisle <jvdelisle@verizon.net>
* io/write.c (write_float): Revise output of IEEE exceptional
values to comply with F95 and F2003 standards.
From-SVN: r102324
2005-07-22 Jerry DeLisle <jvdelisle@verizon.net>
PR libfortran/21875 (FM111.f)
* io/read.c (next_char): Return a ' ' character when BLANK_ZERO
or BLANK_NULL are active.
(read_decimal): Interpret ' ' character correctly for BZ or BN.
(read_radix): Interpret ' ' character correctly for BZ or BN.
(read_f): Interpret ' ' character correctly for BZ or BN.
2005-07-22 Paul Thomas <pault@gcc.gnu.org>
PR libfortran/22570
* read.c (read_x): Correct the condition for doing the
x-editing during formatted input.
* transfer.c (formatted_transfer): Cast offset difference
as int, clean-up arithmetic with new variable, bytes_used,
zero counters for FMT_SLASH,
(data_transfer_init) Zero X- and T-editing counters
unconditionally.
(next_record_w) Zero X- and T-editing counters.
unconditionally.
From-SVN: r102284
2005-07-14 Jerry DeLisle <jvdelisle@verizon.net>
* io/write.c (write_float): Fix field width checks for
printing 'Infinity' or 'Inf'.
(output_float): Fix typo in comment.
From-SVN: r102115
2005-07-12 Paul Thomas <pault@gcc.gnu.org>
PR libfortran/16435
* transfer.c (formatted_transfer): Correct the problems
with X- and T-editting that caused TLs followed by TRs
to overwrite data, which caused NIST FM908.FOR to fail
on many tests.
(data_transfer_init): Zero X- and T-editting counters at
the start of formatted IO.
* write.c (write_x): Write specified number of skips with
specified number of spaces at the end.
2005-07-12 Paul Thomas <pault@gcc.gnu.org>
PR libfortran/16435
* gfortran.dg/tl_editting.f90: New.
* gfortran.dg/g77/f77-edit-x-out.f: Remove XFAIL.
From-SVN: r102008
2005-07-13 Paul Thomas <pault@gcc.gnu.org>
* io/read.c (read_complex): Prevent X formatting during reads
from going beyond EOR to fix NIST fm908.FOR failure.
* io/list_read.c (read_complex): Allow complex data in list-
directed reads to have eols either side of the comma to
fix NIST FM906.FOR failure.
2005-07-13 Paul Thomas <pault@gcc.gnu.org>
* gfortran.dg/past_eor.f90: New.
* gfortran.dg/complex_read.f90: New.
From-SVN: r101984
2005-07-12 Thomas Koenig <Thomas.Koenig@online.de>
io/unix.c: Add member special_file to type unix_stream.
(fd_truncate): Don't call ftruncate or chsize if
s refers to a special file.
(fd_to_stream): initialize s->special_file.
2005-07-12 Thomas Koenig <Thomas.Koenig@online.de>
gfortran.dg/dev_null.f90: Remove targets.
From-SVN: r101937
2005-07-09 Jerry DeLisle <jvdelisle@verizon.net>
PR libfortran/21875 (FM111.f)
* io/read.c (next_char): Return a ' ' character when BLANK_ZERO or
BLANK_NULL are active.
(read_decimal): Interpret ' ' character correctly for BZ or BN.
(read_radix): Interpret ' ' character correctly for BZ or BN.
(read_f): Interpret ' ' character correctly for BZ or BN.
* gfortran.dg/test (fmt_read_bz_bn.f90): New test case.
From-SVN: r101837
2005-07-07 Francois-Xavier Coudert <coudert@clipper.ens.fr>
Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/22217
* io/write.c (extract_unit): New function; extract
ints as unsigned signed int of the correct size.
* io/write.c (write_int): Use it.
* runtime/error.c: Adjust copyright years.
Adjust size of buffer to maximum that can occur.
2005-07-07 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/22217
* gfortran.dg/negative-z-descriptor.f90: New test.
From-SVN: r101829
PR libfortran/22170
* io/transfer.c (formatted_transfer): Do not iterate on the
repeat count of a FMT_SLASH, since this is already done in
next_format().
From-SVN: r101377
* intrinsics/c99_functions.c (log10l): New log10l function for
systems where this is not available.
* c99_protos.h: Prototype for log10l function.
* libgfortran.h: Use generated kinds.h to define GFC_INTEGER_*,
GFC_UINTEGER_*, GFC_LOGICAL_*, GFC_REAL_*, GFC_COMPLEX_*. Update
prototypes for gfc_itoa and xtoa.
* io/io.h: Update prototypes for set_integer and max_value.
* io/list_read.c (convert_integer): Use new
GFC_(INTEGER|REAL)_LARGEST type.
* io/read.c (set_integer): Likewise.
(max_value): Likewise.
(convert_real): Likewise.
(real_l): Likewise.
(next_char): Likewise.
(read_decimal): Likewise.
(read_radix): Likewise.
(read_f): Likewise.
* io/write.c (extract_int): Use new GFC_INTEGER_LARGEST type.
(extract_real): Use new GFC_REAL_LARGEST type.
(calculate_exp): Likewise.
(calculate_G_format): Likewise.
(output_float): Likewise. Use log10l for long double values.
Add comment for sprintf format. Use GFC_REAL_LARGEST_FORMAT.
(write_l): Use new GFC_INTEGER_LARGEST type.
(write_float): Use new GFC_REAL_LARGEST type.
(write_int): Remove useless special case for (len < 8).
(write_decimal): Use GFC_INTEGER_LARGEST.
(otoa): Use GFC_UINTEGER_LARGEST as argument.
(btoa): Use GFC_UINTEGER_LARGEST as argument.
* runtime/error.c (gfc_itoa): Use GFC_INTEGER_LARGEST as
argument.
(xtoa): Use GFC_UINTEGER_LARGEST as argument.
* Makefile.am: Use mk-kinds-h.sh to generate header kinds.h
with all Fortran kinds available.
* configure.ac: Check for strtold and log10l.
* Makefile.in: Regenerate.
* aclocal.m4: Regenerate.
* configure: Regenerate.
* config.h.in: Regenerate.
* mk-kinds-h.sh: Configuration script for available integer
and real kinds.
* lib/target-supports.exp: Add
check_effective_target_fortran_large_real and
check_effective_target_fortran_large_int to check for
corresponding effective targets.
* gfortran.dg/large_integer_kind_1.f90: New test.
* gfortran.dg/large_real_kind_1.f90: New test.
From-SVN: r101274
PR libfortran/19155
* io/read.c (convert_real): strtod can set errno to EINVAL on an
empty string, but we shouldn't have an error in that case.
From-SVN: r101128
PR libfortran/19216
* io/list_read.c (eat_separator): No need to call next_record,
even in non-namelist_mode.
* gfortran.dg/pr19216.f: Add correct space between brackets and
dg directive.
From-SVN: r101105
PR libfortran/16436
* io/transfer.c (read_sf): Correct updating of bytes_left field.
(formatted_transfer): Correct updating of bytes_left field and
reformatting code (comments and whitespace).
* io/unix.c (move_pos_offset): "active" field should not be
changed here. Whitespace corrections.
* gfortran.dg/g77/f77-edit-t-in.f: Not XFAIL-ed any more.
From-SVN: r101100
PR libfortran/20006
* io.c (format_item_1): Add check and extension warning for
$ edit descriptor.
* io/format.c (parse_format_list): Set repeat count of $ format
node to 1.
* io/transfer.c (read_sf): Add g.seen_dollar to the test
concerning advancing I/O.
(data_transfer_init): Likewise.
(finalize_transfer): Likewise.
From-SVN: r100314
* intrinsics/system_clock.c (system_clock_4, system_clock_8): Add
missing returns, reformat a bit.
* io/write.c (nml_write_obj): Use %d again - and cast to int,
st_sprintf does not handle %ld.
From-SVN: r99722
2005-05-12 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/21324
* runtime/memory.c: Don't define GFC_CLEAR_MEMORY (it's a
performance hog).
* io/open.c (new_unit): Zero freshly allocated memory for
unit structure.
* io/unit.c (init_units): Zero freshly allocated memory for
STDIN, STDOUT and STDERR.
* io/unix.c (open_internal): Zero freshly allocated memory
for unix_stream.
(fd_to_stream): Likewise.
From-SVN: r99619
PR libfortran/21471
* open.c (new_unit): Take care of the case where POSITION_APPEND
is specified (sseek to the end, and set u>-endfile).
* gfortran.dg/append-1.f90: New test.
From-SVN: r99560
PR libfortran/20788
Missing entry from previous commit:
* io/unix.c (fd_to_stream): Add an avoid_mmap argument indicating
we don't we to mmap this stream. Use fd_open instead of mmap_open
in that case.
(open_external): Call fd_to_stream with avoid_mmap = 0.
(input_stream): Call fd_to_stream with avoid_mmap = 1.
(output_stream): Likewise.
(error_stream): Likewise.
Really committing:
* io/read.c (read_f): Accept 'e', 'E', 'd' and 'D' as first
non-blank characters of a real number.
From-SVN: r99508
PR libfortran/19155
* io/read.c (read_f): Accept 'e', 'E', 'd' and 'D' as first
non-blank characters of a real number.
* gfortran.dg/pr19155.f: New test.
From-SVN: r99424
* configure.ac: Check for ftruncate and chsize.
* io/unix.c (fd_truncate): Provide chsize as alternative to
ftruncate.
* config.h.in: Regenerate.
* configure: Regenerate.
From-SVN: r98989
PR libfortran/20950
* io/inquire.c (inquire_via_unit): Check for the gfc_unit being
NULL when setting ioparm.sequential.
* gfortran.dg/pr20950.f: New test.
From-SVN: r98312
2005-04-10 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/17992
PR libfortran/19568
PR libfortran/19595
PR libfortran/20005
PR libfortran/20092
PR libfortran/20131
PR libfortran/20138
PR libfortran/20661
PR libfortran/20744
* io/transfer.c (top level): eor_condition: New static variable.
(read_sf): Remove unnecessary zeroing of buffer (there is enough
information in its length).
Return a string of length 0 (to be padded by caller) if EOR was
seen previously.
Remove erroneous special casing of EOR for standard input.
Set eor_condition for non-advancing I/O if an end of line was
detected.
Increment ioparm.size if necessary.
(formatted_transfer): Skip the function if there is an EOR condition.
(data_transfer_init): Initialize eor_condition to zero (false).
(next_record_r): Clear sf_seen_eor if a \n has been seen already.
(finalize_transfer): If there is an EOR condition, raise the error.
2005-04-10 Thomas Koenig <Thomas.Koenig@online.de>
* eor_handling_1.f90: New test case.
* eor_handling_2.f90: New test case.
* eor_handling_3.f90: New test case.
* eor_handling_4.f90: New test case.
* eor_handling_5.f90: New test case.
* noadv_size.f90: New test case.
* pad_no.f90: New test case.
From-SVN: r97943
PR fortran/19872
* io/transfer.c (data_transfer_init): truncate an existing
file on the first write.
Co-Authored-By: Steven G. Kargl <kargls@comcast.net>
From-SVN: r97937
PR libfortran/20755
* write.c (write_float): A G edit descriptor may locally change
the scale factor, but it needs to be restored afterwards.
* gfortran.dg/pr20755.f: New test.
From-SVN: r97627
PR libfortran/20068
PR libfortran/20125
PR libfortran/20156
PR libfortran/20471
* io/backspace.c (unformatted_backspace): Fix error in arithmetic.
(st_backspace): When in WRITING mode, we flush and falling back
into READING mode. In all cases, correctly position the stream.
* gfortran.dg/backspace.f: New test.
Co-Authored-By: Francois-Xavier Coudert <coudert@clipper.ens.fr>
From-SVN: r97478
PR libfortran/20660
* io/inquire.c (inquire_via_unit): Non-opened units should still be
reported by an INQUIRE statement as existing.
* io/transfer.c (data_transfer_init): Never accept negative units.
PR libfortran/20660
* gfortran.dg/negative_unit.f: New test.
From-SVN: r97326
PR libfortran/20163
* io/open.c (st_open): call library_end() before returning even if
an error arises.
* gfortran.dg/pr20163-2.f: New test.
From-SVN: r97153
PR libfortran/19678
PR libfortran/19679
* gfortran.dg/dos_eol.f: New test.
PR libfortran/19678
* list_read.c (next_char, eat_separator, finish_separator, read_real)
(namelist_read): Add support for '\r' as well as '\n' as EOL
character.
PR libfortran/19679
* list_read.c (read_sf): Add a '\r' in a test to support DOS
line-endings when line length is exceeded.
From-SVN: r97041
PR libfortran/15332
* io/format.c (parse_format_list): format node for colon edit
descriptor needs a repeat counter set to 1.
* gfortran.dg/pr15332.f: New test.
From-SVN: r97036
* open.c (new_unit): set record length to max_offset rather than
using a hard-coded limit (which was too low).
* write_big_array.f90: New test.
From-SVN: r96573
2005-03-12 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR libfortran/20124
* gfortran.dg/pr20124.f90: New Test
2005-03-11 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR libfortran/20124
* write.c (output_float): Adds a nzero_real variable to store
the number of leading zeros whatever the format width is. Corrects
the rounding of numbers less than 10^(-width). Fixes typo in an
error message. Updates copyright years
From-SVN: r96291
2004-02-22 Paul Thomas <paulthomas2@wannado.fr>
Bud Davis <bdavis@gfortran.org>
* io/list_read.c (read_real): Handle separators properly
in list directed read.
2005-02-22 Bud Davis <bdavis@gfortran.org>
* gfortran.dg/list_read_4.f90: new test.
From-SVN: r95436
2004-02-21 Bud Davis <bdavis@gfortran.org>
PR fortran/20086
* io/transfer.c (write_constant_string): accept an 'h' as
the start of a hollerith format string.
2005-02-21 Bud Davis <bdavis9659@comcast.net>
PR fortran/20086
* gfortran.dg/pr20086.f90: New test.
From-SVN: r95379
2005-01-22 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/19451
* io/transfer.c (finalize_transfer): Don't do anything if
there is an error condition.
* open_readonly_1.f90: New test.
From-SVN: r94101
2005-01-22 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/18982
* io/unix.c (regular_file): No need to change flags->action
if an error occurs. Document this.
No need to call stat() for STATUS_OLD, open() will
fail anyway.
For ACTION_UNSPECIFIED, try open for read-write, then for
read-only if open fails with EACCES, then for write-only
if that fails with EACCES again.
* io/unix.c (open_external): Document changed behavior of
regular_file.
testsuite/
* gfortran.dg/open_new.f90: New file.
From-SVN: r94076
gcc/fortran/
PR fortran/19194
* trans-io.c (ADD_STRING): Use gfc_charlen_type_node for string
length parameters.
(gfc_build_io_library_fndecls): 'rec' and 'recl_in' are not
pointer fields.
libgfortran/
PR fortran/19194
* io/io.h (st_parameter): Use 'GFC_INTEGER_4' instead of 'int',
use CHARACTER macro for definition of string valued paramters.
Also fix years in recent ChangeLog entries.
From-SVN: r94065
2004-01-22 Bud Davis <bdavis9659@comcast.net>
PR fortran/19314
* io/inquire.c(inquire_via_unit): implement POSITION=.
* io/transfer.c(next_record): update position for
INQUIRE.
* io/rewind.c(st_rewind): update position for
INQUIRE.
* gfortran.dg/inquire_5.f90: New test.
From-SVN: r94060
2005-01-16 Bud Davis <bdavis9659@comcast.net>
PR fortran/18778
* gfortran.dg/endfile_2.f90: New test.
* io/transfer.c (us_read): no bytes available is not a
runtime error.
From-SVN: r93737
2005-01-15 Bud Davis <bdavis9659@comcast.net>
PR fortran/18983
* io/transfer.c (st_write_done): only truncate when it
is required.
2005-01-15 Bud Davis <bdavis9659@comcast.net>
PR fortran/18983
* gfortran.dg/write_to_null.f90: New test.
From-SVN: r93689
2005-01-07 Bud Davis <bdavis9659@comcast.net>
PR fortran/18398
* transfer.c (next_record_r): always skip the
eol search if it was found during sf_read.
* gfortran.dg/fmt_read.f90: New test.
From-SVN: r93035
2004-12-23 Bud Davis <bdavis9659@comcast.net>
PR fortran/19071
* io/tranfer.c (formatted_transfer): moved check for
format reversion inside the processing loop.
* gfortran.dg/complex_write.f90: New test.
From-SVN: r92582
2004-12-15 Bud Davis <bdavis9659@comcast.net>
Steven G. Kargl <kargls@comcast.net>
PR fortran/17597
* io/list_read.c (read_real): do not push back a comma when
it delimits a real value without a decimal point
2004-12-15 Bud Davis <bdavis9659@comcast.net>
Steven G. Kargle <kargls@comcast.net>
PR fortran/17597
* gfortran.dg/list_read_3.f90: New test.
Co-Authored-By: Steven G. Kargl <kargls@comcast.net>
Co-Authored-By: Steven G. Kargl <kargls@comcast.net>
From-SVN: r92190
* libgfortran/io/transfer.c (us_read): Use memcpy/memset
instead of assignment to fill unaligned buffer.
(us_write): Ditto.
(next_record_w): Ditto.
From-SVN: r92143
libgfortran/
PR fortran/18710
* io/transfer.c (unformatted_read, unformatted_write): width of
a COMPLEX is twice its kind.
gcc/testsuite/
PR fortran/18170
* gfortran.dg/direct_io_3.f90: New test.
From-SVN: r91656
2004-12-02 Bud Davis <bdavis9659@comcast.net>
* io/inquire.c (inquire_via_unit): do not allow a direct access
file to be opened for sequential I/O.
* gfortran.dg/inquire.f90: New test.
From-SVN: r91610
2004-11-28 Bud Davis <bdavis9659@comcast.net>
* gcc/gcc/gfortran.dg/direct_io_2.f90: New test.
* gcc/libgfortran/io/unix.c (mmap_alloc_w_a): check for a write
to a location less than the mapped area.
From-SVN: r91426
2004-11-27 Bud Davis <bdavis9659@comcast.net>
PR fortran/18364
* gfortran.dg/endfile.f90: New test.
* io/endfile.c (st_endfile): flush the stream before truncating.
From-SVN: r91400
PR libfortran/15960
* configure.ac: Check for finite in libm.
* libgfortran.h: Define isfinite macro if not defined.
* intrinsics/c99_functions.c: Use defined(fpclassify) instead of
HAVE_FPCLASSIFY.
* io/write.c (write_float): Use isfinite instead of finite.
* configure, config.h.in: Rebuilt.
From-SVN: r91064
PR target/16135
* acinclude.m4 (LIBGFOR_TARGET_ILP32): New check.
* configure.ac: Include LIBGFOR_TARGET_ILP32.
* configure: Regenerate.
* config.h.in: Likewise.
* libgfortran.h: Provide default definitions for C99 types
on ILP32 targets that don't have them.
PR target/17999
* configure.ac: Check for snprintf.
* configure: Regenerate.
* config.h.in: Likewise.
* intrinsics/date_and_time.c (date_and_time): Do not
use snprinf if it is not available.
* io/write.c (output_float): Likewise.
From-SVN: r90964
2004-09-21 Bud Davis <bdavis9659@comcast.net>
PR fortran/17286
* io/list_read.c (namelist_read): ignore spaces after
the '=' for namelist reads.
2004-09-21 Bud Davis <bdavis9659@comcast.net>
PR fortran/17286
* gfortran.dg/pr17286.f90: New test.
From-SVN: r87799
2004-09-13 Bud Davis <bdavis9659@comcast.net>
PR fortran/17090
* io/list_read.c (list_formatted_read): Handle trailing spaces
at end of line.
2004-09-13 Bud Davis <bdavis9659@comcast.net>
PR fortran/17090
* gfortran.dg/pr17090.f90: New test.
From-SVN: r87474
2004-09-06 Steven G. Kargl <kargls@comcast.net>
* io/write.c (output_float): Typo in comment. Remove debugging
printf. Fix format for FP of form 1e10.
2004-09-06 Paul Brook <paul@codesourcery.com>
* gfortran.dg/edit_real_1.f90: Add new test.
From-SVN: r87119
* io/unit.c: Separate copyright years by ','.
(compare, insert_unit, delete_unit, is_internal_unit, close_units):
Remove blank line in beginning of function.
(get_unit): Simplify code.
From-SVN: r86841
PR libfortran/17195
* libgfortran.h (rtoa): Remove prototype.
* runtime/error.c (rtoa): Remove.
* io/write.c (calculate_G_format): Don't add blanks if E format is
used. Add correct number of blanks when exponent width is specified.
(output_float): Rewrite.
testsuite/
* gfortran.dg/edit_real_1.f90: New test.
From-SVN: r86701
2004-08-27 Bud Davis <bdavis9659@comcast.net>
PR fortran/16597
* io/io.h: created typedef for unit_mode.
* io/io.h (gfc_unit): added mode to unit structure.
* io/transfer.c (data_transfer_init): flush if a write then
read is done on a unit (direct access files).
* io/rewind.c (st_rewind): Used unit mode instead of global.
* gfortran.dg/pr16597.f90: New test.
From-SVN: r86654
2004-08-21 Bud Davis <bdavis9659@comcast.net>
PR 16908
* io/transfer.c (next_record_w): Do not blank pad.
* io/transfer.c (next_record): Take into account partial records.
testsuite/
* gfortran.dg/direct_io.f90: New test.
From-SVN: r86361
2004-08-18 Victor Leikehman <lei@il.ibm.com>
PR fortran/13278
* trans-io.c (transfer_namelist_element): New. Recursively handle
derived-type variables. Pass string lengths.
(build_dt): Code moved to build_namelist, with some
changes and additions.
(gfc_build_io_library_fndecls): Declare the fifth
argument in st_set_nml_var_char -- string_length.
libgfortran/
* io/transfer.c (st_set_nml_var)
* io/write.c (namelist_write): Allow var_name and var_name_len to be
null. For strings, use string_length field instead of len.
* io/io.h (struct namelist_type): New field string_length.
(st_set_nml_var_char): New argument string_length.
From-SVN: r86166
2004-08-13 Bud Davis <bdavis9659@comcast.net>
PR gfortran/13965
* gfortran.fortran-torture/execute/open_rewind.f90: New test.
* io/open.c (st_open): use flags instead of the unit structure.
From-SVN: r85966
2004-07-04 Bud Davis <bdavis9659@comcast.net>
Paul Brook <paul@codesourcery.com>
PR fortran/15472
* io/transfer.c(us_write): set recl for seq unform writes to max size.
* io/transfer.c(data_transfer_init): handle un-opened seq unform unit.
* io/unix.c(fd_alloc_w_at): handle requests at start, fd_flush at
right time.
* io/unix.c(is_seekable): set based upon the file/device, not the
method being used to access it (fd or mmap).
* io/unix.c(fd_flush): don't set file_size if !seekable.
* io/unix.c(fd_truncate: ditto.
* gfortran.fortran-torture/execute/seq_io.f90: New test.
Co-Authored-By: Paul Brook <paul@codesourcery.com>
From-SVN: r84104
2004-06-26 Bud Davis <bdavis9659@comcast.net>
PR gfortran/16196
* unix.c(regular_file): create file if it does not exist.
* gfortran.fortran-torture/execute/open_replace.f90: New test case.
From-SVN: r83709
PR fortran/15750
* io.c (gfc_match_inquire): Bugfix for iolength related stuff.
(gfc_resolve_inquire): Resolve the iolength tag. Return
SUCCESS at end of function if no failure has occured.
* resolve.c (resolve_code): Resolve if iolength is encountered.
* trans-io.c: (ioparm_iolength, iocall_iolength,
iocall_iolength_done): New variables.
(last_dt): Add IOLENGTH.
(gfc_build_io_library_fndecls ): Set iolength related variables.
(gfc_trans_iolength): Implement.
(gfc_trans_dt_end): Treat iolength as a third form of data transfer.
libgfortran/
PR fortran/15750
* inquire.c (st_inquire): Add comment
* io.h (st_parameter): Add iolength.
(st_iolength, st_iolength_done): Declare.
* transfer.c (iolength_transfer, iolength_transfer_init,
st_iolength, st_iolength_done): New functions.
testsuite/
* gfortran.fortran-torture/execute/iolength_1.f90: New test.
* gfortran.fortran-torture/execute/iolength_3.f90: New test.
From-SVN: r83472
2004-06-19 Bud Davis <bdavis9659@comcast.net>
PR gfortran/16080
* gfortran.fortran-torture/execute/read_null_string.f90: New file.
* io/list_read.c(set_value): don't copy if the string is null.
From-SVN: r83388
2004-06-12 Bud Davis <bdavis9659@comcast.net>
PR gfortran/12839
* gfortran.fortran-torture/execute/nan_inf_fmt.f90: New test.
* io/write.c(write_float): format inf and nan IAW F2003.
From-SVN: r83024
2004-06-09 Bud Davis <bdavis9659@comcast.net>
PR gfortran/14897
* gfortran.fortran-torture/execute/t_edit.f90
* io/transfer.c (formatted_transfer): position is unique
for T and TL edit descriptors.
(data_transfer_init): set record length to size of internal
file.
From-SVN: r82808
* io.c (check_format): As a GNU extension, allow the comma after a
string literal to be optional in a format. Use gfc_notify_std to
issue an error/warning as appropriate.
* io/format.c (parse_format_list): Allow the comma after a string
literal to be optional.
From-SVN: r82109