diff --git a/libc/Android.mk b/libc/Android.mk
index 0bb521f..8cb85b7 100644
--- a/libc/Android.mk
+++ b/libc/Android.mk
@@ -233,7 +233,6 @@
     upstream-freebsd/lib/libc/stdio/fwrite.c \
     upstream-freebsd/lib/libc/stdio/makebuf.c \
     upstream-freebsd/lib/libc/stdio/mktemp.c \
-    upstream-freebsd/lib/libc/stdio/putw.c \
     upstream-freebsd/lib/libc/stdio/setvbuf.c \
     upstream-freebsd/lib/libc/stdio/wsetup.c \
     upstream-freebsd/lib/libc/stdlib/abs.c \
@@ -352,6 +351,7 @@
     upstream-openbsd/lib/libc/stdio/putc.c \
     upstream-openbsd/lib/libc/stdio/putchar.c \
     upstream-openbsd/lib/libc/stdio/puts.c \
+    upstream-openbsd/lib/libc/stdio/putw.c \
     upstream-openbsd/lib/libc/stdio/refill.c \
     upstream-openbsd/lib/libc/stdio/remove.c \
     upstream-openbsd/lib/libc/stdio/rewind.c \
@@ -400,7 +400,6 @@
 # Define some common cflags
 # ========================================================
 libc_common_cflags := \
-    -DANDROID_CHANGES \
     -D_LIBC=1 \
     -Wall -Wextra \
 
@@ -513,6 +512,7 @@
 LOCAL_SRC_FILES := $(call all-c-files-under,dns)
 LOCAL_CFLAGS := \
     $(libc_common_cflags) \
+    -DANDROID_CHANGES \
     -DINET6 \
     -I$(LOCAL_PATH)/dns/include \
     -I$(LOCAL_PATH)/private \
diff --git a/libc/bionic/pthread_create.cpp b/libc/bionic/pthread_create.cpp
index b790e2b..f6b3d60 100644
--- a/libc/bionic/pthread_create.cpp
+++ b/libc/bionic/pthread_create.cpp
@@ -54,6 +54,8 @@
 
 static pthread_mutex_t gDebuggerNotificationLock = PTHREAD_MUTEX_INITIALIZER;
 
+extern "C" int __isthreaded;
+
 // This code is used both by each new pthread and the code that initializes the main thread.
 void __init_tls(pthread_internal_t* thread) {
   // Zero-initialize all the slots after TLS_SLOT_SELF and TLS_SLOT_THREAD_ID.
@@ -169,11 +171,7 @@
                    void* (*start_routine)(void*), void* arg) {
   ErrnoRestorer errno_restorer;
 
-  // Inform the rest of the C library that at least one thread
-  // was created. This will enforce certain functions to acquire/release
-  // locks (e.g. atexit()) to protect shared global structures.
-  // This works because pthread_create() is not called by the C library
-  // initialization routine that sets up the main thread's data structures.
+  // Inform the rest of the C library that at least one thread was created.
   __isthreaded = 1;
 
   pthread_internal_t* thread = reinterpret_cast<pthread_internal_t*>(calloc(sizeof(*thread), 1));
diff --git a/libc/bionic/system_properties.cpp b/libc/bionic/system_properties.cpp
index 56f3724..4e4684a 100644
--- a/libc/bionic/system_properties.cpp
+++ b/libc/bionic/system_properties.cpp
@@ -609,23 +609,17 @@
 
 int __system_property_read(const prop_info *pi, char *name, char *value)
 {
-    unsigned serial, len;
-
     if (__predict_false(compat_mode)) {
         return __system_property_read_compat(pi, name, value);
     }
 
-    for(;;) {
-        serial = pi->serial;
-        while(SERIAL_DIRTY(serial)) {
-            __futex_wait((volatile void *)&pi->serial, serial, NULL);
-            serial = pi->serial;
-        }
-        len = SERIAL_VALUE_LEN(serial);
+    while (true) {
+        uint32_t serial = __system_property_serial(pi);
+        size_t len = SERIAL_VALUE_LEN(serial);
         memcpy(value, pi->value, len + 1);
         ANDROID_MEMBAR_FULL();
-        if(serial == pi->serial) {
-            if(name != 0) {
+        if (serial == pi->serial) {
+            if (name != 0) {
                 strcpy(name, pi->name);
             }
             return len;
@@ -678,7 +672,7 @@
         const uint32_t n = pi->serial;
         do {
             __futex_wait((volatile void *)&pi->serial, n, NULL);
-        } while(n == pi->serial);
+        } while (n == pi->serial);
     }
     return 0;
 }
@@ -702,6 +696,7 @@
 
     return 0;
 }
+
 int __system_property_add(const char *name, unsigned int namelen,
             const char *value, unsigned int valuelen)
 {
@@ -726,7 +721,12 @@
 
 unsigned int __system_property_serial(const prop_info *pi)
 {
-    return pi->serial;
+    uint32_t serial = pi->serial;
+    while (SERIAL_DIRTY(serial)) {
+        __futex_wait(const_cast<volatile uint32_t*>(&pi->serial), serial, NULL);
+        serial = pi->serial;
+    }
+    return serial;
 }
 
 unsigned int __system_property_wait_any(unsigned int serial)
@@ -735,7 +735,7 @@
 
     do {
         __futex_wait(&pa->serial, serial, NULL);
-    } while(pa->serial == serial);
+    } while (pa->serial == serial);
 
     return pa->serial;
 }
diff --git a/libc/dns/net/reentrant.h b/libc/dns/net/reentrant.h
deleted file mode 100644
index 60bff08..0000000
--- a/libc/dns/net/reentrant.h
+++ /dev/null
@@ -1,269 +0,0 @@
-/*	$NetBSD: reentrant.h,v 1.10 2004/12/14 00:23:19 nathanw Exp $	*/
-
-/*-
- * Copyright (c) 1997, 1998, 2003 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by J.T. Conklin, by Nathan J. Williams, and by Jason R. Thorpe.
- *
- * 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 NetBSD
- *        Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
- */
-
-/*
- * Requirements:
- * 
- * 1. The thread safe mechanism should be lightweight so the library can
- *    be used by non-threaded applications without unreasonable overhead.
- * 
- * 2. There should be no dependency on a thread engine for non-threaded
- *    applications.
- * 
- * 3. There should be no dependency on any particular thread engine.
- * 
- * 4. The library should be able to be compiled without support for thread
- *    safety.
- * 
- * 
- * Rationale:
- * 
- * One approach for thread safety is to provide discrete versions of the
- * library: one thread safe, the other not.  The disadvantage of this is
- * that libc is rather large, and two copies of a library which are 99%+
- * identical is not an efficent use of resources.
- * 
- * Another approach is to provide a single thread safe library.  However,
- * it should not add significant run time or code size overhead to non-
- * threaded applications.
- * 
- * Since the NetBSD C library is used in other projects, it should be
- * easy to replace the mutual exclusion primitives with ones provided by
- * another system.  Similarly, it should also be easy to remove all
- * support for thread safety completely if the target environment does
- * not support threads.
- * 
- * 
- * Implementation Details:
- * 
- * The thread primitives used by the library (mutex_t, mutex_lock, etc.)
- * are macros which expand to the cooresponding primitives provided by
- * the thread engine or to nothing.  The latter is used so that code is
- * not unreasonably cluttered with #ifdefs when all thread safe support
- * is removed.
- * 
- * The thread macros can be directly mapped to the mutex primitives from
- * pthreads, however it should be reasonably easy to wrap another mutex
- * implementation so it presents a similar interface.
- * 
- * The thread functions operate by dispatching to symbols which are, by
- * default, weak-aliased to no-op functions in thread-stub/thread-stub.c
- * (some uses of thread operations are conditional on __isthreaded, but
- * not all of them are).
- *
- * When the thread library is linked in, it provides strong-alias versions
- * of those symbols which dispatch to its own real thread operations.
- *
- */
-
-#ifdef _REENTRANT
-
-/*
- * Abtract thread interface for thread-safe libraries.  These routines
- * will use stubs in libc if the application is not linked against the
- * pthread library, and the real function in the pthread library if it
- * is.
- */
-
-#include <pthread.h>
-#include <signal.h>
-#include <sys/cdefs.h>
-
-#define	mutex_t			pthread_mutex_t
-#define	MUTEX_INITIALIZER	PTHREAD_MUTEX_INITIALIZER
-
-#define	mutexattr_t		pthread_mutexattr_t
-
-#define	MUTEX_TYPE_NORMAL	PTHREAD_MUTEX_NORMAL
-#define	MUTEX_TYPE_ERRORCHECK	PTHREAD_MUTEX_ERRORCHECK
-#define	MUTEX_TYPE_RECURSIVE	PTHREAD_MUTEX_RECURSIVE
-
-#define	cond_t			pthread_cond_t
-#define	COND_INITIALIZER	PTHREAD_COND_INITIALIZER
-
-#define	condattr_t		pthread_condattr_t
-
-#define	rwlock_t		pthread_rwlock_t
-#define	RWLOCK_INITIALIZER	PTHREAD_RWLOCK_INITIALIZER
-
-#define	rwlockattr_t		pthread_rwlockattr_t
-
-#define	thread_key_t		pthread_key_t
-
-#define	thr_t			pthread_t
-
-#define	thrattr_t		pthread_attr_t
-
-#define	once_t			pthread_once_t
-#define	ONCE_INITIALIZER	PTHREAD_ONCE_INIT
-
-#ifndef __LIBC_THREAD_STUBS
-
-__BEGIN_DECLS
-int	__libc_mutex_init(mutex_t *, const mutexattr_t *);
-int	__libc_mutex_lock(mutex_t *);
-int	__libc_mutex_trylock(mutex_t *);
-int	__libc_mutex_unlock(mutex_t *);
-int	__libc_mutex_destroy(mutex_t *);
-
-int	__libc_mutexattr_init(mutexattr_t *);
-int	__libc_mutexattr_settype(mutexattr_t *, int);
-int	__libc_mutexattr_destroy(mutexattr_t *);
-__END_DECLS
-
-#define	mutex_init(m, a)	__libc_mutex_init((m), (a))
-#define	mutex_lock(m)		__libc_mutex_lock((m))
-#define	mutex_trylock(m)	__libc_mutex_trylock((m))
-#define	mutex_unlock(m)		__libc_mutex_unlock((m))
-#define	mutex_destroy(m)	__libc_mutex_destroy((m))
-
-#define	mutexattr_init(ma)	__libc_mutexattr_init((ma))
-#define	mutexattr_settype(ma, t) __libc_mutexattr_settype((ma), (t))
-#define	mutexattr_destroy(ma)	__libc_mutexattr_destroy((ma))
-
-__BEGIN_DECLS
-int	__libc_cond_init(cond_t *, const condattr_t *);
-int	__libc_cond_signal(cond_t *);
-int	__libc_cond_broadcast(cond_t *);
-int	__libc_cond_wait(cond_t *, mutex_t *);
-int	__libc_cond_timedwait(cond_t *, mutex_t *, const struct timespec *);
-int	__libc_cond_destroy(cond_t *);
-__END_DECLS
-
-#define	cond_init(c, t, a)     	__libc_cond_init((c), (a))
-#define	cond_signal(c)		__libc_cond_signal((c))
-#define	cond_broadcast(c)	__libc_cond_broadcast((c))
-#define	cond_wait(c, m)		__libc_cond_wait((c), (m))
-#define	cond_timedwait(c, m, t)	__libc_cond_timedwait((c), (m), (t))
-#define	cond_destroy(c)		__libc_cond_destroy((c))
-
-__BEGIN_DECLS
-int	__libc_rwlock_init(rwlock_t *, const rwlockattr_t *);
-int	__libc_rwlock_rdlock(rwlock_t *);
-int	__libc_rwlock_wrlock(rwlock_t *);
-int	__libc_rwlock_tryrdlock(rwlock_t *);
-int	__libc_rwlock_trywrlock(rwlock_t *);
-int	__libc_rwlock_unlock(rwlock_t *);
-int	__libc_rwlock_destroy(rwlock_t *);
-__END_DECLS
-
-#define	rwlock_init(l, a)	__libc_rwlock_init((l), (a))
-#define	rwlock_rdlock(l)	__libc_rwlock_rdlock((l))
-#define	rwlock_wrlock(l)	__libc_rwlock_wrlock((l))
-#define	rwlock_tryrdlock(l)	__libc_rwlock_tryrdlock((l))
-#define	rwlock_trywrlock(l)	__libc_rwlock_trywrlock((l))
-#define	rwlock_unlock(l)	__libc_rwlock_unlock((l))
-#define	rwlock_destroy(l)	__libc_rwlock_destroy((l))
-
-__BEGIN_DECLS
-int	__libc_thr_keycreate(thread_key_t *, void (*)(void *));
-int	__libc_thr_setspecific(thread_key_t, const void *);
-void	*__libc_thr_getspecific(thread_key_t);
-int	__libc_thr_keydelete(thread_key_t);
-__END_DECLS
-
-#define	thr_keycreate(k, d)	__libc_thr_keycreate((k), (d))
-#define	thr_setspecific(k, p)	__libc_thr_setspecific((k), (p))
-#define	thr_getspecific(k)	__libc_thr_getspecific((k))
-#define	thr_keydelete(k)	__libc_thr_keydelete((k))
-
-__BEGIN_DECLS
-int	__libc_thr_once(once_t *, void (*)(void));
-int	__libc_thr_sigsetmask(int, const sigset_t *, sigset_t *);
-thr_t	__libc_thr_self(void);
-int	__libc_thr_yield(void);
-void	__libc_thr_create(thr_t *, const thrattr_t *,
-	    void *(*)(void *), void *);
-void	__libc_thr_exit(void *) __attribute__((__noreturn__));
-int	*__libc_thr_errno(void);
-int	__libc_thr_setcancelstate(int, int *);
-
-extern int __isthreaded;
-__END_DECLS
-
-#define	thr_once(o, f)		__libc_thr_once((o), (f))
-#define	thr_sigsetmask(f, n, o)	__libc_thr_sigsetmask((f), (n), (o))
-#define	thr_self()		__libc_thr_self()
-#define	thr_yield()		__libc_thr_yield()
-#define	thr_create(tp, ta, f, a) __libc_thr_create((tp), (ta), (f), (a))
-#define	thr_exit(v)		__libc_thr_exit((v))
-#define	thr_errno()		__libc_thr_errno()
-#define	thr_enabled()		(__isthreaded)
-#define thr_setcancelstate(n, o) __libc_thr_setcancelstate((n),(o))
-#endif /* __LIBC_THREAD_STUBS */
-
-#define	FLOCKFILE(fp)		__flockfile_internal(fp, 1)
-#define	FUNLOCKFILE(fp)		__funlockfile_internal(fp, 1)
-
-#else /* _REENTRANT */
-
-#define	mutex_init(m, a)
-#define	mutex_lock(m)
-#define	mutex_trylock(m)
-#define	mutex_unlock(m)
-#define	mutex_destroy(m)
-
-#define	cond_init(c, t, a)
-#define	cond_signal(c)
-#define	cond_broadcast(c)
-#define	cond_wait(c, m)
-#define	cond_timedwait(c, m, t)
-#define	cond_destroy(c)
-
-#define	rwlock_init(l, a)
-#define	rwlock_rdlock(l)
-#define	rwlock_wrlock(l)
-#define	rwlock_tryrdlock(l)
-#define	rwlock_trywrlock(l)
-#define	rwlock_unlock(l)
-#define	rwlock_destroy(l)
-
-#define	thr_keycreate(k, d)
-#define	thr_setspecific(k, p)
-#define	thr_getspecific(k)
-#define	thr_keydelete(k)
-
-#define	thr_once(o, f)
-#define	thr_sigsetmask(f, n, o)
-#define	thr_self()
-#define	thr_errno()
-
-#define	FLOCKFILE(fp)		
-#define	FUNLOCKFILE(fp)		
-
-#endif /* _REENTRANT */
diff --git a/libc/include/locale.h b/libc/include/locale.h
index 65b5c7d..b6dbfdb 100644
--- a/libc/include/locale.h
+++ b/libc/include/locale.h
@@ -49,11 +49,13 @@
     LC_IDENTIFICATION = 12
 };
 
-extern char *setlocale(int category, const char *locale);
+extern char* setlocale(int, const char*);
 
-/* Make libstdc++-v3 happy.  */
+#if !defined(__LP64__)
+// TODO: LP32 had these bogus declarations but LP64 should have a real struct lconv and localeconv(3).
 struct lconv { };
-struct lconv *localeconv(void);
+struct lconv* localeconv(void);
+#endif
 
 __END_DECLS
 
diff --git a/libc/include/stdio.h b/libc/include/stdio.h
index c241d94..6f8f92e 100644
--- a/libc/include/stdio.h
+++ b/libc/include/stdio.h
@@ -359,83 +359,6 @@
 #define	fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0)
 #endif /* __BSD_VISIBLE */
 
-/*
- * Functions internal to the implementation.
- */
-__BEGIN_DECLS
-int	__srget(FILE *);
-int	__swbuf(int, FILE *);
-__END_DECLS
-
-/*
- * The __sfoo macros are here so that we can
- * define function versions in the C library.
- */
-#define	__sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++))
-#if defined(__GNUC__)
-static __inline int __sputc(int _c, FILE *_p) {
-	if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
-		return (*_p->_p++ = _c);
-	else
-		return (__swbuf(_c, _p));
-}
-#else
-/*
- * This has been tuned to generate reasonable code on the vax using pcc.
- */
-#define	__sputc(c, p) \
-	(--(p)->_w < 0 ? \
-		(p)->_w >= (p)->_lbfsize ? \
-			(*(p)->_p = (c)), *(p)->_p != '\n' ? \
-				(int)*(p)->_p++ : \
-				__swbuf('\n', p) : \
-			__swbuf((int)(c), p) : \
-		(*(p)->_p = (c), (int)*(p)->_p++))
-#endif
-
-#define	__sfeof(p)	(((p)->_flags & __SEOF) != 0)
-#define	__sferror(p)	(((p)->_flags & __SERR) != 0)
-#define	__sclearerr(p)	((void)((p)->_flags &= ~(__SERR|__SEOF)))
-#define	__sfileno(p)	((p)->_file)
-
-extern	int __isthreaded;
-
-#define	feof(p)		(!__isthreaded ? __sfeof(p) : (feof)(p))
-#define	ferror(p)	(!__isthreaded ? __sferror(p) : (ferror)(p))
-#define	clearerr(p)	(!__isthreaded ? __sclearerr(p) : (clearerr)(p))
-
-#if __POSIX_VISIBLE
-#define	fileno(p)	(!__isthreaded ? __sfileno(p) : (fileno)(p))
-#endif
-
-#define	getc(fp)	(!__isthreaded ? __sgetc(fp) : (getc)(fp))
-
-#if __BSD_VISIBLE
-/*
- * The macro implementations of putc and putc_unlocked are not
- * fully POSIX compliant; they do not set errno on failure
- */
-#define putc(x, fp)	(!__isthreaded ? __sputc(x, fp) : (putc)(x, fp))
-#endif /* __BSD_VISIBLE */
-
-#ifndef lint
-#if __POSIX_VISIBLE >= 199506
-#define	getc_unlocked(fp)	__sgetc(fp)
-/*
- * The macro implementations of putc and putc_unlocked are not
- * fully POSIX compliant; they do not set errno on failure
- */
-#if __BSD_VISIBLE
-#define putc_unlocked(x, fp)	__sputc(x, fp)
-#endif /* __BSD_VISIBLE */
-#endif /* __POSIX_VISIBLE >= 199506 */
-#endif /* lint */
-
-#define	getchar()	getc(stdin)
-#define	putchar(x)	putc(x, stdout)
-#define	getchar_unlocked()	getc_unlocked(stdin)
-#define	putchar_unlocked(c)	putc_unlocked(c, stdout)
-
 #ifdef _GNU_SOURCE
 /*
  * glibc defines dprintf(int, const char*, ...), which is poorly named
diff --git a/libc/private/thread_private.h b/libc/private/thread_private.h
index b19ad09..f731181 100644
--- a/libc/private/thread_private.h
+++ b/libc/private/thread_private.h
@@ -15,11 +15,6 @@
  */
 
 /*
- * This variable is 0 until a second thread is created.
- */
-extern int __isthreaded;
-
-/*
  * helper macro to make unique names in the thread namespace
  */
 #define __THREAD_NAME(name)	__CONCAT(_thread_tagname_,name)
@@ -39,13 +34,7 @@
 void	_thread_atexit_lock(void);
 void	_thread_atexit_unlock(void);
 
-#define _ATEXIT_LOCK()		do {					\
-					if (__isthreaded)		\
-						_thread_atexit_lock();	\
-				} while (0)
-#define _ATEXIT_UNLOCK()	do {					\
-					if (__isthreaded)		\
-						_thread_atexit_unlock();\
-				} while (0)
+#define _ATEXIT_LOCK() _thread_atexit_lock()
+#define _ATEXIT_UNLOCK() _thread_atexit_unlock()
 
 #endif /* _THREAD_PRIVATE_H_ */
diff --git a/libc/stdio/local.h b/libc/stdio/local.h
index a175d6f..facaa66 100644
--- a/libc/stdio/local.h
+++ b/libc/stdio/local.h
@@ -91,7 +91,25 @@
 	(fp)->_lb._base = NULL; \
 }
 
-#define FLOCKFILE(fp)   do { if (__isthreaded) flockfile(fp); } while (0)
-#define FUNLOCKFILE(fp) do { if (__isthreaded) funlockfile(fp); } while (0)
+#define FLOCKFILE(fp)   flockfile(fp)
+#define FUNLOCKFILE(fp) funlockfile(fp)
 
 #define FLOATING_POINT
+
+/* OpenBSD exposes these in <stdio.h>, but we only want them exposed to the implementation. */
+__BEGIN_DECLS
+int __srget(FILE*);
+int __swbuf(int, FILE*);
+__END_DECLS
+#define __sfeof(p)     (((p)->_flags & __SEOF) != 0)
+#define __sferror(p)   (((p)->_flags & __SERR) != 0)
+#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
+#define __sfileno(p)   ((p)->_file)
+#define __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++))
+static __inline int __sputc(int _c, FILE* _p) {
+  if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n')) {
+    return (*_p->_p++ = _c);
+  } else {
+    return (__swbuf(_c, _p));
+  }
+}
diff --git a/libc/stdlib/strtod.c b/libc/stdlib/strtod.c
index 3934d9a..0a19446 100644
--- a/libc/stdlib/strtod.c
+++ b/libc/stdlib/strtod.c
@@ -91,12 +91,6 @@
  *	directly -- and assumed always to succeed.
  */
 
-#ifdef ANDROID_CHANGES
-#include <pthread.h>
-#define mutex_lock(x) pthread_mutex_lock(x)
-#define mutex_unlock(x) pthread_mutex_unlock(x)
-#endif
-
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
 __RCSID("$NetBSD: strtod.c,v 1.45.2.1 2005/04/19 13:35:54 tron Exp $");
@@ -151,18 +145,14 @@
 #ifndef KR_headers
 #include "stdlib.h"
 #include "string.h"
-#ifndef ANDROID_CHANGES
 #include "locale.h"
-#endif /* ANDROID_CHANGES */
 #else
 #include "malloc.h"
 #include "memory.h"
 #endif
 #endif
-#ifndef ANDROID_CHANGES
-#include "extern.h"
-#include "reentrant.h"
-#endif /* ANDROID_CHANGES */
+#include "../upstream-netbsd/extern.h" /* Android-changed. */
+#include "../upstream-netbsd/reentrant.h" /* Android-changed. */
 
 #ifdef MALLOC
 #ifdef KR_headers
@@ -370,13 +360,9 @@
 
  static Bigint *freelist[Kmax+1];
 
-#ifdef ANDROID_CHANGES
- static pthread_mutex_t freelist_mutex = PTHREAD_MUTEX_INITIALIZER;
-#else
 #ifdef _REENTRANT
  static mutex_t freelist_mutex = MUTEX_INITIALIZER;
 #endif
-#endif
 
 /* Special value used to indicate an invalid Bigint value,
  * e.g. when a memory allocation fails. The idea is that we
@@ -1346,16 +1332,14 @@
 	Bigint *bb1, *bd0;
 	Bigint *bb = NULL, *bd = NULL, *bs = NULL, *delta = NULL;/* pacify gcc */
 
-#ifdef ANDROID_CHANGES
 	CONST char decimal_point = '.';
-#else /* ANDROID_CHANGES */
+#if 0 /* BEGIN android-changed: no localeconv. */
 #ifndef KR_headers
 	CONST char decimal_point = localeconv()->decimal_point[0];
 #else
 	CONST char decimal_point = '.';
 #endif
-
-#endif /* ANDROID_CHANGES */
+#endif /* END android-changed */
 
 	sign = nz0 = nz = 0;
 	value(rv) = 0.;
diff --git a/libc/upstream-freebsd/libc_private.h b/libc/upstream-freebsd/libc_private.h
index ecdbb7e..c6a6433 100644
--- a/libc/upstream-freebsd/libc_private.h
+++ b/libc/upstream-freebsd/libc_private.h
@@ -17,9 +17,6 @@
 #ifndef _BIONIC_FREEBSD_LIBC_PRIVATE_H_included
 #define _BIONIC_FREEBSD_LIBC_PRIVATE_H_included
 
-#define FLOCKFILE(fp)   do { if (__isthreaded) flockfile(fp); } while (0)
-#define FUNLOCKFILE(fp) do { if (__isthreaded) funlockfile(fp); } while (0)
-
 #define STDIO_THREAD_LOCK()   /* TODO: until we have the FreeBSD findfp.c, this is useless. */
 #define STDIO_THREAD_UNLOCK() /* TODO: until we have the FreeBSD findfp.c, this is useless. */
 
diff --git a/libc/upstream-netbsd/reentrant.h b/libc/upstream-netbsd/reentrant.h
index e2945da..3ca8fd6 100644
--- a/libc/upstream-netbsd/reentrant.h
+++ b/libc/upstream-netbsd/reentrant.h
@@ -28,6 +28,8 @@
 
 #define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
 #define mutex_t pthread_mutex_t
+#define mutex_lock(x) pthread_mutex_lock(x)
+#define mutex_unlock(x) pthread_mutex_unlock(x)
 
 #define RWLOCK_INITIALIZER PTHREAD_RWLOCK_INITIALIZER
 #define rwlock_t pthread_rwlock_t
diff --git a/libc/upstream-freebsd/lib/libc/stdio/putw.c b/libc/upstream-openbsd/lib/libc/stdio/putw.c
similarity index 85%
rename from libc/upstream-freebsd/lib/libc/stdio/putw.c
rename to libc/upstream-openbsd/lib/libc/stdio/putw.c
index 0360caf..47941a4 100644
--- a/libc/upstream-freebsd/lib/libc/stdio/putw.c
+++ b/libc/upstream-openbsd/lib/libc/stdio/putw.c
@@ -1,3 +1,4 @@
+/*	$OpenBSD: putw.c,v 1.10 2009/11/21 09:53:44 guenther Exp $ */
 /*-
  * Copyright (c) 1990, 1993
  *	The Regents of the University of California.  All rights reserved.
@@ -30,31 +31,24 @@
  * SUCH DAMAGE.
  */
 
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)putw.c	8.1 (Berkeley) 6/4/93";
-#endif /* LIBC_SCCS and not lint */
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include "namespace.h"
 #include <stdio.h>
-#include "un-namespace.h"
+#include "local.h"
 #include "fvwrite.h"
-#include "libc_private.h"
 
 int
 putw(int w, FILE *fp)
 {
-	int retval;
 	struct __suio uio;
 	struct __siov iov;
+	int ret;
 
 	iov.iov_base = &w;
 	iov.iov_len = uio.uio_resid = sizeof(w);
 	uio.uio_iov = &iov;
 	uio.uio_iovcnt = 1;
 	FLOCKFILE(fp);
-	retval = __sfvwrite(fp, &uio);
+	_SET_ORIENTATION(fp, -1);
+	ret = __sfvwrite(fp, &uio);
 	FUNLOCKFILE(fp);
-	return (retval);
+	return (ret);
 }
