about summary refs log tree commit diff
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();