summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/string.h2
-rw-r--r--include/sys/param.h2
-rw-r--r--src/env/__init_security.c2
-rw-r--r--src/exit/exit.c6
4 files changed, 8 insertions, 4 deletions
diff --git a/include/string.h b/include/string.h
index 4aa930ed..8cf0ee9d 100644
--- a/include/string.h
+++ b/include/string.h
@@ -85,8 +85,10 @@ char *strcasestr(const char *, const char *);
char *strsep(char **, const char *);
void *memrchr(const void *, int, size_t);
void *mempcpy(void *, const void *, size_t);
+#ifndef __cplusplus
char *basename();
#endif
+#endif
#ifdef __cplusplus
}
diff --git a/include/sys/param.h b/include/sys/param.h
index 1650e772..344c0d23 100644
--- a/include/sys/param.h
+++ b/include/sys/param.h
@@ -18,7 +18,7 @@
#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))
-#define ___bitop(x,i,o) ((a)[(i)/8] o 1<<(i)%8)
+#define __bitop(x,i,o) ((x)[(i)/8] o (1<<(i)%8))
#define setbit(x,i) __bitop(x,i,|=)
#define clrbit(x,i) __bitop(x,i,&=~)
#define isset(x,i) __bitop(x,i,&)
diff --git a/src/env/__init_security.c b/src/env/__init_security.c
index 8270f1f4..395abeb5 100644
--- a/src/env/__init_security.c
+++ b/src/env/__init_security.c
@@ -8,7 +8,7 @@
#define AUX_CNT 24
-void dummy(size_t *auxv)
+static void dummy(size_t *auxv)
{
}
weak_alias(dummy, __init_ssp);
diff --git a/src/exit/exit.c b/src/exit/exit.c
index ae557c09..fc291484 100644
--- a/src/exit/exit.c
+++ b/src/exit/exit.c
@@ -2,6 +2,8 @@
#include <unistd.h>
#include <stdio.h>
#include "libc.h"
+#include "atomic.h"
+#include "syscall.h"
static void dummy()
{
@@ -13,10 +15,10 @@ weak_alias(dummy, __fflush_on_exit);
void exit(int code)
{
- static int lock[2];
+ static int lock;
/* If more than one thread calls exit, hang until _Exit ends it all */
- LOCK(lock);
+ while (a_swap(&lock, 1)) __syscall(SYS_pause);
/* Only do atexit & stdio flush if they were actually used */
__funcs_on_exit();