diff --git a/libc/bionic/locale.cpp b/libc/bionic/locale.cpp
index e20a1de..4fade84 100644
--- a/libc/bionic/locale.cpp
+++ b/libc/bionic/locale.cpp
@@ -30,45 +30,127 @@
 #include <pthread.h>
 #include <stdlib.h>
 
-static pthread_once_t locale_once = PTHREAD_ONCE_INIT;
-static lconv locale;
+// We currently support a single locale, the "C" locale (also known as "POSIX").
+
+struct __locale_t {
+  // Because we only support one locale, these are just tokens with no data.
+};
+
+static pthread_once_t gLocaleOnce = PTHREAD_ONCE_INIT;
+static lconv gLocale;
+
+static pthread_once_t gUselocaleKeyOnce = PTHREAD_ONCE_INIT;
+static pthread_key_t gUselocaleKey;
 
 static void __locale_init() {
-  locale.decimal_point = const_cast<char*>(".");
+  gLocale.decimal_point = const_cast<char*>(".");
 
   char* not_available = const_cast<char*>("");
-  locale.thousands_sep = not_available;
-  locale.grouping = not_available;
-  locale.int_curr_symbol = not_available;
-  locale.currency_symbol = not_available;
-  locale.mon_decimal_point = not_available;
-  locale.mon_thousands_sep = not_available;
-  locale.mon_grouping = not_available;
-  locale.positive_sign = not_available;
-  locale.negative_sign = not_available;
+  gLocale.thousands_sep = not_available;
+  gLocale.grouping = not_available;
+  gLocale.int_curr_symbol = not_available;
+  gLocale.currency_symbol = not_available;
+  gLocale.mon_decimal_point = not_available;
+  gLocale.mon_thousands_sep = not_available;
+  gLocale.mon_grouping = not_available;
+  gLocale.positive_sign = not_available;
+  gLocale.negative_sign = not_available;
 
-  locale.int_frac_digits = CHAR_MAX;
-  locale.frac_digits = CHAR_MAX;
-  locale.p_cs_precedes = CHAR_MAX;
-  locale.p_sep_by_space = CHAR_MAX;
-  locale.n_cs_precedes = CHAR_MAX;
-  locale.n_sep_by_space = CHAR_MAX;
-  locale.p_sign_posn = CHAR_MAX;
-  locale.n_sign_posn = CHAR_MAX;
-  locale.int_p_cs_precedes = CHAR_MAX;
-  locale.int_p_sep_by_space = CHAR_MAX;
-  locale.int_n_cs_precedes = CHAR_MAX;
-  locale.int_n_sep_by_space = CHAR_MAX;
-  locale.int_p_sign_posn = CHAR_MAX;
-  locale.int_n_sign_posn = CHAR_MAX;
+  gLocale.int_frac_digits = CHAR_MAX;
+  gLocale.frac_digits = CHAR_MAX;
+  gLocale.p_cs_precedes = CHAR_MAX;
+  gLocale.p_sep_by_space = CHAR_MAX;
+  gLocale.n_cs_precedes = CHAR_MAX;
+  gLocale.n_sep_by_space = CHAR_MAX;
+  gLocale.p_sign_posn = CHAR_MAX;
+  gLocale.n_sign_posn = CHAR_MAX;
+  gLocale.int_p_cs_precedes = CHAR_MAX;
+  gLocale.int_p_sep_by_space = CHAR_MAX;
+  gLocale.int_n_cs_precedes = CHAR_MAX;
+  gLocale.int_n_sep_by_space = CHAR_MAX;
+  gLocale.int_p_sign_posn = CHAR_MAX;
+  gLocale.int_n_sign_posn = CHAR_MAX;
+}
+
+static void __uselocale_key_init() {
+  pthread_key_create(&gUselocaleKey, NULL);
+}
+
+static bool __is_supported_locale(const char* locale) {
+  return (strcmp(locale, "") == 0 || strcmp(locale, "C") == 0 || strcmp(locale, "POSIX") == 0);
+}
+
+static locale_t __new_locale() {
+  return reinterpret_cast<locale_t>(malloc(sizeof(__locale_t)));
 }
 
 lconv* localeconv() {
-  pthread_once(&locale_once, __locale_init);
-  return &locale;
+  pthread_once(&gLocaleOnce, __locale_init);
+  return &gLocale;
 }
 
-// setlocale(3) always fails on bionic.
-char* setlocale(int /*category*/, char const* /*locale*/) {
+locale_t duplocale(locale_t l) {
+  locale_t clone = __new_locale();
+  if (clone != NULL && l != LC_GLOBAL_LOCALE) {
+    *clone = *l;
+  }
+  return clone;
+}
+
+void freelocale(locale_t l) {
+  free(l);
+}
+
+locale_t newlocale(int category_mask, const char* locale_name, locale_t /*base*/) {
+  // Is 'category_mask' valid?
+  if ((category_mask & ~LC_ALL_MASK) != 0) {
+    errno = EINVAL;
+    return NULL;
+  }
+
+  if (!__is_supported_locale(locale_name)) {
+    errno = ENOENT;
+    return NULL;
+  }
+
+  return __new_locale();
+}
+
+char* setlocale(int category, char const* locale_name) {
+  // Is 'category' valid?
+  if (category < LC_CTYPE || category > LC_IDENTIFICATION) {
+    errno = EINVAL;
+    return NULL;
+  }
+
+  // Caller just wants to query the current locale?
+  if (locale_name == NULL) {
+    return const_cast<char*>("C");
+  }
+
+  // Caller wants one of the mandatory POSIX locales?
+  if (__is_supported_locale(locale_name)) {
+    return const_cast<char*>("C");
+  }
+
+  // We don't support any other locales.
+  errno = ENOENT;
   return NULL;
 }
+
+locale_t uselocale(locale_t new_locale) {
+  pthread_once(&gUselocaleKeyOnce, __uselocale_key_init);
+
+  locale_t old_locale = static_cast<locale_t>(pthread_getspecific(gUselocaleKey));
+
+  // If this is the first call to uselocale(3) on this thread, we return LC_GLOBAL_LOCALE.
+  if (old_locale == NULL) {
+    old_locale = LC_GLOBAL_LOCALE;
+  }
+
+  if (new_locale != NULL) {
+    pthread_setspecific(gUselocaleKey, new_locale);
+  }
+
+  return old_locale;
+}
diff --git a/libc/include/locale.h b/libc/include/locale.h
index aa6b474..6989851 100644
--- a/libc/include/locale.h
+++ b/libc/include/locale.h
@@ -29,6 +29,7 @@
 #define _LOCALE_H_
 
 #include <sys/cdefs.h>
+#include <xlocale.h>
 
 __BEGIN_DECLS
 
@@ -43,12 +44,29 @@
     LC_PAPER     = 7,
     LC_NAME      = 8,
     LC_ADDRESS   = 9,
-
     LC_TELEPHONE      = 10,
     LC_MEASUREMENT    = 11,
     LC_IDENTIFICATION = 12
 };
 
+#define LC_CTYPE_MASK          (1 << LC_CTYPE)
+#define LC_NUMERIC_MASK        (1 << LC_NUMERIC)
+#define LC_TIME_MASK           (1 << LC_TIME)
+#define LC_COLLATE_MASK        (1 << LC_COLLATE)
+#define LC_MONETARY_MASK       (1 << LC_MONETARY)
+#define LC_MESSAGES_MASK       (1 << LC_MESSAGES)
+#define LC_PAPER_MASK          (1 << LC_PAPER)
+#define LC_NAME_MASK           (1 << LC_NAME)
+#define LC_ADDRESS_MASK        (1 << LC_ADDRESS)
+#define LC_TELEPHONE_MASK      (1 << LC_TELEPHONE)
+#define LC_MEASUREMENT_MASK    (1 << LC_MEASUREMENT)
+#define LC_IDENTIFICATION_MASK (1 << LC_IDENTIFICATION)
+
+#define LC_ALL_MASK (LC_CTYPE_MASK | LC_NUMERIC_MASK | LC_TIME_MASK | LC_COLLATE_MASK | \
+                     LC_MONETARY_MASK | LC_MESSAGES_MASK | LC_PAPER_MASK | LC_NAME_MASK | \
+                     LC_ADDRESS_MASK | LC_TELEPHONE_MASK | LC_MEASUREMENT_MASK | \
+                     LC_IDENTIFICATION_MASK)
+
 struct lconv {
     char* decimal_point;
     char* thousands_sep;
@@ -77,7 +95,14 @@
 };
 
 struct lconv* localeconv(void);
-extern char* setlocale(int, const char*);
+
+locale_t duplocale(locale_t);
+void freelocale(locale_t);
+locale_t newlocale(int, const char*, locale_t);
+char* setlocale(int, const char*);
+locale_t uselocale(locale_t);
+
+#define LC_GLOBAL_LOCALE ((locale_t) -1L)
 
 __END_DECLS
 
diff --git a/libc/include/xlocale.h b/libc/include/xlocale.h
new file mode 100644
index 0000000..f7eb8f4
--- /dev/null
+++ b/libc/include/xlocale.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * 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 COPYRIGHT HOLDERS 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
+ * COPYRIGHT OWNER 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.
+ */
+
+#ifndef _XLOCALE_H_
+#define _XLOCALE_H_
+
+/* If we just use void* here, GCC exposes that in error messages. */
+struct __locale_t;
+typedef struct __locale_t* locale_t;
+
+#endif /* _XLOCALE_H_ */
diff --git a/tests/locale_test.cpp b/tests/locale_test.cpp
index 87dd631..347b5b1 100644
--- a/tests/locale_test.cpp
+++ b/tests/locale_test.cpp
@@ -16,6 +16,7 @@
 
 #include <gtest/gtest.h>
 
+#include <errno.h>
 #include <limits.h>
 #include <locale.h>
 
@@ -45,3 +46,62 @@
   EXPECT_EQ(CHAR_MAX, localeconv()->int_p_sign_posn);
   EXPECT_EQ(CHAR_MAX, localeconv()->int_n_sign_posn);
 }
+
+TEST(locale, setlocale) {
+  EXPECT_STREQ("C", setlocale(LC_ALL, NULL));
+  EXPECT_STREQ("C", setlocale(LC_CTYPE, NULL));
+
+  errno = 0;
+  EXPECT_EQ(NULL, setlocale(-1, NULL));
+  EXPECT_EQ(EINVAL, errno);
+  errno = 0;
+  EXPECT_EQ(NULL, setlocale(13, NULL));
+  EXPECT_EQ(EINVAL, errno);
+
+#if __BIONIC__
+  // The "" locale is implementation-defined. For bionic, it's the C locale.
+  // glibc will give us something like "en_US.UTF-8", depending on the user's configuration.
+  EXPECT_STREQ("C", setlocale(LC_ALL, ""));
+#endif
+  EXPECT_STREQ("C", setlocale(LC_ALL, "C"));
+  EXPECT_STREQ("C", setlocale(LC_ALL, "POSIX"));
+
+  errno = 0;
+  EXPECT_EQ(NULL, setlocale(LC_ALL, "this-is-not-a-locale"));
+  EXPECT_EQ(ENOENT, errno); // POSIX specified, not an implementation detail!
+}
+
+TEST(locale, newlocale) {
+  errno = 0;
+  EXPECT_EQ(0, newlocale(1 << 20, "C", 0));
+  EXPECT_EQ(EINVAL, errno);
+
+  locale_t l = newlocale(LC_ALL, "C", 0);
+  ASSERT_TRUE(l != NULL);
+  freelocale(l);
+
+  errno = 0;
+  EXPECT_EQ(0, newlocale(LC_ALL, "this-is-not-a-locale", 0));
+  EXPECT_EQ(ENOENT, errno); // POSIX specified, not an implementation detail!
+}
+
+TEST(locale, duplocale) {
+  locale_t cloned_global = duplocale(LC_GLOBAL_LOCALE);
+  ASSERT_TRUE(cloned_global != NULL);
+  freelocale(cloned_global);
+}
+
+TEST(locale, uselocale) {
+  locale_t original = uselocale(NULL);
+  EXPECT_FALSE(original == 0);
+  EXPECT_EQ(LC_GLOBAL_LOCALE, original);
+
+  locale_t n = newlocale(LC_ALL, "C", 0);
+  EXPECT_FALSE(n == 0);
+  EXPECT_FALSE(n == original);
+
+  locale_t old = uselocale(n);
+  EXPECT_TRUE(old == original);
+
+  EXPECT_EQ(n, uselocale(NULL));
+}
