@@ -18,6 +18,10 @@ pub enum FromEnvErrorKind {
18
18
/// There is no jobserver in the environment variable.
19
19
/// Variables associated with Make can be used for passing data other than jobserver info.
20
20
NoJobserver ,
21
+ /// POSIX jobserver allows passing negative file descriptors to notify that
22
+ /// jobserver is disabled for this process
23
+ /// (See ["GNU male manual: POSIX Jobserver Interaction"](https://www.gnu.org/software/make/manual/make.html#POSIX-Jobserver)).
24
+ NegativeFd ,
21
25
/// Cannot parse jobserver environment variable value, incorrect format.
22
26
CannotParse ,
23
27
/// Cannot open path or name from the jobserver environment variable value.
@@ -36,6 +40,7 @@ impl FromEnvError {
36
40
match self . inner {
37
41
FromEnvErrorInner :: NoEnvVar => FromEnvErrorKind :: NoEnvVar ,
38
42
FromEnvErrorInner :: NoJobserver => FromEnvErrorKind :: NoJobserver ,
43
+ FromEnvErrorInner :: NegativeFd ( ..) => FromEnvErrorKind :: NegativeFd ,
39
44
FromEnvErrorInner :: CannotParse ( _) => FromEnvErrorKind :: CannotParse ,
40
45
FromEnvErrorInner :: CannotOpenPath ( ..) => FromEnvErrorKind :: CannotOpenPath ,
41
46
FromEnvErrorInner :: CannotOpenFd ( ..) => FromEnvErrorKind :: CannotOpenFd ,
@@ -50,6 +55,7 @@ impl std::fmt::Display for FromEnvError {
50
55
match & self . inner {
51
56
FromEnvErrorInner :: NoEnvVar => write ! ( f, "there is no environment variable that describes jobserver to inherit" ) ,
52
57
FromEnvErrorInner :: NoJobserver => write ! ( f, "there is no `--jobserver-fds=` or `--jobserver-auth=` in the environment variable" ) ,
58
+ FromEnvErrorInner :: NegativeFd ( read, write) => write ! ( f, "either or both passed file descriptors are negative: {read}, {write}" ) ,
53
59
FromEnvErrorInner :: CannotParse ( s) => write ! ( f, "cannot parse jobserver environment variable value: {s}" ) ,
54
60
FromEnvErrorInner :: CannotOpenPath ( s, err) => write ! ( f, "cannot open path or name {s} from the jobserver environment variable value: {err}" ) ,
55
61
FromEnvErrorInner :: CannotOpenFd ( fd, err) => write ! ( f, "cannot open file descriptor {fd} from the jobserver environment variable value: {err}" ) ,
@@ -76,6 +82,7 @@ impl std::error::Error for FromEnvError {
76
82
pub ( crate ) enum FromEnvErrorInner {
77
83
NoEnvVar ,
78
84
NoJobserver ,
85
+ NegativeFd ( RawFd , RawFd ) ,
79
86
CannotParse ( String ) ,
80
87
CannotOpenPath ( String , std:: io:: Error ) ,
81
88
CannotOpenFd ( RawFd , std:: io:: Error ) ,
0 commit comments