 b6cbf7203b
			
		
	
	
		b6cbf7203b
		
	
	
	
	
		
			
			This patch imports the unmodified current version of NetBSD libc. The NetBSD includes are in /nbsd_include, while the libc code itself is split between lib/nbsd_libc and common/lib/libc.
		
			
				
	
	
		
			264 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			264 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"	$NetBSD: strtoul.3,v 1.25 2009/12/02 12:50:27 pooka Exp $
 | |
| .\"
 | |
| .\" Copyright (c) 1990, 1991, 1993
 | |
| .\"	The Regents of the University of California.  All rights reserved.
 | |
| .\"
 | |
| .\" This code is derived from software contributed to Berkeley by
 | |
| .\" Chris Torek and the American National Standards Committee X3,
 | |
| .\" on Information Processing Systems.
 | |
| .\"
 | |
| .\" 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.
 | |
| .\"
 | |
| .\"     from: @(#)strtoul.3	8.1 (Berkeley) 6/4/93
 | |
| .\"
 | |
| .Dd December 2, 2009
 | |
| .Dt STRTOUL 3
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm strtoul ,
 | |
| .Nm strtoull ,
 | |
| .Nm strtoumax ,
 | |
| .Nm strtouq
 | |
| .Nd convert a string to an unsigned long, unsigned long long, uintmax_t or uquad_t integer
 | |
| .Sh LIBRARY
 | |
| .Lb libc
 | |
| .Sh SYNOPSIS
 | |
| .In stdlib.h
 | |
| .In limits.h
 | |
| .Ft unsigned long int
 | |
| .Fn strtoul "const char * restrict nptr" "char ** restrict endptr" "int base"
 | |
| .Ft unsigned long long int
 | |
| .Fn strtoull "const char * restrict nptr" "char ** restrict endptr" "int base"
 | |
| .Pp
 | |
| .In inttypes.h
 | |
| .Ft uintmax_t
 | |
| .Fn strtoumax "const char * restrict nptr" "char ** restrict endptr" "int base"
 | |
| .Pp
 | |
| .In sys/types.h
 | |
| .In stdlib.h
 | |
| .In limits.h
 | |
| .Ft u_quad_t
 | |
| .Fn strtouq "const char * restrict nptr" "char ** restrict endptr" "int base"
 | |
| .Sh DESCRIPTION
 | |
| The
 | |
| .Fn strtoul
 | |
| function
 | |
| converts the string in
 | |
| .Fa nptr
 | |
| to an
 | |
| .Ft unsigned long int
 | |
| value.
 | |
| The
 | |
| .Fn strtoull
 | |
| function
 | |
| converts the string in
 | |
| .Fa nptr
 | |
| to an
 | |
| .Ft unsigned long long int
 | |
| value.
 | |
| The
 | |
| .Fn strtoumax
 | |
| function
 | |
| converts the string in
 | |
| .Fa nptr
 | |
| to an
 | |
| .Ft uintmax_t
 | |
| value.
 | |
| The
 | |
| .Fn strtouq
 | |
| function
 | |
| converts the string in
 | |
| .Fa nptr
 | |
| to a
 | |
| .Ft u_quad_t
 | |
| value.
 | |
| The conversion is done according to the given
 | |
| .Fa base ,
 | |
| which must be between 2 and 36 inclusive,
 | |
| or be the special value 0.
 | |
| .Pp
 | |
| The string may begin with an arbitrary amount of white space
 | |
| (as determined by
 | |
| .Xr isspace 3 )
 | |
| followed by a single optional
 | |
| .Ql +
 | |
| or
 | |
| .Ql -
 | |
| sign.
 | |
| If
 | |
| .Fa base
 | |
| is zero or 16,
 | |
| the string may then include a
 | |
| .Ql 0x
 | |
| prefix,
 | |
| and the number will be read in base 16; otherwise, a zero
 | |
| .Fa base
 | |
| is taken as 10 (decimal) unless the next character is
 | |
| .Ql 0 ,
 | |
| in which case it is taken as 8 (octal).
 | |
| .Pp
 | |
| The remainder of the string is converted to an
 | |
| .Em unsigned long
 | |
| value in the obvious manner,
 | |
| stopping at the end of the string
 | |
| or at the first character that does not produce a valid digit
 | |
| in the given base.
 | |
| (In bases above 10, the letter
 | |
| .Ql A
 | |
| in either upper or lower case
 | |
| represents 10,
 | |
| .Ql B
 | |
| represents 11, and so forth, with
 | |
| .Ql Z
 | |
| representing 35.)
 | |
| .Pp
 | |
| If
 | |
| .Fa endptr
 | |
| is non-nil,
 | |
| .Fn strtoul
 | |
| stores the address of the first invalid character in
 | |
| .Fa *endptr .
 | |
| If there were no digits at all, however,
 | |
| .Fn strtoul
 | |
| stores the original value of
 | |
| .Fa nptr
 | |
| in
 | |
| .Fa *endptr .
 | |
| (Thus, if
 | |
| .Fa *nptr
 | |
| is not
 | |
| .Ql \e0
 | |
| but
 | |
| .Fa **endptr
 | |
| is
 | |
| .Ql \e0
 | |
| on return, the entire string was valid.)
 | |
| .Sh RETURN VALUES
 | |
| The
 | |
| .Fn strtoul
 | |
| function
 | |
| returns either the result of the conversion
 | |
| or, if there was a leading minus sign,
 | |
| the negation of the result of the conversion,
 | |
| unless the original (non-negated) value would overflow;
 | |
| in the latter case,
 | |
| .Fn strtoul
 | |
| returns
 | |
| .Dv ULONG_MAX ,
 | |
| .Fn strtoull
 | |
| returns
 | |
| .Dv ULLONG_MAX ,
 | |
| .Fn strtoumax
 | |
| returns
 | |
| .Dv UINTMAX_MAX ,
 | |
| .Fn strtouq
 | |
| returns
 | |
| .Dv UQUAD_MAX ,
 | |
| and the global variable
 | |
| .Va errno
 | |
| is set to
 | |
| .Er ERANGE .
 | |
| .Pp
 | |
| There is no way to determine if
 | |
| .Fn strtoul
 | |
| has processed a negative number (and returned an unsigned value) short of
 | |
| examining the string in
 | |
| .Fa nptr
 | |
| directly.
 | |
| If the
 | |
| .Fa base
 | |
| argument is not supported then
 | |
| .Va errno
 | |
| is set to
 | |
| .Er EINVAL
 | |
| and the functions return 0.
 | |
| .Pp
 | |
| If no error occurs,
 | |
| .Va errno
 | |
| is left unchanged.
 | |
| This behavior (which is unlike most library functions) is guaranteed
 | |
| by the pertinent standards.
 | |
| .Sh EXAMPLES
 | |
| Because the return value of
 | |
| .Fn strtoul
 | |
| cannot be used unambiguously to detect an error,
 | |
| .Va errno
 | |
| is left unchanged after a successful call.
 | |
| To ensure that a string is a valid number (i.e., in range and containing no
 | |
| trailing characters), clear
 | |
| .Va errno
 | |
| beforehand explicitly, then check it afterwards:
 | |
| .Bd -literal -offset indent
 | |
| char *ep;
 | |
| unsigned long ulval;
 | |
| 
 | |
| \&...
 | |
| 
 | |
| errno = 0;
 | |
| ulval = strtoul(buf, \*[Am]ep, 10);
 | |
| if (buf[0] == '\e0' || *ep != '\e0')
 | |
| 	goto not_a_number;
 | |
| if (errno == ERANGE \*[Am]\*[Am] ulval == ULONG_MAX)
 | |
| 	goto out_of_range;
 | |
| .Ed
 | |
| .Pp
 | |
| This example will accept
 | |
| .Dq 12
 | |
| but not
 | |
| .Dq 12foo
 | |
| or
 | |
| .Dq 12\en .
 | |
| If trailing whitespace is acceptable, further checks must be done on
 | |
| .Va *ep ;
 | |
| alternately, use
 | |
| .Xr sscanf 3 .
 | |
| .Sh ERRORS
 | |
| .Bl -tag -width Er
 | |
| .It Bq Er EINVAL
 | |
| The
 | |
| .Ar base
 | |
| is not between 2 and 36 and does not contain the special value 0.
 | |
| .It Bq Er ERANGE
 | |
| The given string was out of range; the value converted has been clamped.
 | |
| .El
 | |
| .Sh SEE ALSO
 | |
| .Xr strtoimax 3 ,
 | |
| .Xr strtol 3 ,
 | |
| .Xr strtoll 3
 | |
| .Sh STANDARDS
 | |
| The
 | |
| .Fn strtoul
 | |
| function
 | |
| conforms to
 | |
| .St -ansiC .
 | |
| The
 | |
| .Fn strtoull
 | |
| and
 | |
| .Fn strtoumax
 | |
| functions conform to
 | |
| .St -isoC-99 .
 | |
| .Sh BUGS
 | |
| Ignores the current locale.
 |