2003-11-27 Artem B. Bityuckiy <mail_lists@mail.ru>
Jeff Johnston <jjohnstn@redhat.com> * libc/include/stdlib.h (lldiv_t): New type. (atoll, llabs, lldiv): New prototypes. * libc/stdlib/Makefile.am: Add support for atoll, llabs, and lldiv. * libc/stdlib/stdlib.tex: Ditto. * libc/stdlib/Makefile.in: Regenerated. * libc/stdlib/atoll.c: New file. * libc/stdlib/llabs.c: Ditto. * libc/stdlib/lldiv.c: Ditto.
This commit is contained in:
parent
6dec26cd0c
commit
6bbb700c34
|
@ -1,3 +1,15 @@
|
|||
2003-11-27 Artem B. Bityuckiy <mail_lists@mail.ru>
|
||||
Jeff Johnston <jjohnstn@redhat.com>
|
||||
|
||||
* libc/include/stdlib.h (lldiv_t): New type.
|
||||
(atoll, llabs, lldiv): New prototypes.
|
||||
* libc/stdlib/Makefile.am: Add support for atoll, llabs, and lldiv.
|
||||
* libc/stdlib/stdlib.tex: Ditto.
|
||||
* libc/stdlib/Makefile.in: Regenerated.
|
||||
* libc/stdlib/atoll.c: New file.
|
||||
* libc/stdlib/llabs.c: Ditto.
|
||||
* libc/stdlib/lldiv.c: Ditto.
|
||||
|
||||
2003-11-26 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* libc/include/fcntl.h: Declare syscalls only when building newlib.
|
||||
|
|
|
@ -33,6 +33,14 @@ typedef struct
|
|||
long rem; /* remainder */
|
||||
} ldiv_t;
|
||||
|
||||
#ifndef __STRICT_ANSI__
|
||||
typedef struct
|
||||
{
|
||||
long long int quot; /* quotient */
|
||||
long long int rem; /* remainder */
|
||||
} lldiv_t;
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
@ -155,6 +163,9 @@ unsigned short *
|
|||
_EXFUN(_seed48_r,(struct _reent *, unsigned short [3]));
|
||||
_VOID _EXFUN(srand48,(long));
|
||||
_VOID _EXFUN(_srand48_r,(struct _reent *, long));
|
||||
long long _EXFUN(atoll,(const char *__nptr));
|
||||
long long _EXFUN(llabs,(long long));
|
||||
lldiv_t _EXFUN(lldiv,(long long __numer, long long __denom));
|
||||
long long _EXFUN(strtoll,(const char *__n, char **__end_PTR, int __base));
|
||||
long long _EXFUN(_strtoll_r,(struct _reent *, const char *__n, char **__end_PTR, int __base));
|
||||
unsigned long long _EXFUN(strtoull,(const char *__n, char **__end_PTR, int __base));
|
||||
|
|
|
@ -69,7 +69,10 @@ EXTENDED_SOURCES = \
|
|||
strtoll.c \
|
||||
strtoll_r.c \
|
||||
strtoull.c \
|
||||
strtoull_r.c
|
||||
strtoull_r.c \
|
||||
atoll.c \
|
||||
llabs.c \
|
||||
lldiv.c
|
||||
|
||||
ELIX_2_OBJS = \
|
||||
a64l.$(oext) \
|
||||
|
@ -185,16 +188,19 @@ CHEWOUT_FILES= \
|
|||
assert.def \
|
||||
atexit.def \
|
||||
atof.def \
|
||||
ecvtbuf.def \
|
||||
atoi.def \
|
||||
atoll.def \
|
||||
calloc.def \
|
||||
div.def \
|
||||
ecvtbuf.def \
|
||||
efgcvt.def \
|
||||
envlock.def \
|
||||
exit.def \
|
||||
getenv.def \
|
||||
labs.def \
|
||||
ldiv.def \
|
||||
llabs.def \
|
||||
lldiv.def \
|
||||
malloc.def \
|
||||
mallocr.def \
|
||||
mblen.def \
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Makefile.in generated automatically by automake 1.4 from Makefile.am
|
||||
# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
|
||||
|
||||
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
@ -176,7 +176,10 @@ EXTENDED_SOURCES = \
|
|||
strtoll.c \
|
||||
strtoll_r.c \
|
||||
strtoull.c \
|
||||
strtoull_r.c
|
||||
strtoull_r.c \
|
||||
atoll.c \
|
||||
llabs.c \
|
||||
lldiv.c
|
||||
|
||||
|
||||
ELIX_2_OBJS = \
|
||||
|
@ -246,16 +249,19 @@ CHEWOUT_FILES = \
|
|||
assert.def \
|
||||
atexit.def \
|
||||
atof.def \
|
||||
ecvtbuf.def \
|
||||
atoi.def \
|
||||
atoll.def \
|
||||
calloc.def \
|
||||
div.def \
|
||||
ecvtbuf.def \
|
||||
efgcvt.def \
|
||||
envlock.def \
|
||||
exit.def \
|
||||
getenv.def \
|
||||
labs.def \
|
||||
ldiv.def \
|
||||
llabs.def \
|
||||
lldiv.def \
|
||||
malloc.def \
|
||||
mallocr.def \
|
||||
mblen.def \
|
||||
|
@ -314,7 +320,8 @@ LIBS = @LIBS@
|
|||
@USE_LIBTOOL_FALSE@mtrim.$(OBJEXT) nrand48.$(OBJEXT) rand48.$(OBJEXT) \
|
||||
@USE_LIBTOOL_FALSE@seed48.$(OBJEXT) srand48.$(OBJEXT) strtoll.$(OBJEXT) \
|
||||
@USE_LIBTOOL_FALSE@strtoll_r.$(OBJEXT) strtoull.$(OBJEXT) \
|
||||
@USE_LIBTOOL_FALSE@strtoull_r.$(OBJEXT)
|
||||
@USE_LIBTOOL_FALSE@strtoull_r.$(OBJEXT) atoll.$(OBJEXT) llabs.$(OBJEXT) \
|
||||
@USE_LIBTOOL_FALSE@lldiv.$(OBJEXT)
|
||||
LTLIBRARIES = $(noinst_LTLIBRARIES)
|
||||
|
||||
@USE_LIBTOOL_TRUE@libstdlib_la_OBJECTS = __adjust.lo __exp10.lo \
|
||||
|
@ -330,7 +337,8 @@ LTLIBRARIES = $(noinst_LTLIBRARIES)
|
|||
@USE_LIBTOOL_TRUE@ecvtbuf.lo efgcvt.lo erand48.lo jrand48.lo lcong48.lo \
|
||||
@USE_LIBTOOL_TRUE@lrand48.lo mrand48.lo msize.lo mtrim.lo nrand48.lo \
|
||||
@USE_LIBTOOL_TRUE@rand48.lo seed48.lo srand48.lo strtoll.lo \
|
||||
@USE_LIBTOOL_TRUE@strtoll_r.lo strtoull.lo strtoull_r.lo
|
||||
@USE_LIBTOOL_TRUE@strtoll_r.lo strtoull.lo strtoull_r.lo atoll.lo \
|
||||
@USE_LIBTOOL_TRUE@llabs.lo lldiv.lo
|
||||
CFLAGS = @CFLAGS@
|
||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
FUNCTION
|
||||
<<atoll>>---convert a string to a long long integer
|
||||
|
||||
INDEX
|
||||
atoll
|
||||
|
||||
ANSI_SYNOPSIS
|
||||
#include <stdlib.h>
|
||||
long long atoll(const char *<[str]>);
|
||||
|
||||
TRAD_SYNOPSIS
|
||||
#include <stdlib.h>
|
||||
long long atoll(<[str]>)
|
||||
const char *<[str]>;
|
||||
|
||||
DESCRIPTION
|
||||
The function <<atoll>> converts the initial portion of the string
|
||||
pointed to by <<*<[str]>>> to a type <<long long>>. The call to
|
||||
atoll(str) should be equivalent to strtoll(str, (char **)NULL, 10)
|
||||
except that <<atoll>> doesn't detect errors.
|
||||
|
||||
RETURNS
|
||||
The converted value.
|
||||
|
||||
PORTABILITY
|
||||
<<atoll>> is ISO 9899 (C99) and POSIX 1003.1-2001 compatable.
|
||||
|
||||
No supporting OS subroutines are required.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 1988, 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. 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.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
|
||||
long long
|
||||
_DEFUN(atoll, (str),
|
||||
_CONST char *str)
|
||||
{
|
||||
return strtoll(str, (char **)NULL, 10);
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
FUNCTION
|
||||
<<llabs>>---compute the absolute value of an long long integer.
|
||||
|
||||
INDEX
|
||||
llabs
|
||||
|
||||
ANSI_SYNOPSIS
|
||||
#include <stdlib.h>
|
||||
long long llabs(long long j);
|
||||
|
||||
TRAD_SYNOPSIS
|
||||
#include <stdlib.h>
|
||||
long long llabs(<[j]>)
|
||||
long long <[j]>;
|
||||
|
||||
DESCRIPTION
|
||||
The <<llabs>> function computes the absolute value of the long long integer
|
||||
argument <[j]> (also called the magnitude of <[j]>).
|
||||
|
||||
The similar function <<labs>> uses and returns <<long>> rather than
|
||||
<<long long>> values.
|
||||
|
||||
RETURNS
|
||||
A nonnegative long long integer.
|
||||
|
||||
PORTABILITY
|
||||
<<llabs>> is ISO 9899 (C99) compatable.
|
||||
|
||||
No supporting OS subroutines are required.
|
||||
*/
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
|
||||
* 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.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
long long
|
||||
_DEFUN(llabs, (j),
|
||||
long long j)
|
||||
{
|
||||
return (j < 0 ? -j : j);
|
||||
}
|
|
@ -0,0 +1,115 @@
|
|||
/*
|
||||
FUNCTION
|
||||
<<lldiv>>---divide two long long integers
|
||||
|
||||
INDEX
|
||||
lldiv
|
||||
|
||||
ANSI_SYNOPSIS
|
||||
#include <stdlib.h>
|
||||
lldiv_t lldiv(long long <[n]>, long long <[d]>);
|
||||
|
||||
TRAD_SYNOPSIS
|
||||
#include <stdlib.h>
|
||||
lldiv_t lldiv(<[n]>, <[d]>)
|
||||
long long <[n]>, <[d]>;
|
||||
|
||||
DESCRIPTION
|
||||
Divide
|
||||
@tex
|
||||
$n/d$,
|
||||
@end tex
|
||||
@ifnottex
|
||||
<[n]>/<[d]>,
|
||||
@end ifnottex
|
||||
returning quotient and remainder as two long long integers in a structure
|
||||
<<lldiv_t>>.
|
||||
|
||||
RETURNS
|
||||
The result is represented with the structure
|
||||
|
||||
. typedef struct
|
||||
. {
|
||||
. long long quot;
|
||||
. long long rem;
|
||||
. } lldiv_t;
|
||||
|
||||
where the <<quot>> field represents the quotient, and <<rem>> the
|
||||
remainder. For nonzero <[d]>, if `<<<[r]> = ldiv(<[n]>,<[d]>);>>' then
|
||||
<[n]> equals `<<<[r]>.rem + <[d]>*<[r]>.quot>>'.
|
||||
|
||||
To divide <<long>> rather than <<long long>> values, use the similar
|
||||
function <<ldiv>>.
|
||||
|
||||
PORTABILITY
|
||||
<<lldiv>> is ISO 9899 (C99) compatable.
|
||||
|
||||
No supporting OS subroutines are required.
|
||||
*/
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2001 Mike Barcroft <mike@FreeBSD.org>
|
||||
* 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.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
/*
|
||||
* The ANSI standard says that |r.quot| <= |n/d|, where
|
||||
* n/d is to be computed in infinite precision. In other
|
||||
* words, we should always truncate the quotient towards
|
||||
* 0, never -infinity.
|
||||
*
|
||||
* Machine division and remainer may work either way when
|
||||
* one or both of n or d is negative. If only one is
|
||||
* negative and r.quot has been truncated towards -inf,
|
||||
* r.rem will have the same sign as denom and the opposite
|
||||
* sign of num; if both are negative and r.quot has been
|
||||
* truncated towards -inf, r.rem will be positive (will
|
||||
* have the opposite sign of num). These are considered
|
||||
* `wrong'.
|
||||
*
|
||||
* If both are num and denom are positive, r will always
|
||||
* be positive.
|
||||
*
|
||||
* This all boils down to:
|
||||
* if num >= 0, but r.rem < 0, we got the wrong answer.
|
||||
* In that case, to get the right answer, add 1 to r.quot and
|
||||
* subtract denom from r.rem.
|
||||
*/
|
||||
lldiv_t
|
||||
_DEFUN (lldiv, (number, denom),
|
||||
long long numer _AND long long denom)
|
||||
{
|
||||
lldiv_t retval;
|
||||
|
||||
retval.quot = numer / denom;
|
||||
retval.rem = numer % denom;
|
||||
if (numer >= 0 && retval.rem < 0) {
|
||||
retval.quot++;
|
||||
retval.rem -= denom;
|
||||
}
|
||||
return (retval);
|
||||
}
|
||||
|
|
@ -11,6 +11,7 @@ The corresponding declarations are in the header file @file{stdlib.h}.
|
|||
* atexit:: Request execution of functions at program exit
|
||||
* atof:: String to double or float
|
||||
* atoi:: String to integer
|
||||
* atoll:: String to long long
|
||||
* calloc:: Allocate space for arrays
|
||||
* div:: Divide two integers
|
||||
* ecvtbuf:: Double or float to string of digits
|
||||
|
@ -21,6 +22,8 @@ The corresponding declarations are in the header file @file{stdlib.h}.
|
|||
* getenv:: Look up environment variable
|
||||
* labs:: Long integer absolute value (magnitude)
|
||||
* ldiv:: Divide two long integers
|
||||
* llabs:: Long long integer absolute value (magnitude)
|
||||
* lldiv:: Divide two long long integers
|
||||
* malloc:: Allocate and manage memory (malloc, realloc, free)
|
||||
* mallinfo:: Get information about allocated memory
|
||||
* __malloc_lock:: Lock memory pool for malloc and free
|
||||
|
@ -55,6 +58,9 @@ The corresponding declarations are in the header file @file{stdlib.h}.
|
|||
@page
|
||||
@include stdlib/atoi.def
|
||||
|
||||
@page
|
||||
@include stdlib/atoll.def
|
||||
|
||||
@page
|
||||
@include stdlib/calloc.def
|
||||
|
||||
|
@ -82,6 +88,12 @@ The corresponding declarations are in the header file @file{stdlib.h}.
|
|||
@page
|
||||
@include stdlib/ldiv.def
|
||||
|
||||
@page
|
||||
@include stdlib/llabs.def
|
||||
|
||||
@page
|
||||
@include stdlib/lldiv.def
|
||||
|
||||
@page
|
||||
@include stdlib/malloc.def
|
||||
|
||||
|
|
Loading…
Reference in New Issue