The B]explain_ustat function is used to obtain an explanation of an
error returned by the I]ustat(2) system call. The least the message
will contain is the value of CW]strerror(errno), but usually it will
do much better, and indicate the underlying cause in more detail.

The I]errno global variable will be used to obtain the error value to
be decoded.

I]dev

The original dev, exactly as passed to the I]ustat(2) system call.

I]ubuf

The original ubuf, exactly as passed to the I]ustat(2) system call.

Returns:

The message explaining the error. This message buffer is shared by all
libexplain functions which do not supply a buffer in their argument list.
This will be overwritten by the next call to any libexplain function which
shares this buffer, including other threads.

B]Note: This function is B]not thread safe, because it shares a
return buffer across all threads, and many other functions in this library.

B]Example: This function is intended to be used in a fashion similar
to the following example:

if (ustat(dev, ubuf) < 0)

{

fprintf(stderr, "%s\n", explain_ustat(dev, ubuf));

exit(EXIT_FAILURE);
}

The above code example is available pre[hy]packaged as the
I]explain_ustat_or_die(3) function.

The B]explain_errno_ustat function is used to obtain an explanation
of an error returned by the I]ustat(2) system call. The least the
message will contain is the value of CW]strerror(errno), but usually
it will do much better, and indicate the underlying cause in more detail.

I]errnum

The error value to be decoded, usually obtained from the I]errno
global variable just before this function is called. This is necessary if
you need to call B]any code between the system call to be explained
and this function, because many libc functions will alter the value of
I]errno.

I]dev

The original dev, exactly as passed to the I]ustat(2) system call.

I]ubuf

The original ubuf, exactly as passed to the I]ustat(2) system call.

Returns:

The message explaining the error. This message buffer is shared by all
libexplain functions which do not supply a buffer in their argument list.
This will be overwritten by the next call to any libexplain function which
shares this buffer, including other threads.

B]Note: This function is B]not thread safe, because it shares a
return buffer across all threads, and many other functions in this library.

B]Example: This function is intended to be used in a fashion similar
to the following example:

if (ustat(dev, ubuf) < 0)

{
int err = errno;

fprintf(stderr, "%s\n", explain_errno_ustat(err, dev, ubuf));

exit(EXIT_FAILURE);
}

The above code example is available pre[hy]packaged as the
I]explain_ustat_or_die(3) function.

The B]explain_message_ustat function is used to obtain an explanation
of an error returned by the I]ustat(2) system call. The least the
message will contain is the value of CW]strerror(errno), but usually
it will do much better, and indicate the underlying cause in more detail.

The I]errno global variable will be used to obtain the error value to
be decoded.

I]message

The location in which to store the returned message. If a suitable message
return buffer is supplied, this function is thread safe.

I]message_size

The size in bytes of the location in which to store the returned message.

I]dev

The original dev, exactly as passed to the I]ustat(2) system call.

I]ubuf

The original ubuf, exactly as passed to the I]ustat(2) system call.

B]Example: This function is intended to be used in a fashion similar
to the following example:

if (ustat(dev, ubuf) < 0)

{
char message[3000];

explain_message_ustat(message, sizeof(message), dev, ubuf);

fprintf(stderr, "%s\n", message);
exit(EXIT_FAILURE);
}

The above code example is available pre[hy]packaged as the
I]explain_ustat_or_die(3) function.

The B]explain_message_errno_ustat function is used to obtain an
explanation of an error returned by the I]ustat(2) system call. The
least the message will contain is the value of CW]strerror(errno),
but usually it will do much better, and indicate the underlying cause in
more detail.

I]message

The location in which to store the returned message. If a suitable message
return buffer is supplied, this function is thread safe.

I]message_size

The size in bytes of the location in which to store the returned message.

I]errnum

The error value to be decoded, usually obtained from the I]errno
global variable just before this function is called. This is necessary if
you need to call B]any code between the system call to be explained
and this function, because many libc functions will alter the value of
I]errno.

I]dev

The original dev, exactly as passed to the I]ustat(2) system call.

I]ubuf

The original ubuf, exactly as passed to the I]ustat(2) system call.

B]Example: This function is intended to be used in a fashion similar
to the following example: