ERRSTR(2)                                               ERRSTR(2)

          errstr, rerrstr, werrstr - description of last system call

          #include <u.h>
          #include <libc.h>

          int errstr(char *err, uint nerr)

          void rerrstr(char *err, uint nerr)

          void werrstr(char *fmt, ...)

          When a system call fails it returns -1 and records a null
          terminated string describing the error in a per-process
          buffer.  Errstr swaps the contents of that buffer with the
          contents of the array err. Errstr will write at most nerr
          bytes into 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 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 errstr.

          The per-process buffer is ERRMAX bytes long.  Any error
          string provided by the user will be truncated at ERRMAX-1
          bytes.  ERRMAX is defined in <libc.h>.

          If no system call has generated an error since the last call
          to errstr with an empty string, the result is an empty

          The verb r in print(2) calls errstr and outputs the error

          Rerrstr reads the error string but does not modify the per-
          process buffer, so a subsequent errstr will recover the same

          Werrstr takes a print style format as its argument and uses
          it to format a string to pass to errstr. The string returned
          from errstr is discarded.



     ERRSTR(2)                                               ERRSTR(2)

          Errstr always returns 0.

          intro(2), perror(2)