exit_code/
lib.rs

1//! Common exit codes for applications.
2//!
3//! # Example
4//! ```
5//! extern crate exit_code;
6//!
7//! ::std::process::exit(exit_code::SUCCESS);
8//! ```
9
10/// Successful termination.
11pub const SUCCESS: i32 = 0;
12
13/// Unsuccessful termination. This is a catch-all error code that should only
14/// be used by processes if the reason for the failure is unknown.
15pub const FAILURE: i32 = 1;
16
17/// The command was used incorrectly, e.g., with the wrong number of arguments,
18/// a bad flag, a bad syntax in a parameter, or whatever.
19pub const USAGE_ERROR: i32 = 64;
20
21/// The input data was incorrect in some way. This should only be used for
22/// user’s data and not system file.
23pub const DATA_ERROR: i32 = 65;
24
25/// An input file (not a system file) did not exist or was not readable. This
26/// could also include errors like “No message” to a mailer (if it cared to
27/// catch it).
28pub const NO_INPUT: i32 = 66;
29
30/// The user specified did not exist. This might be used for mail addresses or
31/// remote logins.
32pub const NO_USER: i32 = 67;
33
34/// The host specified did not exist. This is used in mail addresses of network
35/// requests.
36pub const NO_HOST: i32 = 68;
37
38/// A service is unavailable. This can occur if a support program or file does
39/// not exist. This can also be used as a catchall message when something you
40/// wanted to do doesn’t work, but you don’t know why.
41pub const SERVICE_UNAVAILABLE: i32 = 69;
42
43/// An internal software error has been detected. This should be limited to
44/// non-operating system related errors.
45pub const SOFTWARE_ERROR: i32 = 70;
46
47/// An operating system error has been detected. This is intended to be used
48/// for such things as “cannot fork”, “cannot create pipe”, or the like. It
49/// includes things like `getuid` returning a user that does not exist in the
50/// `passwd` file.
51pub const OS_ERROR: i32 = 71;
52
53/// Some system file (e.g., `/etc/passwd`, `/var/run/utmp`, etc.) does not
54/// exist, cannot be opened, or has some sort of error (e.g., syntax error).
55pub const OS_FILE_ERROR: i32 = 72;
56
57/// A (user specified) output file cannot be created.
58pub const CANNOT_CREATE: i32 = 73;
59
60/// An error occurred while doing I/O on some file.
61pub const IO_ERROR: i32 = 74;
62
63/// Temporary failure, indicating something that is not really an error. In
64/// `sendmail`, this means that a mailer (e.g.) could not create a connection,
65/// and the request should be reattempted later.
66pub const TEMPORARY_FAILURE: i32 = 75;
67
68/// The remote system returned something that was “not possible” during a
69/// protocol exchanged.
70pub const PROTOCOL_ERROR: i32 = 76;
71
72/// Insufficient permissions to perform an operation. This is not intended for
73/// file system problems, which should use `NO_INPUT` or `CANNOT_CREATE`, but
74/// rather for higher level permissions.
75pub const NO_PERMISSION: i32 = 77;
76
77/// Something was found in an unconfigured or misconfigured state.
78pub const CONFIG_ERROR: i32 = 78;
79
80/// Check if the given exit code is reserved and has a special meaning in a
81/// shells.
82///
83/// |-----------|----------------------------------------------------------|
84/// | Exit Code | Meaning                                                  |
85/// |-----------|----------------------------------------------------------|
86/// | 0         | Success                                                  |
87/// | 1         | Catchall for general errors                              |
88/// | 2         | Misuse of shell built-ins                                |
89/// | 64        | Usage Error                                              |
90/// | 65        | Data Error                                               |
91/// | 66        | No Input                                                 |
92/// | 67        | No User                                                  |
93/// | 68        | No Host                                                  |
94/// | 69        | Service Unavailable                                      |
95/// | 70        | Software Error                                           |
96/// | 71        | OS Error                                                 |
97/// | 72        | OS File Error                                            |
98/// | 73        | Cannot Create                                            |
99/// | 74        | IO Error                                                 |
100/// | 75        | Temporary Failure                                        |
101/// | 76        | Protocol Error                                           |
102/// | 77        | No Permission                                            |
103/// | 78        | Config Error                                             |
104/// | 126       | Command invoked cannot execute                           |
105/// | 127       | Command not found                                        |
106/// | 128       | Invalid argument to `exit`                               |
107/// | 128–137   | Fatal error signal (`kill -n` where `n` is added to 128) |
108/// | 256+      | Exit status out of range                                 |
109/// |-----------|----------------------------------------------------------|
110pub fn is_reserved(c: i32) -> bool {
111    (0 <= c && c <= 2) || (64 <= c && c <= 78) || (126 <= c && c <= 137)
112}
113
114/// Check if the given exit code is in [0..256].
115pub fn is_valid(c: i32) -> bool {
116    0 <= c && c <= 255
117}