Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/lib/libc/string Document strerror_l()



details:   https://anonhg.NetBSD.org/src/rev/b59b97a6ff6a
branches:  trunk
changeset: 1008525:b59b97a6ff6a
user:      kre <kre%NetBSD.org@localhost>
date:      Wed Mar 25 18:45:42 2020 +0000

description:
Document strerror_l()

While here also document (but comment it out since it isn't
available - yet) strerror_lr().   To include that, simply
uncomment the relevant lines, and (twice I think) s/returns/return/
on lines just after currently commented out lines (that is, it
currently says, "A returns" after the comments are returned, we
need it to be "A and B return" - the "and B" appears when the comment
markers are removed, removing the 's' from returns must be done manually.

In addition to adding strerror_l() some additional enhancements were
made to the general strerror() doc.

diffstat:

 distrib/sets/lists/comp/mi   |    5 +-
 lib/libc/string/Makefile.inc |    3 +-
 lib/libc/string/strerror.3   |  121 ++++++++++++++++++++++++++++++++++++++----
 3 files changed, 114 insertions(+), 15 deletions(-)

diffs (275 lines):

diff -r 98ad58bfbd45 -r b59b97a6ff6a distrib/sets/lists/comp/mi
--- a/distrib/sets/lists/comp/mi        Wed Mar 25 18:42:16 2020 +0000
+++ b/distrib/sets/lists/comp/mi        Wed Mar 25 18:45:42 2020 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: mi,v 1.2315 2020/03/25 17:13:49 christos Exp $
+#      $NetBSD: mi,v 1.2316 2020/03/25 18:45:42 kre Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 ./etc/mtree/set.comp                           comp-sys-root
@@ -9989,6 +9989,7 @@
 ./usr/share/man/cat3/strcspn.0                 comp-c-catman           .cat
 ./usr/share/man/cat3/strdup.0                  comp-c-catman           .cat
 ./usr/share/man/cat3/strerror.0                        comp-c-catman           .cat
+./usr/share/man/cat3/strerror_l.0              comp-c-catman           .cat
 ./usr/share/man/cat3/strerror_r.0              comp-c-catman           .cat
 ./usr/share/man/cat3/stresep.0                 comp-c-catman           .cat
 ./usr/share/man/cat3/strfmon.0                 comp-c-catman           .cat
@@ -17993,6 +17994,7 @@
 ./usr/share/man/html3/strcspn.html             comp-c-htmlman          html
 ./usr/share/man/html3/strdup.html              comp-c-htmlman          html
 ./usr/share/man/html3/strerror.html            comp-c-htmlman          html
+./usr/share/man/html3/strerror_l.html          comp-c-htmlman          html
 ./usr/share/man/html3/strerror_r.html          comp-c-htmlman          html
 ./usr/share/man/html3/stresep.html             comp-c-htmlman          html
 ./usr/share/man/html3/strfmon.html             comp-c-htmlman          html
@@ -26029,6 +26031,7 @@
 ./usr/share/man/man3/strcspn.3                 comp-c-man              .man
 ./usr/share/man/man3/strdup.3                  comp-c-man              .man
 ./usr/share/man/man3/strerror.3                        comp-c-man              .man
+./usr/share/man/man3/strerror_l.3              comp-c-man              .man
 ./usr/share/man/man3/strerror_r.3              comp-c-man              .man
 ./usr/share/man/man3/stresep.3                 comp-c-man              .man
 ./usr/share/man/man3/strfmon.3                 comp-c-man              .man
diff -r 98ad58bfbd45 -r b59b97a6ff6a lib/libc/string/Makefile.inc
--- a/lib/libc/string/Makefile.inc      Wed Mar 25 18:42:16 2020 +0000
+++ b/lib/libc/string/Makefile.inc      Wed Mar 25 18:45:42 2020 +0000
@@ -1,5 +1,5 @@
 #      from: @(#)Makefile.inc  8.1 (Berkeley) 6/4/93
-#      $NetBSD: Makefile.inc,v 1.83 2017/01/12 00:35:38 christos Exp $
+#      $NetBSD: Makefile.inc,v 1.84 2020/03/25 18:45:42 kre Exp $
 
 # string sources
 .PATH: ${ARCHDIR}/string ${.CURDIR}/string
@@ -63,6 +63,7 @@
 MLINKS+=memchr.3 memrchr.3
 MLINKS+=strtok.3 strtok_r.3
 MLINKS+=strerror.3 strerror_r.3 strerror.3 perror.3 \
+       strerror.3 strerror_l.3 \
        strerror.3 sys_errlist.3 strerror.3 sys_nerr.3
 MLINKS+=strdup.3 strndup.3
 MLINKS+=strsep.3 stresep.3
diff -r 98ad58bfbd45 -r b59b97a6ff6a lib/libc/string/strerror.3
--- a/lib/libc/string/strerror.3        Wed Mar 25 18:42:16 2020 +0000
+++ b/lib/libc/string/strerror.3        Wed Mar 25 18:45:42 2020 +0000
@@ -1,4 +1,4 @@
-.\" $NetBSD: strerror.3,v 1.19 2017/07/03 21:32:50 wiz Exp $
+.\" $NetBSD: strerror.3,v 1.20 2020/03/25 18:45:42 kre Exp $
 .\"
 .\" Copyright (c) 1980, 1991, 1993
 .\"    The Regents of the University of California.  All rights reserved.
@@ -32,12 +32,14 @@
 .\" SUCH DAMAGE.
 .\"
 .\"     @(#)strerror.3 8.1 (Berkeley) 6/9/93
-.Dd May 9, 2015
+.Dd March 24, 2020
 .Dt STRERROR 3
 .Os
 .Sh NAME
 .Nm perror ,
 .Nm strerror ,
+.Nm strerror_l ,
+.\" .Nm strerror_lr ,
 .Nm strerror_r ,
 .Nm sys_errlist ,
 .Nm sys_nerr
@@ -56,9 +58,15 @@
 .Fn strerror "int errnum"
 .Ft int
 .Fn strerror_r "int errnum" "char *strerrbuf" "size_t buflen"
+.Ft "char *"
+.Fn strerror_l "int errnum" "locale_t loc"
+.\".Ft int
+.\".Fn strerror_lr "int errnum" "char *strerrbuf" "size_t buflen" "locale_t loc"
 .Sh DESCRIPTION
 The
 .Fn strerror ,
+.Fn strerror_l ,
+.\".Fn strerror_lr ,
 .Fn strerror_r ,
 and
 .Fn perror
@@ -71,6 +79,8 @@
 .Fa errnum
 and returns a pointer to the corresponding
 message string.
+The application should not attempt to modify the
+returned string, it may be shared, or read only.
 .Pp
 The
 .Fn strerror_r
@@ -81,6 +91,24 @@
 characters and returns 0 upon success.
 .Pp
 The
+.Fn strerror_l
+function is like
+.Fn strerror
+but provides in
+.Fa loc
+the locale to be used to obtain the language for the message,
+rather than using the application's current locale.
+.\".Pp
+.\"The
+.\".Fn strerror_lr
+.\"function is to
+.\".Fn strerror_l
+.\"as
+.\".Fn strerror_r
+.\"is to
+.\".Fn strerror .
+.Pp
+The
 .Fn perror
 function finds the error message corresponding to the current
 value of the global variable
@@ -106,20 +134,35 @@
 .Fn perror ;
 they are more flexible and also print the program name.
 .Pp
-If the error number is not recognized, these functions pass an error message
+If the error number is not recognized, these functions return an error message
 string containing
+.\" , in the appropriate language,
 .Dq Li "Unknown error:\ "
 followed by the error number in decimal.
 To warn about this,
 .Fn strerror
-sets
+and
+.Fn strerror_l
+set
 .Dv errno
 to
 .Er EINVAL ,
 and
 .Fn strerror_r
+.\"and
+.\".Fn strerror_lr
 returns
 .Er EINVAL .
+In other cases, except where noted below,
+.Dv errno
+is not altered, so applications should set it to a known value
+(usually zero) before calling either
+.Fn strerror
+or
+.Fn strerror_l
+if the resulting value in
+.Dv errno
+is to be tested for this condition.
 Error numbers recognized by this implementation fall in
 the range 0 <
 .Fa errnum
@@ -132,6 +175,8 @@
 .Fa buflen )
 to contain the error string,
 .Fn strerror_r
+.\" and
+.\" .Fn strerror_lr
 returns
 .Er ERANGE
 and
@@ -140,8 +185,20 @@
 .Dv NUL
 terminated to fit the length specified by
 .Fa buflen .
+In extraordinary cases, it is possible that the internal
+buffer used by
+.Fn strerror
+and
+.Fn strerror_l
+may be too small for a translated message,
+in which case it will be truncated as indicated for
+.Fn strerror_r
+and
+.Dv errno
+will be set to
+.Er ERANGE .
 .Pp
-The message strings can be accessed directly using the external
+The POSIX locale message strings can be accessed directly using the external
 array
 .Va sys_errlist .
 The external value
@@ -149,10 +206,9 @@
 contains a count of the messages in
 .Va sys_errlist .
 The use of these variables is deprecated;
+one of the
 .Fn strerror
-or
-.Fn strerror_r
-should be used instead.
+family of functions should be used instead.
 .Sh SEE ALSO
 .Xr intro 2 ,
 .Xr err 3 ,
@@ -169,6 +225,10 @@
 .Fn strerror_r
 function conforms to
 .St -p1003.1-2001 .
+The
+.Fn strerror_l
+function conforms to
+.St -p1003.1-2008 .
 .Sh HISTORY
 The
 .Fn perror
@@ -182,15 +242,50 @@
 .Fn strerror_r
 function first appeared in
 .Nx 4.0 .
+The
+.Fn strerror_l
+function was first released in
+.Nx 7.0 .
+.\"The
+.\".Fn strerror_lr
+.\"function first appeared in
+.\".Nx 10.0 .
 .Sh BUGS
-For unknown error numbers, the
+The
 .Fn strerror
-function will return its result in a static buffer which
-may be overwritten by subsequent calls.
+function may return its result in a static buffer which
+will be overwritten by subsequent calls.
+For portable use, this must be assumed to be a subsequent
+call from the current, or any other, thread in the process.
+This implementation limits the issue to calls from the
+current thread.
+The
+.Fn strerror_l
+function has a similar restriction, but even in other
+implementations, is required to use thread local storage,
+so only other calls from the calling thread can overwrite
+the result.
+Both
+.Fn strerror
+and
+.Fn strerror_l
+use the same thread local storage, a call to either will destroy
+the result from an earlier call by the same thread of either of them.
+.\"
+.\" Is this following para really true any more?   All the strerror()
+.\" family of functions return the result in a malloc'd array (or if
+.\" ! _REENTRANT a static buffer in the function) or in a buffer
+.\" provided by the caller - nothing actually returns a pointer into
+.\" sys_errlist[] any more (strerror_ss() excepted, but we ignore that).
+.\" The POSIX (and historic) functions had no "const" qualifier.
+.\" POSIX does say that callers must not (attempt to) modify the result,
+.\" but for our implementation I see no defect that can cause.
 .Pp
-The return type for
+The return types for
 .Fn strerror
-is missing a type-qualifier; it should actually be
+and
+.Fn strerror_l
+are both missing a type-qualifier; it should actually be
 .Vt const char * .
 .Pp
 Programs that use the deprecated



Home | Main Index | Thread Index | Old Index