summaryrefslogtreecommitdiff
path: root/libc
diff options
context:
space:
mode:
authorManuel Novoa III <mjn3@codepoet.org>2001-01-25 21:19:46 +0000
committerManuel Novoa III <mjn3@codepoet.org>2001-01-25 21:19:46 +0000
commitcc07f2350dc260a2a4eaf4ff05f32939c55a9893 (patch)
treeb898aa05768dfd221f31c489d0d01cc2d80be868 /libc
parentc4685a5c3c6cef896b3ba7ccb5b628e4489fcb34 (diff)
Clean up atexit.c; make sure sysconf and atexit agree; link in ref'd libgcc.a
objects with shared uClibc; allow disabling long long support.
Diffstat (limited to 'libc')
-rw-r--r--libc/misc/internals/Makefile7
-rw-r--r--libc/stdlib/Makefile5
-rw-r--r--libc/stdlib/atexit.c49
-rw-r--r--libc/sysdeps/linux/arm/bits/confname.h5
-rw-r--r--libc/sysdeps/linux/i386/bits/confname.h5
-rw-r--r--libc/sysdeps/linux/m68k/bits/confname.h5
-rw-r--r--libc/unistd/sysconf.c4
7 files changed, 40 insertions, 40 deletions
diff --git a/libc/misc/internals/Makefile b/libc/misc/internals/Makefile
index da693ce51..863d32401 100644
--- a/libc/misc/internals/Makefile
+++ b/libc/misc/internals/Makefile
@@ -24,9 +24,12 @@ TOPDIR=../../
include $(TOPDIR)Rules.mak
LIBC=$(TOPDIR)libc.a
-CSRC=ultostr.c ltostr.c ulltostr.c lltostr.c zoicheck.c
+CSRC=ultostr.c ltostr.c
ifeq ($(HAS_FLOATS),true)
- CSRC += dtostr.c
+ CSRC += dtostr.c zoicheck.c
+endif
+ifeq ($(HAS_LONG_LONG),true)
+ CSRC += ulltostr.c lltostr.c
endif
COBJS=$(patsubst %.c,%.o, $(CSRC))
diff --git a/libc/stdlib/Makefile b/libc/stdlib/Makefile
index 06d87c674..6ea292d5b 100644
--- a/libc/stdlib/Makefile
+++ b/libc/stdlib/Makefile
@@ -45,7 +45,10 @@ endif
COBJS=$(patsubst %.c,%.o, $(CSRC))
-OBJS=$(MOBJ) $(MOBJ1) $(MOBJ2) $(COBJS)
+OBJS=$(MOBJ) $(MOBJ2) $(COBJS)
+ifeq ($(HAS_LONG_LONG),true)
+ OBJS += $(MOBJ1)
+endif
all: $(OBJS) $(LIBC)
diff --git a/libc/stdlib/atexit.c b/libc/stdlib/atexit.c
index 5079692af..a7ec0fb1f 100644
--- a/libc/stdlib/atexit.c
+++ b/libc/stdlib/atexit.c
@@ -12,45 +12,17 @@
* Combined atexit and __do_exit into one object file.
*/
+#include <stdlib.h>
#include <errno.h>
-/* ATEXIT.H */
-
-/*
- * NOTE!!! The following should match the value returned by
- * by sysconf(_SC_ATEXIT_MAX) in unistd/sysconf.c
- */
-#define MAXATEXIT 20 /* AIUI Posix requires 10 */
-
typedef void (*vfuncp) (void);
-
extern vfuncp __cleanup;
-extern void __do_exit();
-extern void _exit __P((int __status)) __attribute__ ((__noreturn__));
-
-extern vfuncp __atexit_table[MAXATEXIT];
-extern int __atexit_count;
-
-/* End ATEXIT.H */
#ifdef L_atexit
-int atexit(vfuncp ptr)
-{
- if ((__atexit_count < 0) || (__atexit_count >= MAXATEXIT)) {
- errno = ENOMEM;
- return -1;
- }
- if (ptr) {
- __cleanup = __do_exit;
- __atexit_table[__atexit_count++] = ptr;
- }
- return 0;
-}
+static vfuncp __atexit_table[__UCLIBC_MAX_ATEXIT];
+static int __atexit_count = 0;
-vfuncp __atexit_table[MAXATEXIT];
-int __atexit_count = 0;
-
-void __do_exit(int rv)
+static void __do_exit(void)
{
int count = __atexit_count - 1;
@@ -62,6 +34,19 @@ void __do_exit(int rv)
(*__atexit_table[count])();
}
}
+
+int atexit(vfuncp ptr)
+{
+ if ((__atexit_count < 0) || (__atexit_count >= __UCLIBC_MAX_ATEXIT)) {
+ errno = ENOMEM;
+ return -1;
+ }
+ if (ptr) {
+ __cleanup = __do_exit;
+ __atexit_table[__atexit_count++] = ptr;
+ }
+ return 0;
+}
#endif
#ifdef L_exit
diff --git a/libc/sysdeps/linux/arm/bits/confname.h b/libc/sysdeps/linux/arm/bits/confname.h
index 229088d67..a649e52f2 100644
--- a/libc/sysdeps/linux/arm/bits/confname.h
+++ b/libc/sysdeps/linux/arm/bits/confname.h
@@ -335,8 +335,11 @@ enum
#define _SC_XOPEN_LEGACY _SC_XOPEN_LEGACY
_SC_XOPEN_REALTIME,
#define _SC_XOPEN_REALTIME _SC_XOPEN_REALTIME
- _SC_XOPEN_REALTIME_THREADS
+ _SC_XOPEN_REALTIME_THREADS,
#define _SC_XOPEN_REALTIME_THREADS _SC_XOPEN_REALTIME_THREADS
+
+ /* MUST BE LAST VALUE!!! */
+ _UCLIBC_SYSCONF_NUM_VALID_ARGS
};
#if (defined __USE_POSIX2 || defined __USE_UNIX98 \
diff --git a/libc/sysdeps/linux/i386/bits/confname.h b/libc/sysdeps/linux/i386/bits/confname.h
index 229088d67..a649e52f2 100644
--- a/libc/sysdeps/linux/i386/bits/confname.h
+++ b/libc/sysdeps/linux/i386/bits/confname.h
@@ -335,8 +335,11 @@ enum
#define _SC_XOPEN_LEGACY _SC_XOPEN_LEGACY
_SC_XOPEN_REALTIME,
#define _SC_XOPEN_REALTIME _SC_XOPEN_REALTIME
- _SC_XOPEN_REALTIME_THREADS
+ _SC_XOPEN_REALTIME_THREADS,
#define _SC_XOPEN_REALTIME_THREADS _SC_XOPEN_REALTIME_THREADS
+
+ /* MUST BE LAST VALUE!!! */
+ _UCLIBC_SYSCONF_NUM_VALID_ARGS
};
#if (defined __USE_POSIX2 || defined __USE_UNIX98 \
diff --git a/libc/sysdeps/linux/m68k/bits/confname.h b/libc/sysdeps/linux/m68k/bits/confname.h
index 229088d67..a649e52f2 100644
--- a/libc/sysdeps/linux/m68k/bits/confname.h
+++ b/libc/sysdeps/linux/m68k/bits/confname.h
@@ -335,8 +335,11 @@ enum
#define _SC_XOPEN_LEGACY _SC_XOPEN_LEGACY
_SC_XOPEN_REALTIME,
#define _SC_XOPEN_REALTIME _SC_XOPEN_REALTIME
- _SC_XOPEN_REALTIME_THREADS
+ _SC_XOPEN_REALTIME_THREADS,
#define _SC_XOPEN_REALTIME_THREADS _SC_XOPEN_REALTIME_THREADS
+
+ /* MUST BE LAST VALUE!!! */
+ _UCLIBC_SYSCONF_NUM_VALID_ARGS
};
#if (defined __USE_POSIX2 || defined __USE_UNIX98 \
diff --git a/libc/unistd/sysconf.c b/libc/unistd/sysconf.c
index d5c6f6b9d..032311378 100644
--- a/libc/unistd/sysconf.c
+++ b/libc/unistd/sysconf.c
@@ -22,6 +22,7 @@
#include <pwd.h>
#include <stddef.h>
#include <stdio.h>
+#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <sys/sysinfo.h>
@@ -658,8 +659,7 @@ long int sysconf(int name)
#endif
case _SC_ATEXIT_MAX:
- /* See stdlib/atexit.c */
- return 20;
+ return __UCLIBC_MAX_ATEXIT;
case _SC_PASS_MAX:
/* We have no limit but since the return value might be used to