.lf 1 ./man/man3/explain_fread.3
.\"
.\" libexplain - Explain errno values returned by libc functions
.\" Copyright (C) 2008, 2009, 2011 Peter Miller
.\"
.\" This program is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
.\" the Free Software Foundation; either version 3 of the License, or (at
.\" your option) any later version.
.\"
.\" This program is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
.\" General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public License
.\" along with this program. If not, see .
.\"
.ds n) explain_fread
.cp 0 \" Solaris defaults to ''.cp 1'', sheesh.
.TH explain_fread 3
.SH NAME
explain_fread \- explain fread(3) errors
.if require_index \{
.\}
.SH SYNOPSIS
#include
.sp 0.3
const char *explain_fread(void *ptr, size_t size, size_t nmemb, FILE *fp);
.br
const char *explain_errno_fread(int errnum, void *ptr, size_t size,
size_t nmemb, FILE *fp);
.br
void explain_message_fread(char *message, int message_size, void *ptr,
size_t size, size_t nmemb, FILE *fp);
.br
void explain_message_errno_fread(char *message, int message_size,
int errnum, void *ptr, size_t size, size_t nmemb, FILE *fp);
.SH DESCRIPTION
These functions may be used to obtain explanations for
errors returned by the \f[I]fread\fP(3) system call.
.\" ----------------------------------------------------
.SS explain_fread
const char *explain_fread(void *ptr, size_t size, size_t nmemb, FILE *fp);
.PP
The \f[B]explain_fread\fP function is
used to obtain an explanation of an error returned by the \f[I]fread\fP(3)
system call. The least the message will contain is the
value of \f[CW]strerror(errno)\fP, but usually it will
do much better, and indicate the underlying cause in more
detail.
.PP
The \f[I]errno\fP global variable will be used to obtain
the error value to be decoded.
.PP
This function is intended to be used in a fashion
similar to the following example:
.RS
.ft CW
.nf
size_t how_many = fread(ptr, size, nmemb, fp);
if (how_many == 0 && ferror(fp))
{
fprintf(stderr, "%s\en", explain_fread(ptr, size, nmemb, fp));
exit(EXIT_FAILURE);
}
.fi
.ft R
.RE
.TP 8n
\f[I]ptr\fP
The original ptr, exactly as passed to the \f[I]fread\fP(3) system call.
.TP 8n
\f[I]size\fP
The original size, exactly as passed to the \f[I]fread\fP(3) system call.
.TP 8n
\f[I]nmemb\fP
The original nmemb, exactly as passed to the \f[I]fread\fP(3) system call.
.TP 8n
\f[I]fp\fP
The original fp, exactly as passed to the \f[I]fread\fP(3) system call.
.TP 8n
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.
.PP
\f[B]Note:\fP
This function is \f[B]not\fP thread safe, because it
shares a return buffer across all threads, and many other
functions in this library.
.\" ----------------------------------------------------
.SS explain_errno_fread
const char *explain_errno_fread(int errnum, void *ptr, size_t size,
size_t nmemb, FILE *fp);
.PP
The \f[B]explain_errno_fread\fP function
is used to obtain an explanation of an error returned by
the \f[I]fread\fP(3) system call.
The least the message will contain is the value of
\f[CW]strerror(errnum)\fP, but usually it will do much
better, and indicate the underlying cause in more detail.
.PP
This function is intended to be used in a fashion
similar to the following example:
.RS
.ft CW
.nf
size_t how_many = fread(ptr, size, nmemb, fp);
if (how_many == 0 && ferror(fp))
{
int err = errno;
fprintf(stderr, "%s\en", explain_errno_fread(err, ptr, size, nmemb, fp));
exit(EXIT_FAILURE);
}
.fi
.ft R
.RE
.TP 8n
\f[I]errnum\fP
The error value to be decoded, usually obtained from
the \f[I]errno\fP global variable just before this
function is called. This is necessary if you need to call
\f[B]any\fP code between the system call to be explained
and this function, because many libc functions will alter
the value of \f[I]errno\fP.
.TP 8n
\f[I]ptr\fP
The original ptr, exactly as passed to the \f[I]fread\fP(3) system call.
.TP 8n
\f[I]size\fP
The original size, exactly as passed to the \f[I]fread\fP(3) system call.
.TP 8n
\f[I]nmemb\fP
The original nmemb, exactly as passed to the \f[I]fread\fP(3) system call.
.TP 8n
\f[I]fp\fP
The original fp, exactly as passed to the \f[I]fread\fP(3) system call.
.TP 8n
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.
.PP
\f[B]Note:\fP
This function is \f[B]not\fP thread safe, because it
shares a return buffer across all threads, and many other
functions in this library.
.\" ----------------------------------------------------
.SS explain_message_fread
void explain_message_fread(char *message, int message_size, void *ptr,
size_t size, size_t nmemb, FILE *fp);
.PP
The \f[B]explain_message_fread\fP
function may be used to obtain an explanation of an error
returned by the
\f[I]fread\fP(3) system call.
The least the message will contain is the value of
\f[CW]strerror(errno)\fP, but usually it will do much
better, and indicate the underlying cause in more detail.
.PP
The \f[I]errno\fP global variable will be used to obtain
the error value to be decoded.
.PP
This function is intended to be used in a fashion
similar to the following example:
.RS
.ft CW
.nf
size_t how_many = fread(ptr, size, nmemb, fp);
if (how_many == 0 && ferror(fp))
{
char message[3000];
explain_message_fread(message, sizeof(message), ptr, size, nmemb, fp);
fprintf(stderr, "%s\en", message);
exit(EXIT_FAILURE);
}
.fi
.ft R
.RE
.TP 8n
\f[I]message\fP
The location in which to store the returned message.
If a suitable message return buffer is supplied, this
function is thread safe.
.TP 8n
\f[I]message_size\fP
The size in bytes of the location in which to
store the returned message.
.TP 8n
\f[I]ptr\fP
The original ptr, exactly as passed to the \f[I]fread\fP(3) system call.
.TP 8n
\f[I]size\fP
The original size, exactly as passed to the \f[I]fread\fP(3) system call.
.TP 8n
\f[I]nmemb\fP
The original nmemb, exactly as passed to the \f[I]fread\fP(3) system call.
.TP 8n
\f[I]fp\fP
The original fp, exactly as passed to the \f[I]fread\fP(3) system call.
.\" ----------------------------------------------------
.SS explain_message_errno_fread
void explain_message_errno_fread(char *message, int message_size,
int errnum, void *ptr, size_t size, size_t nmemb, FILE *fp);
.PP
The \f[B]explain_message_errno_fread\fP
function may be used to obtain an explanation of an error
returned by the
\f[I]fread\fP(3) system call.
The least the message will contain is the value of
\f[CW]strerror(errnum)\fP, but usually it will do much
better, and indicate the underlying cause in more detail.
.PP
This function is intended to be used in a fashion
similar to the following example:
.RS
.ft CW
.nf
size_t how_many = fread(ptr, size, nmemb, fp);
if (how_many == 0 && ferror(fp))
{
int err = errno;
char message[3000];
explain_message_errno_fread(message, sizeof(message), err,
ptr, size, nmemb, fp);
fprintf(stderr, "%s\en", message);
exit(EXIT_FAILURE);
}
.fi
.ft R
.RE
.TP 8n
\f[I]message\fP
The location in which to store the returned message.
If a suitable message return buffer is supplied, this
function is thread safe.
.TP 8n
\f[I]message_size\fP
The size in bytes of the location in which to
store the returned message.
.TP 8n
\f[I]errnum\fP
The error value to be decoded, usually obtained from
the \f[I]errno\fP global variable just before this
function is called. This is necessary if you need to call
\f[B]any\fP code between the system call to be explained
and this function, because many libc functions will alter
the value of \f[I]errno\fP.
.TP 8n
\f[I]ptr\fP
The original ptr, exactly as passed to the \f[I]fread\fP(3) system call.
.TP 8n
\f[I]size\fP
The original size, exactly as passed to the \f[I]fread\fP(3) system call.
.TP 8n
\f[I]nmemb\fP
The original nmemb, exactly as passed to the \f[I]fread\fP(3) system call.
.TP 8n
\f[I]fp\fP
The original fp, exactly as passed to the \f[I]fread\fP(3) system call.
.\" ----------------------------------------------------
.SH SEE ALSO
.TP 8n
\f[I]fread\fP(3)
binary stream input
.TP 8n
\f[I]explain_fread_or_die\fP(3)
binary stream input and report errors
.\" ----------------------------------------------------
.SH COPYRIGHT
.lf 1 ./etc/version.so
.ds v) 1.4
.ds V) 1.4.D001
.ds Y) 2008, 2009, 2010, 2011, 2012, 2013, 2014
.lf 277 ./man/man3/explain_fread.3
.if n .ds C) (C)
.if t .ds C) \(co
libexplain version \*(v)
.br
Copyright \*(C) 2008 Peter Miller