diff options
author | Norbert Preining <norbert@preining.info> | 2020-10-12 03:04:00 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2020-10-12 03:04:00 +0000 |
commit | 0ce40abb18ec02ec6fd6bcc5f21612c88daa7578 (patch) | |
tree | 416289fe1448873fd8ca33051f50ad85bffa8aaa /support/dktools/dk-blks.c | |
parent | fdb18507cd80dc17f5a5256153d34668b4f4e61c (diff) |
CTAN sync 202010120303
Diffstat (limited to 'support/dktools/dk-blks.c')
-rw-r--r-- | support/dktools/dk-blks.c | 1007 |
1 files changed, 0 insertions, 1007 deletions
diff --git a/support/dktools/dk-blks.c b/support/dktools/dk-blks.c deleted file mode 100644 index 1aa17e421c..0000000000 --- a/support/dktools/dk-blks.c +++ /dev/null @@ -1,1007 +0,0 @@ -/* -Copyright (C) 2015-2020, Dirk Krause -SPDX-License-Identifier: BSD-3-Clause -*/ - -/* - WARNING: This file was generated by the dkct program (see - http://dktools.sourceforge.net/ for details). - 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: dk-blks.ctr -*/ - - -#line 10 "dk-blks.ctr" - -/** @file dk-blks.c The dk-blks program. - the help_text array below shows details. -*/ - - - -#include "dk4conf.h" - -#include <stdio.h> -#if DK4_HAVE_STDLIB_H -#ifndef STDLIB_H_INCLUDED -#include <stdlib.h> -#define STDLIB_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_IO_H -#ifndef IO_H_INCLUDED -#include <io.h> -#define IO_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_UNISTD_H -#ifndef UNISTD_H_INCLUDED -#include <unistd.h> -#define UNISTD_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_PROCESS_H -#ifndef PROCESS_H_INCLUDED -#include <process.h> -#define PROCESS_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_SYS_TYPES_H -#ifndef SYS_TYPES_H_INCLUDED -#include <sys/types.h> -#define SYS_TYPES_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_SIGNAL_H -#ifndef SIGNAL_H_INCLUDED -#include <signal.h> -#define SIGNAL_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_ERRNO_H -#ifndef ERRNO_H_INCLUDED -#include <errno.h> -#define ERRNO_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_FCNTL_H -#ifndef FCNTL_H_INCLUDED -#include <fcntl.h> -#define FCNTL_H_INCLUDED 1 -#endif -#endif - -#if DK4_HAVE_STRING_H -#ifndef STRING_H_INCLUDED -#include <string.h> -#define STRING_H_INCLUDED 1 -#endif -#endif - -#include "dk4types.h" -#include "dk4const.h" -#include "dk4vers.h" -#include "dk4app.h" -#include "dk4aopt.h" -#include "dk4mem.h" -#include "dk4mema.h" -#include "dk4memrs.h" -#include "dk4numco.h" -#include "dk4fdrde.h" -#include "dk4fdwre.h" -#include "dk4unused.h" - -#ifndef DK4WMAIN_H_INCLUDED -#include "dk4wmain.h" -#endif - - - - -#line 102 "dk-blks.ctr" - - - -#ifndef DK_BLKS_DEFAULT_BLOCK_SIZE -/** Default suitable for hard disks. -*/ -#define DK_BLKS_DEFAULT_BLOCK_SIZE 4096 -#endif - - - -/** Default help text, shown if help text file is not found. -*/ -static const dkChar * const help_text[] = { -dkT(""), -dkT("Create sequence of fixed size blocks."), -dkT(""), -dkT("dk-blks [<options>]"), -dkT(""), -dkT("Options:"), -dkT("-b <size>\tBlock size, positive integer number."), -dkT("\t\tYou can append `k', `m', `g', or `t' for multiples of 1024"), -dkT("\t\tor powers of it (i.e. 4k = 4096 bytes, 1m = 1048576 bytes...)."), -dkT(""), -dkT("--help\t\tShow this short help text."), -dkT("--manual\t*** SHOW FULL MANUAL. ***"), -dkT("--version\tShow version information."), -dkT("--license\tShow license information."), -dkT(""), -dkT("http://sourceforge.net/p/dktools/wiki/dk-blks/"), -dkT(""), -NULL - - -#line 135 "dk-blks.ctr" -}; - - -/** License conditions. -*/ -static const dkChar * const license_text[] = { -dkT("This software uses code from the following projects, either directly or as"), -dkT("a library:"), -dkT(""), -dkT("dktools\t\tDirk Krause's tools and libraries."), -dkT("\t\tSee http://sourceforge.net/p/dktools/wiki/Home/"), -dkT("\t\tfor more information."), -#if DK4_HAVE_ZLIB_H -dkT(""), -dkT("zlib\t\tData compression library."), -dkT("\t\tSee http://www.zlib.net/ for more information."), -#endif -#if DK4_HAVE_BZLIB_H -dkT(""), -dkT("bzip2\t\tData compression program and library."), -dkT("\t\tSee http://www.bzip.org/ for more information."), -#endif -dkT(""), -dkT("All the licenses below apply to the program."), -dkT("Licenses for used libraries are shown as found on my Scientific Linux 6.x"), -dkT("computer in the /usr/share/doc directory on 2015-04-01. Check the project"), -dkT("homepages of the used libraries for additional information and/or updated"), -dkT("license terms."), -dkT(""), -dkT(""), -dkT("DK tools and libraries license"), -dkT("=============================="), -dkT("Copyright (c) 2015-2016, Dirk Krause"), -dkT("All rights reserved."), -dkT(""), -dkT("Redistribution and use in source and binary forms, with or without"), -dkT("modification, are permitted provided that the following conditions are met:"), -dkT(""), -dkT("1. Redistributions of source code must retain the above copyright notice,"), -dkT(" this list of conditions and the following disclaimer."), -dkT("2. Redistributions in binary form must reproduce the above copyright"), -dkT(" notice, this list of conditions and the following disclaimer in the"), -dkT(" documentation and/or other materials provided with the distribution."), -dkT("3. Neither the name of the copyright holder nor the names of its"), -dkT(" contributors may be used to endorse or promote products derived from"), -dkT(" this software without specific prior written permission."), -dkT(""), -dkT("THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"), -dkT("``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT"), -dkT("LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR"), -dkT("A PARTICULAR PURPOSE ARE DISCLAIMED."), -dkT("IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY"), -dkT("DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES"), -dkT("(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR"), -dkT("SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER"), -dkT("CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT"), -dkT("LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY"), -dkT("OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF"), -dkT("SUCH DAMAGE."), -dkT(""), -#if DK4_HAVE_ZLIB_H -dkT(""), -dkT(""), -dkT("Zlib license"), -dkT("============"), -dkT("(C) 1995-2004 Jean-loup Gailly and Mark Adler"), -dkT(""), -dkT("This software is provided 'as-is', without any express or implied"), -dkT("warranty. In no event will the authors be held liable for any damages"), -dkT("arising from the use of this software."), -dkT(""), -dkT("Permission is granted to anyone to use this software for any purpose,"), -dkT("including commercial applications, and to alter it and redistribute it"), -dkT("freely, subject to the following restrictions:"), -dkT(""), -dkT("1. The origin of this software must not be misrepresented; you must not"), -dkT(" claim that you wrote the original software. If you use this software"), -dkT(" in a product, an acknowledgment in the product documentation would be"), -dkT(" appreciated but is not required."), -dkT("2. Altered source versions must be plainly marked as such, and must not be"), -dkT(" misrepresented as being the original software."), -dkT("3. This notice may not be removed or altered from any source distribution."), -dkT(""), -dkT("Jean-loup Gailly Mark Adler"), -dkT("jloup@gzip.org madler@alumni.caltech.edu"), -#endif -#if DK4_HAVE_BZLIB_H -dkT(""), -dkT(""), -dkT("Bzip2 and libbzip2 library license"), -dkT("=================================="), -dkT("This program, \"bzip2\", the associated library \"libbzip2\", and all"), -dkT("documentation, are copyright (C) 1996-2007 Julian R Seward. All"), -dkT("rights reserved."), -dkT(""), -dkT("Redistribution and use in source and binary forms, with or without"), -dkT("modification, are permitted provided that the following conditions"), -dkT("are met:"), -dkT(""), -dkT("1. Redistributions of source code must retain the above copyright"), -dkT(" notice, this list of conditions and the following disclaimer."), -dkT(""), -dkT("2. The origin of this software must not be misrepresented; you must "), -dkT(" not claim that you wrote the original software. If you use this "), -dkT(" software in a product, an acknowledgment in the product "), -dkT(" documentation would be appreciated but is not required."), -dkT(""), -dkT("3. Altered source versions must be plainly marked as such, and must"), -dkT(" not be misrepresented as being the original software."), -dkT(""), -dkT("4. The name of the author may not be used to endorse or promote "), -dkT(" products derived from this software without specific prior written "), -dkT(" permission."), -dkT(""), -dkT("THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS"), -dkT("OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED"), -dkT("WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE"), -dkT("ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY"), -dkT("DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL"), -dkT("DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE"), -dkT("GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS"), -dkT("INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,"), -dkT("WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING"), -dkT("NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS"), -dkT("SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."), -dkT(""), -dkT("Julian Seward, jseward@bzip.org"), -dkT("bzip2/libbzip2 version 1.0.5 of 10 December 2007"), -#endif -dkT(""), -NULL - - -#line 267 "dk-blks.ctr" -}; - - - -/** Options used by program. -*/ -static const dk4_option_specification_t options[] = { - { dkT('b'), dkT("block-size"), DK4_OPT_ARG_SIZE } -}; - -/** Number of elements in options array. -*/ -static const size_t sz_options = -sizeof(options)/sizeof(dk4_option_specification_t); - - - -/** Keywords used by the program, not localized. -*/ -static const dkChar * const kwnl[] = { -/* 0 */ -dkT("dktools"), - -/* 1 */ -dkT("dk-blks.txt"), - -/* 2 */ -dkT("dk-blks.str"), - -/* 3 */ -dkT("stdin"), - -/* 4 */ -dkT("stdout"), - -NULL - - -#line 306 "dk-blks.ctr" -}; - - - -/** Constant texts used by the program, replaced by localized texts - if available. -*/ -static const dkChar * const kw_def[] = { -/* 0 */ -dkT("Write operation partially failed!"), - -/* 1 */ -dkT("Failed to cleanup buffer!"), - -/* 2 */ -dkT("Block size too large!"), - -/* 3 */ -dkT("Block size must not be 0!"), - -/* 4 */ -dkT("Failed to set up signal handlers!"), - -/* 5 */ -dkT("Failed to restore signal handlers!"), - -/* 6 */ -dkT("Signal SIGPIPE received, write operation failed!"), - -/* 7 */ -dkT("Signal SIGINT received, program aborted!"), - -/* 8 */ -dkT("Unexpected command line argument \""), - -/* 9 */ -dkT("\" ignored!"), - -NULL - - -#line 353 "dk-blks.ctr" -}; - - - -/** Message texts, localized texts are used if available. -*/ -static const dkChar * const *dk_blks_msg = kw_def; - - - -/** Number of elements in dk_blks_msg array. -*/ -static size_t sz_msg = -sizeof(kw_def)/sizeof(DK4_PCDKCHAR) - 1; - - - -/** Exit status code. -*/ -static int exval = EXIT_FAILURE; - - - -/** Application structure. -*/ -static dk4_app_t *app = NULL; - - - -/** Input buffer for buffer sizes up to DK_BLKS_DEFAULT_BLOCK_SIZE. -*/ -static char default_input_buffer[DK_BLKS_DEFAULT_BLOCK_SIZE]; - - - -/** Output buffer for buffer sizes up to DK_BLKS_DEFAULT_BLOCK_SIZE. -*/ -static char default_output_buffer[sizeof(default_input_buffer)]; - - - -#ifdef RW_MAX -#undef RW_MAX -#endif - -#if DK4_ON_WINDOWS -/** Maximum number of bytes for read or write operation. -*/ -#define RW_MAX (INT_MAX) -#else -/** Maximum number of bytes for read or write operation. -*/ -#define RW_MAX ((SIZE_MAX) / 2U) -#endif - - - -#ifdef SIGPIPE -/** Indicator: SIGPIPE signal received. -*/ -static -DK4_VOLATILE -dk4_sig_atomic_t sig_had_pipe = 0; -#endif - -/** Indicator: SIGINT signal received. -*/ -static -DK4_VOLATILE -dk4_sig_atomic_t sig_had_int = 0; - -/** Indicator: SIGTERM signal received. -*/ -static -DK4_VOLATILE -dk4_sig_atomic_t sig_had_term = 0; - -static -DK4_VOLATILE -dk4_sig_atomic_t * -sig_pass_pointer(DK4_VOLATILE dk4_sig_atomic_t *ptr) -{ - return ptr; -} - -#ifdef SIGPIPE -/** Handler for SIGPIPE signal. - @param signo Signal number (always SIGPIPE, ignored). -*/ -static -void -sig_handler_pipe(int DK4_ARG_UNUSED(signo) ) -{ - DK4_UNUSED_ARG(signo) - *sig_pass_pointer(&sig_had_pipe) = 1; -} -#endif - -/** Handler for SIGINT signal. - @param signo Signal number (always SIGINT, ignored). -*/ -static -void -sig_handler_int(int DK4_ARG_UNUSED(signo) ) -{ - DK4_UNUSED_ARG(signo) - *sig_pass_pointer(&sig_had_int) = 1; -} - -/** Handler for SIGTERM signal. - @param signo Signal number (always SIGTERM, ignored). -*/ -static -void -sig_handler_term(int DK4_ARG_UNUSED(signo) ) -{ - DK4_UNUSED_ARG(signo) - *sig_pass_pointer(&sig_had_term) = 1; -} - -/** Read value from volatile atomic type. - This function is necessary as some compilers mis-optimize - direct access to volatile variables (at least if you believe - one of the coding standards). - @param ap Pointer to volatile atomic variable. - @return Contents of the variable. -*/ -static -dk4_sig_atomic_t -sig_read_atomic(DK4_VOLATILE dk4_sig_atomic_t *ap) -{ - return (*ap); -} - -/** Check whether we can continue or if a signal was received. - @param check_pipe Flag: Check for occured SIGPIPE signal too. - @return 1 if the program can continue, 0 if a signal was received. -*/ -static -int -sig_can_continue( -#ifdef SIGPIPE -int check_pipe -#else -int DK4_ARG_UNUSED(check_pipe) -#endif -) -{ - int back = 1; -#ifndef SIGPIPE - DK4_UNUSED_ARG(check_pipe) -#else - if (0 != check_pipe) { - if (0 != sig_read_atomic(&sig_had_pipe)) { back = 0; } - } -#endif - if (0 != sig_read_atomic(&sig_had_int )) { back = 0; } - if (0 != sig_read_atomic(&sig_had_term)) { back = 0; } - return back; -} - - - -static -void -dk_blks_transfer(char *ib, char *ob, size_t bs) -{ - int cc = 1; /* Flag: Can continue */ - size_t irdb = 0; /* Bytes in input buffer */ - size_t iused = 0; /* Input bytes used */ - size_t oused = 0; /* Output bytes used */ - size_t iavail; /* Input bytes available */ - size_t oavail; /* Output bytes available */ - size_t bcp; /* Bytes to copy */ -#if DK4_ON_WINDOWS - int rdres; /* Number of bytes read */ - int wrres; /* Number of bytes written */ -#else - ssize_t rdres; /* Number of bytes read */ - ssize_t wrres; /* Number of bytes written */ -#endif - dk4_sig_atomic_t shp; /* Had pipe */ - - -#line 536 "dk-blks.ctr" - /* Process input - */ - exval = EXIT_SUCCESS; - do { - if (1 == sig_can_continue(0)) { - errno = 0; - -#line 542 "dk-blks.ctr" -#if DK4_ON_WINDOWS - rdres = _read(0, ib, (unsigned)bs); -#else - rdres = read(0, ib, bs); -#endif - if (0 < rdres) { - -#line 548 "dk-blks.ctr" - irdb = rdres; - iused = 0; - while(iused < irdb) { - /* Find number of bytes we can add to output buffer */ - iavail = irdb - iused; - oavail = bs - oused; - if (iavail < oavail) { - bcp = iavail; - } else { - bcp = oavail; - } - /* Add bytes to output buffer */ - DK4_MEMCPY(&(ob[oused]), &(ib[iused]), bcp); - /* Increased number of used bytes for both input and output */ - oused += bcp; - iused += bcp; - /* Flush output buffer when full */ - if (oused >= bs) { -#ifdef SIGPIPE - shp = sig_read_atomic(&sig_had_pipe); -#else - shp = 0; -#endif - if (0 == shp) { - errno = 0; -#if DK4_ON_WINDOWS - wrres = _write(1, ob, (unsigned)bs); -#else - wrres = write(1, ob, bs); -#endif - if (0 <= wrres) { - if (((size_t)wrres) < bs) { - /* ERROR: Not all bytes written */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 0); - exval = EXIT_FAILURE; - cc = -1; - } - } else { - /* ERROR Write attempt failed */ - dk4fd_write_error_msg(app, kwnl[4], errno); - exval = EXIT_FAILURE; - cc = -1; - } - } - oused = 0; - } - } - } else { - if (0 == rdres) { - -#line 597 "dk-blks.ctr" - cc = 0; - } else { - -#line 599 "dk-blks.ctr" - /* ERROR: Read operation failed */ - dk4fd_read_error_msg(app, kwnl[3], errno); - cc = 0; - exval = EXIT_FAILURE; - } - } -#if DK4_ON_WINDOWS - if (_eof(0)) { - cc = 0; - } -#endif - } else { - cc = -1; - } - } while (1 == cc); - - /* Flush output buffer */ - if (0 == cc) { - if (0 < oused) { -#ifdef SIGPIPE - shp = sig_read_atomic(&sig_had_pipe); -#else - shp = 0; -#endif - if (0 == shp) { - errno = 0; -#if DK4_ON_WINDOWS - wrres = _write(1, ob, (unsigned)oused); -#else - wrres = write(1, ob, oused); -#endif - if (0 <= wrres) { - if (((size_t)wrres) < oused) { - /* ERROR: Not all bytes written */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 0); - exval = EXIT_FAILURE; - } - } else { - /* ERROR: Write attempt failed */ - dk4fd_write_error_msg(app, kwnl[4], errno); - exval = EXIT_FAILURE; - } - } - } - } - - /* Finally zero-fill used buffers. - */ - if (0 == dk4mem_reset_secure(ib, bs, NULL)) { - /* ERROR: Secure memory reset failed */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 1); - exval = EXIT_FAILURE; - } - if (0 == dk4mem_reset_secure(ob, bs, NULL)) { - /* ERROR: Secure memory reset failed */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 1); - exval = EXIT_FAILURE; - } - - - -#line 659 "dk-blks.ctr" -} - - - -static -void -dk_blks_with_buffers(char *ib, char *ob, size_t bs) -{ -#if DK4_ON_WINDOWS - int oldinmode = 0; - int oldoutmode = 0; -#endif - if ((dk4_um_t)RW_MAX >= (dk4_um_t)bs) { -#if DK4_ON_WINDOWS - oldinmode = _setmode(0, _O_BINARY); - oldoutmode = _setmode(1, _O_BINARY); -#endif - dk_blks_transfer(ib, ob, bs); -#if DK4_ON_WINDOWS - _setmode(1, oldoutmode); - _setmode(0, oldinmode); -#endif - } else { - /* ERROR: Block size too large */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 2); - } -} - - - -/** Run normally. -*/ -static -void -dk_blks_normal_run(void) -{ - char *myib; - char *myob; - size_t mybs = DK_BLKS_DEFAULT_BLOCK_SIZE; - int res = 0; - - -#line 700 "dk-blks.ctr" - if (0 != dk4app_opt_is_set_short(app, dkT('b'), NULL)) { - res = dk4app_opt_get_size_short(&mybs, app, dkT('b'), NULL); - if (0 == res) { - mybs = DK_BLKS_DEFAULT_BLOCK_SIZE; - } - } - if ((0 < mybs) && (mybs <= DK_BLKS_DEFAULT_BLOCK_SIZE)) { - dk_blks_with_buffers( - default_input_buffer, - default_output_buffer, - mybs - ); - } else { - if (0 < mybs) { - myib = (char *)dk4mem_calloc_app(1, mybs, app); - if (NULL != myib) { - myob = (char *)dk4mem_calloc_app(1, mybs, app); - if (NULL != myob) { - dk_blks_with_buffers(myib, myob, mybs); - dk4mem_free(myob); - } - dk4mem_free(myib); - } - } else { - /* ERROR: Illegal block size */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 3); - } - } - - -#line 729 "dk-blks.ctr" -} - - - -#if DK4_HAVE_SIGACTION -/** Set signal handlers and run. -*/ -static -void -run_with_signals(void) -{ -#ifdef SIGPIPE - struct sigaction opipe; -#endif - struct sigaction oint; - struct sigaction oterm; -#ifdef SIGPIPE - struct sigaction npipe; -#endif - struct sigaction nint; - struct sigaction nterm; - int success = 0; - -#ifdef SIGPIPE - /* Set up signal handling for SIGPIPE. - */ - DK4_MEMRES(&npipe, sizeof(npipe)); - npipe.sa_handler = sig_handler_pipe; - npipe.sa_flags = 0; - if (0 != sigemptyset(&npipe.sa_mask)) { - /* ERROR: Failed to set up masked signal set for SIGPIPE */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 4); - goto finished; - } - if (0 != sigaddset(&npipe.sa_mask, SIGPIPE)) { - /* ERROR: Failed to set up masked signal set for SIGPIPE */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 4); - goto finished; - } - if (0 != sigaction(SIGPIPE, &npipe, &opipe)) { - /* ERROR: Failed to set up signal handler for SIGPIPE */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 4); - goto finished; - } -#endif - - /* Set up signal handling for SIGINT. - */ - DK4_MEMRES(&nint, sizeof(nint)); - nint.sa_handler = sig_handler_int; - nint.sa_flags = 0; - if (0 != sigemptyset(&nint.sa_mask)) { - /* ERROR: Failed to set up masked signal set for SIGINT */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 4); - goto restore_old_pipe; - } - if (0 != sigaddset(&nint.sa_mask, SIGINT)) { - /* ERROR: Failed to set up masked signal set for SIGINT */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 4); - goto restore_old_pipe; - } - if (0 != sigaction(SIGINT, &nint, &oint)) { - /* ERROR: Failed to set up signal handler for SIGINT */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 4); - goto restore_old_pipe; - } - - /* Set up signal handling for SIGTERM - */ - DK4_MEMRES(&nterm, sizeof(nterm)); - nterm.sa_handler = sig_handler_term; - nterm.sa_flags = 0; - if (0 != sigemptyset(&nterm.sa_mask)) { - /* ERROR: Failed to set up masked signal set for SIGTERM */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 4); - goto restore_old_int; - } - if (0 != sigaddset(&nterm.sa_mask, SIGTERM)) { - /* ERROR: Failed to set up masked signal set for SIGTERM */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 4); - goto restore_old_int; - } - if (0 != sigaction(SIGTERM, &nterm, &oterm)) { - /* ERROR: Failed to set up signal handler for SIGTERM */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 4); - goto restore_old_int; - } - - success = 1; - dk_blks_normal_run(); - - /* Restore signal handling for SIGTERM. - */ - if (0 != sigaction(SIGTERM, &oterm, NULL)) { - /* ERROR: Failed to restore old SIGTERM settings */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 5); - success = 0; - } - - /* Restore signal handling for SIGINT. - */ - restore_old_int: - if (0 != sigaction(SIGINT, &oint, NULL)) { - /* ERROR: Failed to restore old SIGPIPE settings */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 5); - success = 0; - } - -#ifdef SIGPIPE - /* Restore signal handling for SIGPIPE. - */ - restore_old_pipe: - if (0 != sigaction(SIGPIPE, &opipe, NULL)) { - /* ERROR: Failed to restore old SIGPIPE settings */ - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 5); - success = 0; - } -#endif - - /* Set exit status code if error occured. - */ - finished: - if (0 == success) { exval = EXIT_FAILURE; } -} -#else -#if DK4_HAVE_SIGSET -/** Set signal handlers and run. -*/ -static -void -run_with_signals(void) -{ -#ifdef SIGPIPE - dk4_sig_handler_t *oldpipe = NULL; -#endif - dk4_sig_handler_t *oldint = NULL; - dk4_sig_handler_t *oldterm = NULL; - -#ifdef SIGPIPE - oldpipe = sigset(SIGPIPE, sig_handler_pipe); -#endif - oldint = sigset(SIGINT, sig_handler_int); - oldterm = sigset(SIGTERM, sig_handler_term); - dk_blks_normal_run(); - sigset(SIGTERM, oldterm); - sigset(SIGINT, oldint); -#ifdef SIGPIPE - sigset(SIGPIPE, oldpipe); -#endif -} -#else -#if DK4_HAVE_SIGNAL -/** Set signal handlers and run. -*/ -static -void -run_with_signals(void) -{ -#ifdef SIGPIPE - dk4_sig_handler_t *oldpipe = NULL; -#endif - dk4_sig_handler_t *oldint = NULL; - dk4_sig_handler_t *oldterm = NULL; - -#ifdef SIGPIPE - oldpipe = signal(SIGPIPE, sig_handler_pipe); -#endif - oldint = signal(SIGINT, sig_handler_int); - oldterm = signal(SIGTERM, sig_handler_term); - dk_blks_normal_run(); - signal(SIGTERM, oldterm); - signal(SIGINT, oldint); -#ifdef SIGPIPE - signal(SIGPIPE, oldpipe); -#endif -} -#else -/** Set signal handlers and run. -*/ -static -void -run_with_signals(void) -{ - dk_blks_normal_run(); -} -#endif -#endif -#endif - - -/** Main function. - @param argc Number of command line arguments. - @param argv Command line arguments array. - @return 0 on success, all other values indicate errors. -*/ -#if DK4_CHAR_SIZE > 1 -int wmain(int argc, wchar_t *argv[]) -#else -int main(int argc, char *argv[]) -#endif -{ - dkChar const *xargv; - int xargc; - int i; - - -#line 934 "dk-blks.ctr" - - -#line 935 "dk-blks.ctr" - app = dk4app_open_cmd( - argc, argv, options, sz_options, kwnl[0], DKT_VERSION_DK, - kwnl[1], help_text, license_text - ); - if (NULL != app) { - sz_msg = dk4app_string_table_size(kw_def); - dk_blks_msg = dk4app_string_table(app, kwnl[2], kw_def); - if (0 != dk4app_can_run_normally(app)) { - run_with_signals(); - xargc = dk4app_get_argc(app); - if (0 < xargc) { - for (i = 0; i < xargc; i++) { - xargv = dk4app_get_argv(app, i); - if (NULL != xargv) { - dk4app_log_3(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 8, 9, xargv); - exval = EXIT_FAILURE; - } - } - } -#ifdef SIGPIPE - if (0 != sig_read_atomic(&sig_had_pipe)) { - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 6); - exval = EXIT_FAILURE; - } -#endif - if (0 != sig_read_atomic(&sig_had_int)) { - dk4app_log_1(app, dk_blks_msg, sz_msg, DK4_LL_ERROR, 7); - exval = EXIT_FAILURE; - } - } else { - if (0 != dk4app_help_version_license(app)) { - exval = EXIT_SUCCESS; - } - } - dk4app_close(app); app = NULL; - } else { - } - - -#line 973 "dk-blks.ctr" - - -#line 974 "dk-blks.ctr" - exit(exval); return exval; -} - |