diff options
Diffstat (limited to 'support/dktools/dk4fopda.c')
-rw-r--r-- | support/dktools/dk4fopda.c | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/support/dktools/dk4fopda.c b/support/dktools/dk4fopda.c new file mode 100644 index 0000000000..925d79676e --- /dev/null +++ b/support/dktools/dk4fopda.c @@ -0,0 +1,186 @@ +/* + WARNING: This file was generated by dkct. + Changes you make here will be lost if dkct is run again! + You should modify the original source and run dkct on it. + Original source: dk4fopda.ctr +*/ + +/* +Copyright (C) 2015-2017, Dirk Krause + +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 opyright 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 author nor the names of 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. +*/ + +/** @file dk4fopda.c The dk4fopda module. +*/ + + +#line 38 "dk4fopda.ctr" + + +#if 0 +#define _POSIX_C_SOURCE 200112L +#define _XOPEN_SOURCE 600 +#ifdef _GNU_SOURCE +#undef _GNU_SOURCE +#endif +#endif + + +#include "dk4conf.h" + +#if DK4_HAVE_STRING_H +#include <string.h> +#endif + +#if DK4_HAVE_ERRNO_H +#include <errno.h> +#endif + +#include "dk4const.h" +#include "dk4fopd.h" +#include "dk4fopda.h" +#include "dk4error.h" + + + +FILE * +dk4fopen_app(const dkChar *name, const dkChar *mode, int tests, dk4_app_t *app) +{ + dk4_er_t er; + FILE *back = NULL; + if ((NULL != name) && (NULL != mode)) { + dk4error_init(&er); + back = dk4fopen(name, mode, tests, &er); + if (NULL == back) { + switch (er.ec) { + case DK4_E_INVALID_ARGUMENTS: { + /* Bug, this function should not be called with name or mode NULL */ + } break; + case DK4_E_SYNTAX: { + /* ERROR: File name does not refer to regular file */ + dk4app_log_base3(app, DK4_LL_ERROR, 108, 109, name); + } break; + case DK4_E_SEC_CHECK: { + if (0 != (DK4_FOPEN_SC_IS_REGULAR & er.dt.iDetails1)) { + /* ERROR: Not a regular file */ + dk4app_log_base3(app, DK4_LL_ERROR, 108, 109, name); + } + if (0 != (DK4_FOPEN_SC_WR_SYMLINK_IN_PATH & er.dt.iDetails1)) { + /* ERROR: Path contains symbolic link */ + dk4app_log_base3(app, DK4_LL_ERROR, 108, 110, name); + } + if (0 != (DK4_FOPEN_SC_WR_PATH_IS_SYMLINK & er.dt.iDetails1)) { + /* ERROR: Path is a symbolic link */ + dk4app_log_base3(app, DK4_LL_ERROR, 108, 111, name); + } + if (0 != (DK4_FOPEN_SC_WR_SYMLINK_OWNER & er.dt.iDetails1)) { + /* ERROR: Symbolic link owner is not file owner */ + dk4app_log_base3(app, DK4_LL_ERROR, 108, 112, name); + } + } break; + case DK4_E_OPEN_WRITE_FAILED: case DK4_E_OPEN_READ_FAILED: { + switch (er.dt.iDetails1) { +#ifdef EACCES + case EACCES : { + dk4app_log_base3(app, DK4_LL_ERROR, 108, 55, name); + } break; +#endif +#ifdef EINTR + case EINTR : { + dk4app_log_base3(app, DK4_LL_ERROR, 108, 113, name); + } break; +#endif +#ifdef EISDIR + case EISDIR : { + dk4app_log_base3(app, DK4_LL_ERROR, 108, 52, name); + } break; +#endif +#ifdef ELOOP + case ELOOP : { + dk4app_log_base3(app, DK4_LL_ERROR, 108, 61, name); + } break; +#endif +#ifdef EMFILE + case EMFILE : { + dk4app_log_base3(app, DK4_LL_ERROR, 108, 114, name); + } break; +#endif +#ifdef ENAMETOOLONG + case ENAMETOOLONG : { + dk4app_log_base3(app, DK4_LL_ERROR, 108, 65, name); + } break; +#endif +#ifdef ENFILE + case ENFILE : { + dk4app_log_base3(app, DK4_LL_ERROR, 108, 115, name); + } break; +#endif +#ifdef ENOENT + case ENOENT : { + dk4app_log_base3(app, DK4_LL_ERROR, 108, 51, name); + } break; +#endif +#ifdef ENOSPC + case ENOSPC : { + dk4app_log_base3(app, DK4_LL_ERROR, 108, 60, name); + } break; +#endif +#ifdef ENOTDIR + case ENOTDIR : { + dk4app_log_base3(app, DK4_LL_ERROR, 108, 150, name); + } break; +#endif +#ifdef ENXIO + case ENXIO : { + dk4app_log_base3(app, DK4_LL_ERROR, 108, 116, name); + } break; +#endif +#ifdef EOVERFLOW + case EOVERFLOW : { + dk4app_log_base3(app, DK4_LL_ERROR, 108, 117, name); + } break; +#endif +#ifdef EROFS + case EROFS : { + dk4app_log_base3(app, DK4_LL_ERROR, 108, 56, name); + } break; +#endif + default: { + dk4app_log_with_errno( + app, DK4_LL_ERROR, 108, 79, 80, 108, 77, + name, er.dt.iDetails1 + ); + } break; + } + } break; + } + } + } + return back; +} + + + |