Browse Source

Add strerror_r and functions versions of getchar_unlocked and


OPENBSD_3_3
marc 21 years ago
parent
commit
e44f851320
3 changed files with 53 additions and 3 deletions
  1. +2
    -2
      src/lib/libc/string/Makefile.inc
  2. +21
    -1
      src/lib/libc/string/strerror.3
  3. +30
    -0
      src/lib/libc/string/strerror_r.c

+ 2
- 2
src/lib/libc/string/Makefile.inc View File

@ -1,10 +1,10 @@
# $OpenBSD: Makefile.inc,v 1.10 2001/09/05 16:27:01 mickey Exp $
# $OpenBSD: Makefile.inc,v 1.11 2002/11/21 20:45:05 marc Exp $
# string sources # string sources
.PATH: ${LIBCSRCDIR}/arch/${MACHINE_ARCH}/string ${LIBCSRCDIR}/string .PATH: ${LIBCSRCDIR}/arch/${MACHINE_ARCH}/string ${LIBCSRCDIR}/string
SRCS+= bm.c memccpy.c strcasecmp.c strcoll.c strdup.c strerror.c \ SRCS+= bm.c memccpy.c strcasecmp.c strcoll.c strdup.c strerror.c \
strlcat.c strmode.c strsignal.c strtok.c strxfrm.c \
strerror_r.c strlcat.c strmode.c strsignal.c strtok.c strxfrm.c \
__strerror.c __strsignal.c __strerror.c __strsignal.c
# machine-dependent net sources # machine-dependent net sources


+ 21
- 1
src/lib/libc/string/strerror.3 View File

@ -33,7 +33,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE. .\" SUCH DAMAGE.
.\" .\"
.\" $OpenBSD: strerror.3,v 1.4 2000/10/23 19:14:41 aaron Exp $
.\" $OpenBSD: strerror.3,v 1.5 2002/11/21 20:45:05 marc Exp $
.\" .\"
.Dd June 29, 1991 .Dd June 29, 1991
.Dt STRERROR 3 .Dt STRERROR 3
@ -45,6 +45,8 @@
.Fd #include <string.h> .Fd #include <string.h>
.Ft char * .Ft char *
.Fn strerror "int errnum" .Fn strerror "int errnum"
.Ft int
.Fn strerror_r "int errnum" "char *strerrbuf" "size_t buflen"
.Sh DESCRIPTION .Sh DESCRIPTION
The The
.Fn strerror .Fn strerror
@ -58,6 +60,20 @@ characters, including the trailing NUL.
The array pointed to is not to be modified by the program, but may be The array pointed to is not to be modified by the program, but may be
overwritten by subsequent calls to overwritten by subsequent calls to
.Fn strerror . .Fn strerror .
.Pp
.Fn strerror_r
is a thread safe version of
.Fn strerror
that places the error message in the given buffer
.Fa strerrbuf .
If the error message is larger then
.Fa buflen
the message will be truncated to fit within buflen and
.Er ERANGE
is returned.
.Fn strerror_r
returns zero upon successful completion.
An error number is returned, otherwise.
.Sh SEE ALSO .Sh SEE ALSO
.Xr intro 2 , .Xr intro 2 ,
.Xr perror 3 , .Xr perror 3 ,
@ -67,3 +83,7 @@ The
.Fn strerror .Fn strerror
function conforms to function conforms to
.St -ansiC . .St -ansiC .
The
.Fn strerror_r
function conforms to
.St -p1003.1 .

+ 30
- 0
src/lib/libc/string/strerror_r.c View File

@ -0,0 +1,30 @@
/* $OpenBSD: strerror_r.c,v 1.1 2002/11/21 20:45:05 marc Exp $ */
/* Public Domain <marc@snafu.org> */
#if defined(LIBC_SCCS) && !defined(lint)
static char *rcsid = "$OpenBSD: strerror_r.c,v 1.1 2002/11/21 20:45:05 marc Exp $";
#endif /* LIBC_SCCS and not lint */
#include <errno.h>
#include <limits.h>
#include <string.h>
extern char *__strerror(int, char *);
int
strerror_r(int errnum, char *strerrbuf, size_t buflen)
{
int save_errno;
int ret_errno;
char buf[NL_TEXTMAX];
save_errno = errno;
errno = 0;
__strerror(errnum, buf);
if (strlcpy(strerrbuf, buf, buflen) >= buflen)
errno = ERANGE;
ret_errno = errno;
errno = save_errno;
return (ret_errno);
}

Loading…
Cancel
Save