summaryrefslogtreecommitdiff
path: root/support/dktools/dk-eradisk.ctr
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-10-12 03:04:00 +0000
committerNorbert Preining <norbert@preining.info>2020-10-12 03:04:00 +0000
commit0ce40abb18ec02ec6fd6bcc5f21612c88daa7578 (patch)
tree416289fe1448873fd8ca33051f50ad85bffa8aaa /support/dktools/dk-eradisk.ctr
parentfdb18507cd80dc17f5a5256153d34668b4f4e61c (diff)
CTAN sync 202010120303
Diffstat (limited to 'support/dktools/dk-eradisk.ctr')
-rw-r--r--support/dktools/dk-eradisk.ctr936
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;
-}
-