Provided by: libexplain-dev_1.4.D001-2_amd64 bug

NAME

       explain_read - explain read(2) errors

SYNOPSIS

       #include <libexplain/read.h>
       const char *explain_read(int fildes, const void *data, long data_size);
       const char *explain_errno_read(int errnum, int fildes, const void *data, long data_size);
       void  explain_message_read(char  *message, int message_size, int fildes, const void *data,
       long data_size);
       void explain_message_errno_read(char *message, int message_size, int errnum,  int  fildes,
       const void *data, long data_size);

DESCRIPTION

       These functions may be used to obtain an explanation for read(2) errors.

   explain_read
       const char *explain_read(int fildes, const void *data, long data_size);

       The  explain_read function may be used to obtain a human readable explanation of what went
       wrong in a read(2) system call.  The least the  message  will  contain  is  the  value  of
       strerror(errno),  but usually it will do much better, and indicate the underlying cause in
       more detail.

       The error number will be picked up from the errno global variable.

       This function is intended to be used in a fashion similar to the following example:
              ssize_t n = read(fd, data, data_size);
              if (n < 0)
              {
                  fprintf(stderr, "%s\n", explain_read(fd, data, data_size));
                  exit(EXIT_FAILURE);
              }

       fildes  The original fildes, exactly as passed to the read(2) system call.

       data    The original data, exactly as passed to the read(2) system call.

       data_size
               The original data_size, exactly as passed to the read(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.

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

   explain_errno_read
       const char *explain_errno_read(int errnum, int fildes, const void *data, long data_size);

       The explain_errno_read function may be used to obtain a human readable explanation of what
       went  wrong  in a read(2) system call.  The least the message will contain is the value of
       strerror(errnum), but usually it will do much better, and indicate the underlying cause in
       more detail.

       This function is intended to be used in a fashion similar to the following example:
              ssize_t n = read(fd, data, data_size);
              if (n < 0)
              {
                  int err = errno;
                  fprintf(stderr, "%s\n", explain_errno_read(err, fd, data, data_size));
                  exit(EXIT_FAILURE);
              }

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

       fildes  The original fildes, exactly as passed to the read(2) system call.

       data    The original data, exactly as passed to the read(2) system call.

       data_size
               The original data_size, exactly as passed to the read(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.

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

   explain_message_read
       void explain_message_read(char *message, int message_size, int fildes, const  void  *data,
       long data_size);

       The  explain_message_read  function  may be used to obtain a human readable explanation of
       what went wrong in a read(2) system call.  The least the message will contain is the value
       of  strerror(errno), but usually it will do much better, and indicate the underlying cause
       in more detail.

       The error number will be picked up from the errno global variable.

       This function is intended to be used in a fashion similar to the following example:
              ssize_t n = read(fd, data, data_size);
              if (n < 0)
              {
                  char message[3000];
                  explain_message_read(message, sizeof(message), fd, data, data_size));
                  fprintf(stderr, "%s\n", message);
                  exit(EXIT_FAILURE);
              }

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

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

       fildes  The original fildes, exactly as passed to the read(2) system call.

       data    The original data, exactly as passed to the read(2) system call.

       data_size
               The original data_size, exactly as passed to the read(2) system call.

       Note: Given a suitably thread safe buffer, this function is thread safe.

   explain_message_errno_read
       void  explain_message_errno_read(char  *message, int message_size, int errnum, int fildes,
       const void *data, long data_size);

       The explain_message_errno_read function may be used to obtain a human readable explanation
       of  what  went  wrong in a read(2) system call.  The least the message will contain is the
       value of strerror(errnum), but usually it will do much better, and indicate the underlying
       cause in more detail.

       This function is intended to be used in a fashion similar to the following example:
              ssize_t n = read(fd, data, data_size);
              if (n < 0)
              {
                  int err = errno;
                  char message[3000];
                  explain_message_errno_read(message, sizeof(message), err,
                      fd, data, data_size);
                  fprintf(stderr, "%s\n", message);
                  exit(EXIT_FAILURE);
              }

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

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

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

       fildes  The original fildes, exactly as passed to the read(2) system call.

       data    The original data, exactly as passed to the read(2) system call.

       data_size
               The original data_size, exactly as passed to the read(2) system call.

       Note: Given a suitably thread safe buffer, this function is thread safe.

COPYRIGHT

       libexplain version 1.4
       Copyright (C) 2008 Peter Miller

AUTHOR

       Written by Peter Miller <pmiller@opensource.org.au>

                                                                                  explain_read(3)