3 unstable releases

Uses old Rust 2015

0.2.0 Feb 18, 2018
0.1.1 Oct 27, 2017
0.1.0 Oct 27, 2017

#184 in Unix APIs

39 downloads per month
Used in ctftools

ISC license

23KB
283 lines

sysexit

Rust module that provides exit codes for programs.

Synopsis

Usage:

use std::process;
use sysexit;

let exit_status = process::Command::new("sh")
    .arg("-c").arg(format!("exit {}", 74))
    .status()
    .expect("failed to run sh(1)");
let exit_code = sysexit::from_status(exit_status);
println!("{}", exit_code);

This outputs:

i/o error (74)

Description

The choice of an appropriate exit value is often ambigeous and whilst it is impossible to provide an authoritative anthology that applies under all circumstances, this crate attempts to collec the most frequently recognised exit codes across Unix systems.

Exit statuses fall between 0 and 255 (inclusive), and codes greater than zero indicate failure. The range 125–128 is reserved shell-specific statuses, including shell builtins and compound commands. The range 129–154 is reserved fatal signals, explained below.

As a basis it encodes the exit codes of [sysexits(3)] from OpenBSD (64–78), exit statuses used by bash(1), supplemented by codes created by shells when the command is terminated by a fatal signal. When the fatal signal is a number N, the latter follows bash’s strategy of using the value 128 + N as the exit status. This means that the SIGHUP (1) signal will be recognised as the exit code for the number 129.

Interface

You can see the full API documentation on https://docs.rs/sysexit.

pub fn from_status(status: std::process::ExitStatus) -> sysexit::Code

Converts std::process::ExitStatus to sysexit::Code.

pub fn is_success(status: std::process::ExitStatus) -> bool

Determines if the provided std::process::ExitStatus was successful.

pub fn is_error(status: std::process::ExitStatus) -> bool

Determines if the provided std::process::ExitStatus was jnsuccessful.

pub fn is_reserved(n: i32) -> bool

Test if the provided exit code is reserved and has a special meaning.

pub fn is_valid(n: i32) -> bool

Test if the provided exit code is valid, in other words that it is within the 0-255 (inclusive) range.

See also

_exit(2), exit(3), [sysexits(3)], bash(1)

History

This library is based on the sysexits.h file that first appeared in 4.0BSD for use by the delivermail utility, later renamed to sendmail(8). It was further expanded with fatal signals from bash(1).

You can consult the [CHANGES.md][] file for a record of all notable changes to the library.

Authors

Eric Allman invented the sysexits.h file in 1980. Much of the documentation for this library is based on the [sysexits(3)] man page written by Joerg Wunsch, based on Eric’s original comments. The is_reserved and is_valid functions were written by Richard Fussenegger. The Rust crate was written by Andreas Tolfsen.

Bugs

The choice of an appropriate exit value is often ambigeous.

Dependencies

~28KB