Files
gcc/libgcobol/io.cc
Robert Dubner fba34a0cc5 cobol: Multiple PRs; formatting; exception processing.
The PRs mentined here have either been previously fixed, or are fixed by
this commit.

gcc/cobol/ChangeLog:

	PR cobol/119770
	PR cobol/119772
	PR cobol/119790
	PR cobol/119771
	PR cobol/119810
	PR cobol/119335
	PR cobol/119632
	* cdf-copy.cc (GLOB_BRACE): Eliminate <glob.h>.
	* cdfval.h (_CDF_VAL_H_): Switch to C++ headers.
	* copybook.h (class copybook_elem_t): Eliminate <glob.h>.
	(class copybook_t): Likewise.
	* gcobc: Numerous changes to improve utility.
	* gcobol.1: Correct names in the list of functions.
	* genapi.cc (compare_binary_binary): Use has_attr() function.
	* lexio.cc (cdftext::lex_open): Typo; filename logic.
	(cdftext::process_file): Filename logic.
	* parse.y: Numerous parsing changes.
	* parse_ante.h (new_alphanumeric): C++ includes; changes to temporaries.
	(new_tempnumeric): Likewise.
	(new_tempnumeric_float): Likewise.
	(set_real_from_capacity): Created.
	* scan.l: Use yy_pop_state().
	* scan_ante.h (typed_name): Find figconst from data.initial.
	* symbols.cc (symbol_valid_udf_args): Eliminate.
	(symbols_update): figconst processing.
	(new_temporary_impl): For functions, set .initial to function name.
	(temporaries_t::acquire): Likewise.
	(new_alphanumeric): Likewise.
	(new_temporary): Likewise.
	* symbols.h (_SYMBOLS_H_): Use C++ includes.
	(cbl_figconst_tok): Change handling of figconst.
	(cbl_figconst_field_of): Change handling of figconst.
	(symbol_valid_udf_args): Eliminate.
	* symfind.cc (symbol_match2): Change declaration.
	(symbol_match): Change declaration.

libgcobol/ChangeLog:

	* charmaps.cc: Switch to C++ includes.
	* common-defs.h: Likewise.
	* constants.cc: Likewise.
	* ec.h: Remove #include <assert.h>.
	* gcobolio.h (GCOBOLIO_H_): Switch to C++ includes.
	* gfileio.cc: Likewise.
	* gmath.cc: Likewise.
	* intrinsic.cc: Comment formatting; C++ includes.
	* io.cc: C++ includes.
	* libgcobol.cc: (__gg__stash_exceptions): Eliminate.
	* valconv.cc: Switch to C++ includes.

Co-Authored-By: James K. Lowden <jklowden@cobolworx.com>
2025-05-20 14:24:30 -04:00

100 lines
4.1 KiB
C++

/*
* Copyright (c) 2021-2025 Symas Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of the Symas Corporation nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "io.h"
#include <cstdio>
#include <cstdlib>
#include <cerrno>
#include <cstdbool>
#include <cstdint>
/*
* The Cobol runtime support is responsible to set the file status
* word appropriately to the application's expectations. This function
* sets the defined file status register for the file to value of the
* status parameter, except for FhErrno. For FhErrno, it sets the
* file status register to a value derived from the current value of
* errno. If the errno value is not accounted for, the high bit is
* set to 1, and the rest to errno.
*/
extern "C"
file_status_t
__gg__file_status_word( enum file_status_t status,
int error_number) {
file_status_t file_status_register;
if( status != FsErrno ) {
return status;
}
switch( error_number ) {
case 0: file_status_register = FsSuccess; break;
case EACCES: file_status_register = FsNoAccess; break;
case EDQUOT: file_status_register = FsBoundary; break;
case EEXIST: file_status_register = FsNoAccess; break;
case EFAULT: file_status_register = FsNoFile; break;
case EFBIG: file_status_register = FsBoundary; break;
case EINTR: file_status_register = FsOsError; break;
case EINVAL: file_status_register = FsWrongType; break;
case EISDIR: file_status_register = FsWrongType; break;
case ELOOP: file_status_register = FsOsError; break;
case EMFILE: file_status_register = FsOsError; break;
case ENAMETOOLONG:
file_status_register = FsWrongType; break;
case ENFILE: file_status_register = FsOsError; break;
case ENODEV: file_status_register = FsNoFile; break;
case ENOENT: file_status_register = FsNoFile; break;
case ENOMEM: file_status_register = FsOsError; break;
case ENOSPC: file_status_register = FsBoundary; break;
case ENOTDIR: file_status_register = FsNoFile; break;
case ENXIO: file_status_register = FsNoFile; break;
case EOPNOTSUPP:
file_status_register = FsOsError; break;
case EOVERFLOW: file_status_register = FsBoundary; break;
case EPERM: file_status_register = FsNoAccess; break;
case EROFS: file_status_register = FsNoAccess; break;
case ETXTBSY: file_status_register= FsWrongType; break;
case EWOULDBLOCK:
file_status_register = FsOsError; break;
default:
perror("What is this? ");
fprintf(stderr, "__gg__file_status_word got an error_number "
"%d, which it doesn't know how to handle\n", error_number);
abort();
break;
}
return file_status_register;
}