groff 1.23.0 added .MR to its -man macro package. The NEWS file states
that the inclusion of the macro "was prompted by its introduction to
Plan 9 from User Space's troff in August 2020." From d32deab it seems
that the name for Plan 9 from User Space's implementation was suggested
by groff maintainer G. Brandon Robinson.
Not sure if the intention was to make these definitions compatible, but
it would be nice if they were.
Currently, Plan 9 from User Space's .MR expects its second argument to
be parenthesized. groff's .MR does not. This results in extra
parentheses appearing in manual references when viewing Plan 9 from User
Space's manual pages on a system using groff.
108 lines
2.0 KiB
Groff
108 lines
2.0 KiB
Groff
.TH ERRSTR 3
|
|
.SH NAME
|
|
errstr, rerrstr, werrstr \- description of last system call error
|
|
.SH SYNOPSIS
|
|
.B #include <u.h>
|
|
.br
|
|
.B #include <libc.h>
|
|
.PP
|
|
.B
|
|
int errstr(char *err, uint nerr)
|
|
.PP
|
|
.B
|
|
void rerrstr(char *err, uint nerr)
|
|
.PP
|
|
.B
|
|
void werrstr(char *fmt, ...)
|
|
.SH DESCRIPTION
|
|
When a system call fails it returns \-1 and
|
|
records a null terminated string describing the error in a per-process buffer.
|
|
.I Errstr
|
|
swaps the contents of that buffer with the contents of the array
|
|
.IR err .
|
|
.I Errstr
|
|
will write at most
|
|
.I nerr
|
|
bytes into
|
|
.IR err ;
|
|
if the per-process error string does not fit,
|
|
it is silently truncated at a UTF character boundary.
|
|
The returned string is NUL-terminated.
|
|
Usually
|
|
.I errstr
|
|
will be called with an empty string,
|
|
but the exchange property provides a mechanism for
|
|
libraries to set the return value for the next call to
|
|
.IR errstr .
|
|
.PP
|
|
The per-process buffer is
|
|
.B ERRMAX
|
|
bytes long. Any error string provided by the user will
|
|
be truncated at
|
|
.B ERRMAX-1
|
|
bytes.
|
|
.B ERRMAX
|
|
is defined in
|
|
.BR <libc.h> .
|
|
.PP
|
|
If no system call has generated an error since the last call to
|
|
.I errstr
|
|
with an empty string,
|
|
the result is an empty string.
|
|
.PP
|
|
The verb
|
|
.B r
|
|
in
|
|
.MR print 3
|
|
calls
|
|
.I errstr
|
|
and outputs the error string.
|
|
.PP
|
|
.I Rerrstr
|
|
reads the error string but does not modify the per-process buffer, so
|
|
a subsequent
|
|
.I errstr
|
|
will recover the same string.
|
|
.PP
|
|
.I Werrstr
|
|
takes a
|
|
.I print
|
|
style format as its argument and uses it to format
|
|
a string to pass to
|
|
.IR errstr .
|
|
The string returned from
|
|
.I errstr
|
|
is discarded.
|
|
.PP
|
|
The error string is maintained in parallel with the Unix
|
|
error number
|
|
.IR errno .
|
|
Changing
|
|
.I errno
|
|
will reset the error string,
|
|
and changing the error string via
|
|
.I errstr
|
|
or
|
|
.I werrstr
|
|
will reset
|
|
.IR errno .
|
|
.SH SOURCE
|
|
.B \*9/src/lib9/errstr.c
|
|
.SH DIAGNOSTICS
|
|
.I Errstr
|
|
always returns 0.
|
|
.SH SEE ALSO
|
|
.MR intro 3 ,
|
|
.MR perror 3
|
|
.SH BUGS
|
|
The implementation sets
|
|
.I errno
|
|
to the (somewhat arbitrary)
|
|
constant 0x19283745 when
|
|
the error string is valid.
|
|
When
|
|
.I errno
|
|
is set to other values, the error string
|
|
is synthesized using
|
|
.MR strerror 3 .
|