* Updating common/lib * Updating lib/csu * Updating lib/libc * Updating libexec/ld.elf_so * Corrected test on __minix in featuretest to actually follow the meaning of the comment. * Cleaned up _REENTRANT-related defintions. * Disabled -D_REENTRANT for libfetch * Removing some unneeded __NBSD_LIBC defines and tests Change-Id: Ic1394baef74d11b9f86b312f5ff4bbc3cbf72ce2
		
			
				
	
	
		
			442 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			442 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\"	$NetBSD: vis.3,v 1.27 2011/05/17 07:10:39 joerg Exp $
 | 
						|
.\"
 | 
						|
.\" Copyright (c) 1989, 1991, 1993
 | 
						|
.\"	The Regents of the University of California.  All rights reserved.
 | 
						|
.\"
 | 
						|
.\" Redistribution and use in source and binary forms, with or without
 | 
						|
.\" modification, are permitted provided that the following conditions
 | 
						|
.\" are met:
 | 
						|
.\" 1. Redistributions of source code must retain the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer.
 | 
						|
.\" 2. Redistributions in binary form must reproduce the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer in the
 | 
						|
.\"    documentation and/or other materials provided with the distribution.
 | 
						|
.\" 3. Neither the name of the University nor the names of its contributors
 | 
						|
.\"    may be used to endorse or promote products derived from this software
 | 
						|
.\"    without specific prior written permission.
 | 
						|
.\"
 | 
						|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | 
						|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
						|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
						|
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | 
						|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
						|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
						|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
						|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
						|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
						|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
						|
.\" SUCH DAMAGE.
 | 
						|
.\"
 | 
						|
.\"     @(#)vis.3	8.1 (Berkeley) 6/9/93
 | 
						|
.\"
 | 
						|
.Dd March 12, 2011
 | 
						|
.Dt VIS 3
 | 
						|
.Os
 | 
						|
.Sh NAME
 | 
						|
.Nm vis ,
 | 
						|
.Nm nvis ,
 | 
						|
.Nm strvis ,
 | 
						|
.Nm strnvis ,
 | 
						|
.Nm strvisx ,
 | 
						|
.Nm strnvisx ,
 | 
						|
.Nm svis ,
 | 
						|
.Nm snvis ,
 | 
						|
.Nm strsvis ,
 | 
						|
.Nm strsnvis ,
 | 
						|
.Nm strsvisx
 | 
						|
.Nm strsnvisx
 | 
						|
.Nd visually encode characters
 | 
						|
.Sh LIBRARY
 | 
						|
.Lb libc
 | 
						|
.Sh SYNOPSIS
 | 
						|
.In vis.h
 | 
						|
.Ft char *
 | 
						|
.Fn vis "char *dst" "int c" "int flag" "int nextc"
 | 
						|
.Ft char *
 | 
						|
.Fn nvis "char *dst" "size_t dlen" "int c" "int flag" "int nextc"
 | 
						|
.Ft int
 | 
						|
.Fn strvis "char *dst" "const char *src" "int flag"
 | 
						|
.Ft int
 | 
						|
.Fn strnvis "char *dst" "size_t dlen" "const char *src" "int flag"
 | 
						|
.Ft int
 | 
						|
.Fn strvisx "char *dst" "const char *src" "size_t len" "int flag"
 | 
						|
.Ft int
 | 
						|
.Fn strnvisx "char *dst" "size_t dlen" "const char *src" "size_t len" "int flag"
 | 
						|
.Ft char *
 | 
						|
.Fn svis "char *dst" "int c" "int flag" "int nextc" "const char *extra"
 | 
						|
.Ft char *
 | 
						|
.Fn snvis "char *dst" "size_t dlen" "int c" "int flag" "int nextc" "const char *extra"
 | 
						|
.Ft int
 | 
						|
.Fn strsvis "char *dst" "const char *src" "int flag" "const char *extra"
 | 
						|
.Ft int
 | 
						|
.Fn strsnvis "char *dst" "size_t dlen" "const char *src" "int flag" "const char *extra"
 | 
						|
.Ft int
 | 
						|
.Fn strsvisx "char *dst" "const char *src" "size_t len" "int flag" "const char *extra"
 | 
						|
.Ft int
 | 
						|
.Fn strsnvisx "char *dst" "size_t dlen" "const char *src" "size_t len" "int flag" "const char *extra"
 | 
						|
.Sh DESCRIPTION
 | 
						|
The
 | 
						|
.Fn vis
 | 
						|
function
 | 
						|
copies into
 | 
						|
.Fa dst
 | 
						|
a string which represents the character
 | 
						|
.Fa c .
 | 
						|
If
 | 
						|
.Fa c
 | 
						|
needs no encoding, it is copied in unaltered.
 | 
						|
The string is null terminated, and a pointer to the end of the string is
 | 
						|
returned.
 | 
						|
The maximum length of any encoding is four
 | 
						|
characters (not including the trailing
 | 
						|
.Dv NUL ) ;
 | 
						|
thus, when
 | 
						|
encoding a set of characters into a buffer, the size of the buffer should
 | 
						|
be four times the number of characters encoded, plus one for the trailing
 | 
						|
.Dv NUL .
 | 
						|
The flag parameter is used for altering the default range of
 | 
						|
characters considered for encoding and for altering the visual
 | 
						|
representation.
 | 
						|
The additional character,
 | 
						|
.Fa nextc ,
 | 
						|
is only used when selecting the
 | 
						|
.Dv VIS_CSTYLE
 | 
						|
encoding format (explained below).
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Fn strvis ,
 | 
						|
.Fn strnvis ,
 | 
						|
.Fn strvisx ,
 | 
						|
and
 | 
						|
.Fn strnvisx
 | 
						|
functions copy into
 | 
						|
.Fa dst
 | 
						|
a visual representation of
 | 
						|
the string
 | 
						|
.Fa src .
 | 
						|
The
 | 
						|
.Fn strvis
 | 
						|
and
 | 
						|
.Fn strnvis
 | 
						|
functions encode characters from
 | 
						|
.Fa src
 | 
						|
up to the
 | 
						|
first
 | 
						|
.Dv NUL .
 | 
						|
The
 | 
						|
.Fn strvisx
 | 
						|
and
 | 
						|
.Fn strnvisx
 | 
						|
functions encode exactly
 | 
						|
.Fa len
 | 
						|
characters from
 | 
						|
.Fa src
 | 
						|
(this
 | 
						|
is useful for encoding a block of data that may contain
 | 
						|
.Dv NUL Ns 's ) .
 | 
						|
Both forms
 | 
						|
.Dv NUL
 | 
						|
terminate
 | 
						|
.Fa dst .
 | 
						|
The size of
 | 
						|
.Fa dst
 | 
						|
must be four times the number
 | 
						|
of characters encoded from
 | 
						|
.Fa src
 | 
						|
(plus one for the
 | 
						|
.Dv NUL ) .
 | 
						|
Both
 | 
						|
forms return the number of characters in dst (not including
 | 
						|
the trailing
 | 
						|
.Dv NUL ) .
 | 
						|
The
 | 
						|
.Dq n
 | 
						|
versions of the functions also take an additional argument
 | 
						|
.Fa dlen
 | 
						|
that indicates the length of the
 | 
						|
.Fa dst
 | 
						|
buffer.
 | 
						|
If
 | 
						|
.Fa dlen
 | 
						|
is not large enough to fix the converted string then the
 | 
						|
.Fn strnvis
 | 
						|
and
 | 
						|
.Fn strnvisx
 | 
						|
functions return \-1 and set
 | 
						|
.Va errno
 | 
						|
to
 | 
						|
.Dv ENOSPC .
 | 
						|
.Pp
 | 
						|
The functions
 | 
						|
.Fn svis ,
 | 
						|
.Fn snvis ,
 | 
						|
.Fn strsvis ,
 | 
						|
.Fn strsnvis ,
 | 
						|
.Fn strsvisx ,
 | 
						|
and
 | 
						|
.Fn strsnvisx
 | 
						|
correspond to
 | 
						|
.Fn vis ,
 | 
						|
.Fn nvis ,
 | 
						|
.Fn strvis ,
 | 
						|
.Fn strnvis ,
 | 
						|
.Fn strvisx ,
 | 
						|
and
 | 
						|
.Fn strnvisx
 | 
						|
but have an additional argument
 | 
						|
.Fa extra ,
 | 
						|
pointing to a
 | 
						|
.Dv NUL
 | 
						|
terminated list of characters.
 | 
						|
These characters will be copied encoded or backslash-escaped into
 | 
						|
.Fa dst .
 | 
						|
These functions are useful e.g. to remove the special meaning
 | 
						|
of certain characters to shells.
 | 
						|
.Pp
 | 
						|
The encoding is a unique, invertible representation composed entirely of
 | 
						|
graphic characters; it can be decoded back into the original form using
 | 
						|
the
 | 
						|
.Xr unvis 3 ,
 | 
						|
.Xr strunvis 3
 | 
						|
or
 | 
						|
.Xr strnunvis 3
 | 
						|
functions.
 | 
						|
.Pp
 | 
						|
There are two parameters that can be controlled: the range of
 | 
						|
characters that are encoded (applies only to
 | 
						|
.Fn vis ,
 | 
						|
.Fn nvis ,
 | 
						|
.Fn strvis ,
 | 
						|
.Fn strnvis ,
 | 
						|
.Fn strvisx ,
 | 
						|
and
 | 
						|
.Fn strnvisx ) ,
 | 
						|
and the type of representation used.
 | 
						|
By default, all non-graphic characters,
 | 
						|
except space, tab, and newline are encoded.
 | 
						|
(See
 | 
						|
.Xr isgraph 3 . )
 | 
						|
The following flags
 | 
						|
alter this:
 | 
						|
.Bl -tag -width VIS_WHITEX
 | 
						|
.It Dv VIS_SP
 | 
						|
Also encode space.
 | 
						|
.It Dv VIS_TAB
 | 
						|
Also encode tab.
 | 
						|
.It Dv VIS_NL
 | 
						|
Also encode newline.
 | 
						|
.It Dv VIS_WHITE
 | 
						|
Synonym for
 | 
						|
.Dv VIS_SP
 | 
						|
\&|
 | 
						|
.Dv VIS_TAB
 | 
						|
\&|
 | 
						|
.Dv VIS_NL .
 | 
						|
.It Dv VIS_SAFE
 | 
						|
Only encode "unsafe" characters.
 | 
						|
Unsafe means control characters which may cause common terminals to perform
 | 
						|
unexpected functions.
 | 
						|
Currently this form allows space, tab, newline, backspace, bell, and
 | 
						|
return - in addition to all graphic characters - unencoded.
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
(The above flags have no effect for
 | 
						|
.Fn svis ,
 | 
						|
.Fn snvis ,
 | 
						|
.Fn strsvis ,
 | 
						|
.Fn strsnvis ,
 | 
						|
.Fn strsvisx ,
 | 
						|
and
 | 
						|
.Fn strsnvisx .
 | 
						|
When using these functions, place all graphic characters to be
 | 
						|
encoded in an array pointed to by
 | 
						|
.Fa extra .
 | 
						|
In general, the backslash character should be included in this array, see the
 | 
						|
warning on the use of the
 | 
						|
.Dv VIS_NOSLASH
 | 
						|
flag below).
 | 
						|
.Pp
 | 
						|
There are four forms of encoding.
 | 
						|
All forms use the backslash character
 | 
						|
.Ql \e
 | 
						|
to introduce a special
 | 
						|
sequence; two backslashes are used to represent a real backslash,
 | 
						|
except
 | 
						|
.Dv VIS_HTTPSTYLE
 | 
						|
that uses
 | 
						|
.Ql % ,
 | 
						|
or
 | 
						|
.Dv VIS_MIMESTYLE
 | 
						|
that uses
 | 
						|
.Ql = .
 | 
						|
These are the visual formats:
 | 
						|
.Bl -tag -width VIS_CSTYLE
 | 
						|
.It (default)
 | 
						|
Use an
 | 
						|
.Ql M
 | 
						|
to represent meta characters (characters with the 8th
 | 
						|
bit set), and use caret
 | 
						|
.Ql ^
 | 
						|
to represent control characters see
 | 
						|
.Pf ( Xr iscntrl 3 ) .
 | 
						|
The following formats are used:
 | 
						|
.Bl -tag -width xxxxx
 | 
						|
.It Dv \e^C
 | 
						|
Represents the control character
 | 
						|
.Ql C .
 | 
						|
Spans characters
 | 
						|
.Ql \e000
 | 
						|
through
 | 
						|
.Ql \e037 ,
 | 
						|
and
 | 
						|
.Ql \e177
 | 
						|
(as
 | 
						|
.Ql \e^? ) .
 | 
						|
.It Dv \eM-C
 | 
						|
Represents character
 | 
						|
.Ql C
 | 
						|
with the 8th bit set.
 | 
						|
Spans characters
 | 
						|
.Ql \e241
 | 
						|
through
 | 
						|
.Ql \e376 .
 | 
						|
.It Dv \eM^C
 | 
						|
Represents control character
 | 
						|
.Ql C
 | 
						|
with the 8th bit set.
 | 
						|
Spans characters
 | 
						|
.Ql \e200
 | 
						|
through
 | 
						|
.Ql \e237 ,
 | 
						|
and
 | 
						|
.Ql \e377
 | 
						|
(as
 | 
						|
.Ql \eM^? ) .
 | 
						|
.It Dv \e040
 | 
						|
Represents
 | 
						|
.Tn ASCII
 | 
						|
space.
 | 
						|
.It Dv \e240
 | 
						|
Represents Meta-space.
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
.It Dv VIS_CSTYLE
 | 
						|
Use C-style backslash sequences to represent standard non-printable
 | 
						|
characters.
 | 
						|
The following sequences are used to represent the indicated characters:
 | 
						|
.Bd -unfilled -offset indent
 | 
						|
.Li \ea Tn  - BEL No (007)
 | 
						|
.Li \eb Tn  - BS No (010)
 | 
						|
.Li \ef Tn  - NP No (014)
 | 
						|
.Li \en Tn  - NL No (012)
 | 
						|
.Li \er Tn  - CR No (015)
 | 
						|
.Li \es Tn  - SP No (040)
 | 
						|
.Li \et Tn  - HT No (011)
 | 
						|
.Li \ev Tn  - VT No (013)
 | 
						|
.Li \e0 Tn  - NUL No (000)
 | 
						|
.Ed
 | 
						|
.Pp
 | 
						|
When using this format, the nextc parameter is looked at to determine
 | 
						|
if a
 | 
						|
.Dv NUL
 | 
						|
character can be encoded as
 | 
						|
.Ql \e0
 | 
						|
instead of
 | 
						|
.Ql \e000 .
 | 
						|
If
 | 
						|
.Fa nextc
 | 
						|
is an octal digit, the latter representation is used to
 | 
						|
avoid ambiguity.
 | 
						|
.It Dv VIS_OCTAL
 | 
						|
Use a three digit octal sequence.
 | 
						|
The form is
 | 
						|
.Ql \eddd
 | 
						|
where
 | 
						|
.Em d
 | 
						|
represents an octal digit.
 | 
						|
.It Dv VIS_HTTPSTYLE
 | 
						|
Use URI encoding as described in RFC 1738.
 | 
						|
The form is
 | 
						|
.Ql %xx
 | 
						|
where
 | 
						|
.Em x
 | 
						|
represents a lower case hexadecimal digit.
 | 
						|
.It Dv VIS_MIMESTYLE
 | 
						|
Use MIME Quoted-Printable encoding as described in RFC 2045, only don't
 | 
						|
break lines and don't handle CRLF.
 | 
						|
The form is:
 | 
						|
.Ql %XX
 | 
						|
where
 | 
						|
.Em X
 | 
						|
represents an upper case hexadecimal digit.
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
There is one additional flag,
 | 
						|
.Dv VIS_NOSLASH ,
 | 
						|
which inhibits the
 | 
						|
doubling of backslashes and the backslash before the default
 | 
						|
format (that is, control characters are represented by
 | 
						|
.Ql ^C
 | 
						|
and
 | 
						|
meta characters as
 | 
						|
.Ql M-C ) .
 | 
						|
With this flag set, the encoding is
 | 
						|
ambiguous and non-invertible.
 | 
						|
.Sh ERRORS
 | 
						|
The functions
 | 
						|
.Fn nvis
 | 
						|
and
 | 
						|
.Fn snvis
 | 
						|
will return
 | 
						|
.Dv NULL
 | 
						|
and the functions
 | 
						|
.Fn strnvis ,
 | 
						|
.Fn strnvisx ,
 | 
						|
.Fn strsnvis ,
 | 
						|
and
 | 
						|
.Fn strsnvisx ,
 | 
						|
will return \-1 when the
 | 
						|
.Fa dlen
 | 
						|
destination buffer length size is not enough to perform the conversion while
 | 
						|
setting
 | 
						|
.Va errno
 | 
						|
to:
 | 
						|
.Bl -tag -width Er
 | 
						|
.It Bq Er ENOSPC
 | 
						|
The destination buffer size is not large enough to perform the conversion.
 | 
						|
.El
 | 
						|
.Sh SEE ALSO
 | 
						|
.Xr unvis 1 ,
 | 
						|
.Xr vis 1 ,
 | 
						|
.Xr unvis 3
 | 
						|
.Rs
 | 
						|
.%A T. Berners-Lee
 | 
						|
.%T Uniform Resource Locators (URL)
 | 
						|
.%O RFC1738
 | 
						|
.Re
 | 
						|
.Sh HISTORY
 | 
						|
The
 | 
						|
.Fn vis ,
 | 
						|
.Fn strvis ,
 | 
						|
and
 | 
						|
.Fa strvisx
 | 
						|
functions first appeared in
 | 
						|
.Bx 4.4 .
 | 
						|
The
 | 
						|
.Fn svis ,
 | 
						|
.Fn strsvis ,
 | 
						|
and
 | 
						|
.Fn strsvisx
 | 
						|
functions appeared in
 | 
						|
.Nx 1.5 .
 | 
						|
The buffer size limited versions of the functions
 | 
						|
.Po Fn nvis ,
 | 
						|
.Fn strnvis ,
 | 
						|
.Fn strnvisx ,
 | 
						|
.Fn snvis ,
 | 
						|
.Fn strsnvis ,
 | 
						|
and
 | 
						|
.Fn strsnvisx Pc
 | 
						|
appeared in
 | 
						|
.Nx 6.0 .
 |