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>
|
2003-11-26 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* libc/include/fcntl.h: Declare syscalls only when building newlib.
|
* libc/include/fcntl.h: Declare syscalls only when building newlib.
|
||||||
|
|
|
@ -33,6 +33,14 @@ typedef struct
|
||||||
long rem; /* remainder */
|
long rem; /* remainder */
|
||||||
} ldiv_t;
|
} ldiv_t;
|
||||||
|
|
||||||
|
#ifndef __STRICT_ANSI__
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
long long int quot; /* quotient */
|
||||||
|
long long int rem; /* remainder */
|
||||||
|
} lldiv_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef NULL
|
#ifndef NULL
|
||||||
#define NULL 0
|
#define NULL 0
|
||||||
#endif
|
#endif
|
||||||
|
@ -155,6 +163,9 @@ unsigned short *
|
||||||
_EXFUN(_seed48_r,(struct _reent *, unsigned short [3]));
|
_EXFUN(_seed48_r,(struct _reent *, unsigned short [3]));
|
||||||
_VOID _EXFUN(srand48,(long));
|
_VOID _EXFUN(srand48,(long));
|
||||||
_VOID _EXFUN(_srand48_r,(struct _reent *, 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,(const char *__n, char **__end_PTR, int __base));
|
||||||
long long _EXFUN(_strtoll_r,(struct _reent *, 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));
|
unsigned long long _EXFUN(strtoull,(const char *__n, char **__end_PTR, int __base));
|
||||||
|
|
|
@ -69,7 +69,10 @@ EXTENDED_SOURCES = \
|
||||||
strtoll.c \
|
strtoll.c \
|
||||||
strtoll_r.c \
|
strtoll_r.c \
|
||||||
strtoull.c \
|
strtoull.c \
|
||||||
strtoull_r.c
|
strtoull_r.c \
|
||||||
|
atoll.c \
|
||||||
|
llabs.c \
|
||||||
|
lldiv.c
|
||||||
|
|
||||||
ELIX_2_OBJS = \
|
ELIX_2_OBJS = \
|
||||||
a64l.$(oext) \
|
a64l.$(oext) \
|
||||||
|
@ -185,16 +188,19 @@ CHEWOUT_FILES= \
|
||||||
assert.def \
|
assert.def \
|
||||||
atexit.def \
|
atexit.def \
|
||||||
atof.def \
|
atof.def \
|
||||||
ecvtbuf.def \
|
|
||||||
atoi.def \
|
atoi.def \
|
||||||
|
atoll.def \
|
||||||
calloc.def \
|
calloc.def \
|
||||||
div.def \
|
div.def \
|
||||||
|
ecvtbuf.def \
|
||||||
efgcvt.def \
|
efgcvt.def \
|
||||||
envlock.def \
|
envlock.def \
|
||||||
exit.def \
|
exit.def \
|
||||||
getenv.def \
|
getenv.def \
|
||||||
labs.def \
|
labs.def \
|
||||||
ldiv.def \
|
ldiv.def \
|
||||||
|
llabs.def \
|
||||||
|
lldiv.def \
|
||||||
malloc.def \
|
malloc.def \
|
||||||
mallocr.def \
|
mallocr.def \
|
||||||
mblen.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
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
# with or without modifications, as long as this notice is preserved.
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
@ -176,7 +176,10 @@ EXTENDED_SOURCES = \
|
||||||
strtoll.c \
|
strtoll.c \
|
||||||
strtoll_r.c \
|
strtoll_r.c \
|
||||||
strtoull.c \
|
strtoull.c \
|
||||||
strtoull_r.c
|
strtoull_r.c \
|
||||||
|
atoll.c \
|
||||||
|
llabs.c \
|
||||||
|
lldiv.c
|
||||||
|
|
||||||
|
|
||||||
ELIX_2_OBJS = \
|
ELIX_2_OBJS = \
|
||||||
|
@ -246,16 +249,19 @@ CHEWOUT_FILES = \
|
||||||
assert.def \
|
assert.def \
|
||||||
atexit.def \
|
atexit.def \
|
||||||
atof.def \
|
atof.def \
|
||||||
ecvtbuf.def \
|
|
||||||
atoi.def \
|
atoi.def \
|
||||||
|
atoll.def \
|
||||||
calloc.def \
|
calloc.def \
|
||||||
div.def \
|
div.def \
|
||||||
|
ecvtbuf.def \
|
||||||
efgcvt.def \
|
efgcvt.def \
|
||||||
envlock.def \
|
envlock.def \
|
||||||
exit.def \
|
exit.def \
|
||||||
getenv.def \
|
getenv.def \
|
||||||
labs.def \
|
labs.def \
|
||||||
ldiv.def \
|
ldiv.def \
|
||||||
|
llabs.def \
|
||||||
|
lldiv.def \
|
||||||
malloc.def \
|
malloc.def \
|
||||||
mallocr.def \
|
mallocr.def \
|
||||||
mblen.def \
|
mblen.def \
|
||||||
|
@ -314,7 +320,8 @@ LIBS = @LIBS@
|
||||||
@USE_LIBTOOL_FALSE@mtrim.$(OBJEXT) nrand48.$(OBJEXT) rand48.$(OBJEXT) \
|
@USE_LIBTOOL_FALSE@mtrim.$(OBJEXT) nrand48.$(OBJEXT) rand48.$(OBJEXT) \
|
||||||
@USE_LIBTOOL_FALSE@seed48.$(OBJEXT) srand48.$(OBJEXT) strtoll.$(OBJEXT) \
|
@USE_LIBTOOL_FALSE@seed48.$(OBJEXT) srand48.$(OBJEXT) strtoll.$(OBJEXT) \
|
||||||
@USE_LIBTOOL_FALSE@strtoll_r.$(OBJEXT) strtoull.$(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)
|
LTLIBRARIES = $(noinst_LTLIBRARIES)
|
||||||
|
|
||||||
@USE_LIBTOOL_TRUE@libstdlib_la_OBJECTS = __adjust.lo __exp10.lo \
|
@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@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@lrand48.lo mrand48.lo msize.lo mtrim.lo nrand48.lo \
|
||||||
@USE_LIBTOOL_TRUE@rand48.lo seed48.lo srand48.lo strtoll.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@
|
CFLAGS = @CFLAGS@
|
||||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_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)
|
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
|
* atexit:: Request execution of functions at program exit
|
||||||
* atof:: String to double or float
|
* atof:: String to double or float
|
||||||
* atoi:: String to integer
|
* atoi:: String to integer
|
||||||
|
* atoll:: String to long long
|
||||||
* calloc:: Allocate space for arrays
|
* calloc:: Allocate space for arrays
|
||||||
* div:: Divide two integers
|
* div:: Divide two integers
|
||||||
* ecvtbuf:: Double or float to string of digits
|
* 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
|
* getenv:: Look up environment variable
|
||||||
* labs:: Long integer absolute value (magnitude)
|
* labs:: Long integer absolute value (magnitude)
|
||||||
* ldiv:: Divide two long integers
|
* 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)
|
* malloc:: Allocate and manage memory (malloc, realloc, free)
|
||||||
* mallinfo:: Get information about allocated memory
|
* mallinfo:: Get information about allocated memory
|
||||||
* __malloc_lock:: Lock memory pool for malloc and free
|
* __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
|
@page
|
||||||
@include stdlib/atoi.def
|
@include stdlib/atoi.def
|
||||||
|
|
||||||
|
@page
|
||||||
|
@include stdlib/atoll.def
|
||||||
|
|
||||||
@page
|
@page
|
||||||
@include stdlib/calloc.def
|
@include stdlib/calloc.def
|
||||||
|
|
||||||
|
@ -82,6 +88,12 @@ The corresponding declarations are in the header file @file{stdlib.h}.
|
||||||
@page
|
@page
|
||||||
@include stdlib/ldiv.def
|
@include stdlib/ldiv.def
|
||||||
|
|
||||||
|
@page
|
||||||
|
@include stdlib/llabs.def
|
||||||
|
|
||||||
|
@page
|
||||||
|
@include stdlib/lldiv.def
|
||||||
|
|
||||||
@page
|
@page
|
||||||
@include stdlib/malloc.def
|
@include stdlib/malloc.def
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue