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-eradisk.ctr | |
parent | fdb18507cd80dc17f5a5256153d34668b4f4e61c (diff) |
CTAN sync 202010120303
Diffstat (limited to 'support/dktools/dk-eradisk.ctr')
-rw-r--r-- | support/dktools/dk-eradisk.ctr | 936 |
1 files changed, 0 insertions, 936 deletions
diff --git a/support/dktools/dk-eradisk.ctr b/support/dktools/dk-eradisk.ctr deleted file mode 100644 index c7eac33acc..0000000000 --- a/support/dktools/dk-eradisk.ctr +++ /dev/null @@ -1,936 +0,0 @@ -%% options - -copyright owner = Dirk Krause -copyright year = 2015-xxxx -SPDX-License-Identifier: BSD-3-Clause - - -%% module - - -#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_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 - -#if DK4_HAVE_ERRNO_H -#ifndef ERRNO_H_INCLUDED -#include <errno.h> -#define ERRNO_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_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_PROCESS_H -#ifndef PROCESS_H_INCLUDED -#include <process.h> -#define PROCESS_H_INCLUDED 1 -#endif -#endif - -#include "dk4types.h" -#include "dk4const.h" -#include "dk4vers.h" -#include "dk4app.h" -#include "dk4aopt.h" -#include "dk4mem.h" -#include "dk4numco.h" -#include "dk4fdwre.h" -#include "dk4unused.h" - -#ifndef DK4WMAIN_H_INCLUDED -#include "dk4wmain.h" -#endif - - -$!trace-include - - - -/** Constant texts used by program, not localized. -*/ -static const dkChar * const dk_eradisk_kwnl[] = { -$!string-table macro=dkT -# -# 0 Program group name -# -dktools -# -# 1 Help text file name -# -dk-eradisk.txt -# -# 2 String table file -# -dk-eradisk.str -$!end -}; - - - -/** Constant texts used by program, replaced by localized texts - if available. -*/ -static const dkChar * const dk_eradisk_kw_def[] = { -$!string-table macro=dkT -# -# 0 Error message: Failed to set up signal handlers! -# -Failed to set up signal handlers! -# -# 1 Error message: Failed to restore signal handlers! -# -Failed to restore signal handlers! -# -# 2 Error message: Signal SIGPIPE received -# -Aborted by SIGPIPE signal! -# -# 3 Error message: Signal SIGINT received! -# -Aborted by SIGINT signal! -# -# 4 Error message: Aborted by SIGTERM signal! -# -Aborted by SIGTERM signal! -# -# 5 Error message: Block size too large. -# -Block size too large! -# -# 6 Error message: Pass number out of range! -# -Pass number out of range! -# -# 7 Error message: Block size must not be 0! -# -Block size must not be 0! -$!end -}; - - - -/** Default text, used if help text file is not found. -*/ -static const dkChar * const dk_eradisk_help_text[] = { -$!text macro=dkT,preprocessor - -NAME - - dk-eradisk - Generate patterns to erase disk before retiring it - -SYNOPSIS - - dk-eradisk [<options>] - -DESCRIPTION - -The program generates a data stream to erase a disk. -Before retiring a disk or handing a disk over to another user one -should remove all contents. -The output from dk-eradisk can be used as input for the ``dd'' program -to safely clean a disk. - -OPTIONS - --p <number>, --pass=<number> - Pass number. Pass 0 (should be used as last pass) - can be used to write 0 bytes, so operating systems recognize - the disk as new from manufacturer. - The pass number chooses the bit pattern, one from 0x00, 0xFF, - 0x0F, 0xF0, 0x33, 0xCC, 0x55, or 0xAA. - When doing multiple passes, start with the highest pass number, - use pass number 0 for the final pass. - --b <size>, --blocksize=<size> - Block size (default: 4096). - The default is suitable for traditional hard disks. - For flash memory (i.e. SSD) you should increase the value to 1m. - --c <size>, --count=<size> - Number of blocks to write. - The default 0 creates an endless sequence of blocks - until the program is finished by signal. - -EXIT STATUS - -0 on success, all other exit status codes indicate an error. - -AUTHOR - -Dirk Krause - -COPYRIGHT AND LICENSE - -Run - dk-eradisk --license -to see license information. - -SEE ALSO - -http://sourceforge.net/p/dktools/wiki/dk-eradisk/ - -$!end -}; - - - -/** License conditions. -*/ -static const dkChar * const dk_eradisk_license_text[] = { -$!text macro=dkT,preprocessor -This software uses code from the following projects, either directly or as -a library: - -dktools Dirk Krause's tools and libraries. - See http://sourceforge.net/p/dktools/wiki/Home/ - for more information. -#if DK4_HAVE_ZLIB_H - -zlib Data compression library. - See http://www.zlib.net/ for more information. -#endif -#if DK4_HAVE_BZLIB_H - -bzip2 Data compression program and library. - See http://www.bzip.org/ for more information. -#endif - -All the licenses below apply to the program. -Licenses for used libraries are shown as found on my Scientific Linux 6.x -computer in the /usr/share/doc directory on 2015-04-01. Check the project -homepages of the used libraries for additional information and/or updated -license terms. - - -DK tools and libraries license -============================== -Copyright (c) 2015-2016, Dirk Krause -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -2. 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. -3. Neither the name of the copyright holder 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 HOLDER 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. -#if DK4_HAVE_ZLIB_H - - -Zlib license -============ -(C) 1995-2004 Jean-loup Gailly and Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. - -Jean-loup Gailly Mark Adler -jloup@gzip.org madler@alumni.caltech.edu -#endif -#if DK4_HAVE_BZLIB_H - - -Bzip2 and libbzip2 library license -================================== -This program, "bzip2", the associated library "libbzip2", and all -documentation, are copyright (C) 1996-2007 Julian R Seward. All -rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. The origin of this software must not be misrepresented; you must - not claim that you wrote the original software. If you use this - software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - -3. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - -4. The name of the author may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - -Julian Seward, jseward@bzip.org -bzip2/libbzip2 version 1.0.5 of 10 December 2007 -#endif - -$!end -}; - - - -/** Options used by program. -*/ -static const dk4_option_specification_t dk_eradisk_options[] = { - - /* Flag: Line end consists of carriage return and newline. - */ - { dkT('p'), dkT("pass"), DK4_OPT_ARG_INT }, - - /* Show line numbers. - */ - { dkT('b'), dkT("blocksize"), DK4_OPT_ARG_SIZE }, - - /* Number of digits for line numbers. - */ - { dkT('c'), dkT("count"), DK4_OPT_ARG_SIZE } -}; - -/** Number of elements in the dk_cat_options array. -*/ -static const size_t dk_eradisk_sz_options = -sizeof(dk_eradisk_options)/sizeof(dk4_option_specification_t); - - - -/** Application structure. -*/ -static dk4_app_t *app = NULL; - - - -/** Localized texts used by the program. -*/ -static const dkChar * const *msg = dk_eradisk_kw_def; - -/** Number of elements in dk_blks_msg array. -*/ -static size_t sz_msg = -sizeof(dk_eradisk_kw_def)/sizeof(DK4_PCDKCHAR) - 1; - - - -/** Number of blocks (0 for unlimited). -*/ -static size_t count = 0; - - - -/** Block size. -*/ -static size_t blks = 4096; - - - -/** Pass number. -*/ -static int passno = 0; - - - -/** Small static buffer. -*/ -static char default_buffer[4096]; - - - -/** A buffer is allocated dynamically if the size is larger - than default_buffer size. -*/ -static char *allocated_buffer = NULL; - - - -/** The buffer used by the program. -*/ -static char *buffer = NULL; - - - -/** Exit status code. -*/ -static int exval = EXIT_FAILURE; - - - -#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; - - - -/** Pass a volatile pointer to an atomic integer. - 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 ptr Address of atomic integer variable. - @return The unmodified pointer. -*/ -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_eradisk_memset(char *ptr, size_t sz, char patbyte) -{ -#if DK4_HAVE_MEMSET - memset((void *)ptr, (int)patbyte, sz); -#else - while(sz--) { *(ptr++) = patbyte; } -#endif -} - - - -static -void -produce_output(void) -{ - size_t nb; -#if DK4_ON_WINDOWS - int oldmode; - int wres; -#else - ssize_t wres; -#endif - int cc; - char patbyte; - - /* Check whether to use static or dynamic buffer, allocate - buffer if necessary. - */ - if (sizeof(default_buffer) >= blks) { - buffer = default_buffer; - } else { - allocated_buffer = (char *)dk4mem_malloc_bytes(blks, NULL); - if (NULL != allocated_buffer) { - buffer = allocated_buffer; - } else { - /* ERROR: Failed to obtain memory */ - dk4app_log_base1(app, DK4_LL_ERROR, 90); - } - } - - if (NULL != buffer) { -#if VERSION_BEFORE_20150821 - cc = 1; -#endif - nb = 0; - exval = EXIT_SUCCESS; - /* Set buffer to pattern depending on pass number. - */ - switch (passno) { - case 7 : { patbyte = 0xAA; } break; - case 6 : { patbyte = 0x55; } break; - case 5 : { patbyte = 0xCC; } break; - case 4 : { patbyte = 0x33; } break; - case 3 : { patbyte = 0xF0; } break; - case 2 : { patbyte = 0x0F; } break; - case 1 : { patbyte = 0xFF; } break; - default: { patbyte = 0x00; } break; - } - dk_eradisk_memset(buffer, blks, patbyte); - /* Write output buffer. - */ - cc = sig_can_continue(1); -#if DK4_ON_WINDOWS - oldmode = _setmode(1, _O_BINARY); - if ((dk4_um_t)UINT_MAX < blks) { - /* ERROR: Block size too large! */ - dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 5); - cc = -1; - } -#else - if ((dk4_um_t)(SIZE_MAX / 2) < blks) { - /* ERROR: Block size too large! */ - dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 5); - cc = -1; - } -#endif - while(1 == cc) { - errno = 0; -#if DK4_ON_WINDOWS - wres = _write(1, buffer, (unsigned)blks); -#else - wres = write(1, buffer, blks); -#endif - if (-1 == wres) { - cc = -1; - dk4fd_write_error_msg(app, NULL, errno); - } - if (1 != sig_can_continue(1)) { - if (1 == cc) { cc = -1; } - } - if (0 < count) { - if (++nb >= count) { - if (1 == cc) { cc = 0; } - } - } - } -#if DK4_ON_WINDOWS - _setmode(1, oldmode); -#endif - } - - /* Release buffer if dynamically allocated. - */ - if (NULL != allocated_buffer) { - dk4mem_free(allocated_buffer); - } -} - - - -#if DK4_HAVE_SIGACTION -/** Set signal handlers and run. -*/ -static -void -run_with_signals(void) -{ -#ifdef SIGPIPE - struct sigaction opipe; -#endif - struct sigaction oint; -#ifdef SIGPIPE - struct sigaction npipe; -#endif - struct sigaction nint; - struct sigaction oterm; - 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, msg, sz_msg, DK4_LL_ERROR, 0); - goto finished; - } - if (0 != sigaddset(&npipe.sa_mask, SIGPIPE)) { - /* ERROR: Failed to set up masked signal set for SIGPIPE */ - dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 0); - goto finished; - } - if (0 != sigaction(SIGPIPE, &npipe, &opipe)) { - /* ERROR: Failed to set up signal handler for SIGPIPE */ - dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 0); - 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, msg, sz_msg, DK4_LL_ERROR, 0); - 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, msg, sz_msg, DK4_LL_ERROR, 0); - goto restore_old_pipe; - } - if (0 != sigaction(SIGINT, &nint, &oint)) { - /* ERROR: Failed to set up signal handler for SIGINT */ - dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 0); - 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, msg, sz_msg, DK4_LL_ERROR, 0); - 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, msg, sz_msg, DK4_LL_ERROR, 0); - goto restore_old_int; - } - if (0 != sigaction(SIGTERM, &nterm, &oterm)) { - /* ERROR: Failed to set up signal handler for SIGTERM */ - dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 0); - goto restore_old_int; - } - - success = 1; - produce_output(); - - /* Restore signal handling for SIGTERM. - */ - if (0 != sigaction(SIGTERM, &oterm, NULL)) { - /* ERROR: Failed to restore old SIGTERM settings */ - dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 1); - 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, msg, sz_msg, DK4_LL_ERROR, 1); - 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, msg, sz_msg, DK4_LL_ERROR, 1); - 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); - produce_output(); - 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); - produce_output(); - signal(SIGTERM, oldterm); - signal(SIGINT, oldint); -#ifdef SIGPIPE - signal(SIGPIPE, oldpipe); -#endif -} -#else -/** Set signal handlers and run. -*/ -static -void -run_with_signals(void) -{ - produce_output(); -} -#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 -{ - dk4_im_t i; - size_t sz; - $!trace-init dk-eradisk.deb - $? "+ main" - - app = dk4app_open_cmd( - argc, argv, dk_eradisk_options, dk_eradisk_sz_options, - dk_eradisk_kwnl[0], DKT_VERSION_DK, - dk_eradisk_kwnl[1], dk_eradisk_help_text, dk_eradisk_license_text - ); - if (NULL != app) { - sz_msg = dk4app_string_table_size(dk_eradisk_kw_def); - msg = dk4app_string_table(app, dk_eradisk_kwnl[2], dk_eradisk_kw_def); - if (0 != dk4app_can_run_normally(app)) { - if (0 != dk4app_opt_is_set_short(app, dkT('p'), NULL)) { - if (0 != dk4app_opt_get_int_short(&i, app, dkT('p'), NULL)) { - if ((INT_MIN <= i) && (INT_MAX >= i)) { - passno = (int)i; - } else { - /* ERROR: Out of range */ - dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 6); - if (0 < i) { passno = INT_MAX; } - else { passno = INT_MIN; } - } - } - } - if (0 != dk4app_opt_is_set_short(app, dkT('b'), NULL)) { - if (0 != dk4app_opt_get_size_short(&sz, app, dkT('b'), NULL)) { - if (0 < sz) { - blks = sz; - } else { - /* ERROR: Out of range */ - dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 7); - } - } - } - if (0 != dk4app_opt_is_set_short(app, dkT('c'), NULL)) { - if (0 != dk4app_opt_get_size_short(&sz, app, dkT('c'), NULL)) { - count = sz; - } - } - run_with_signals(); -#ifdef SIGPIPE - if ((0 < count) && (0 != sig_read_atomic(&sig_had_pipe))) { - dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 2); - exval = EXIT_FAILURE; - } -#endif - if ((0 < count) && (0 != sig_read_atomic(&sig_had_int))) { - dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 3); - exval = EXIT_FAILURE; - } - if (0 != sig_read_atomic(&sig_had_term)) { - dk4app_log_1(app, msg, sz_msg, DK4_LL_ERROR, 4); - exval = EXIT_FAILURE; - } - } else { - if (0 != dk4app_help_version_license(app)) { - exval = EXIT_SUCCESS; - } - } - dk4app_close(app); - } - $? "- main %d", exval - $!trace-end - exit(exval); return exval; -} - |