diff --git a/Makefile b/Makefile
index 10ae1e1f0..33b74720b 100644
--- a/Makefile
+++ b/Makefile
@@ -126,7 +126,6 @@ include libc/zipos/zipos.mk # ├──DYNAMIC RUNTIME
include third_party/gdtoa/gdtoa.mk # │ You can now use stdio
include libc/time/time.mk # │ You can finally call malloc()
include libc/thread/thread.mk # │
-include libc/alg/alg.mk # │
include libc/stdio/stdio.mk # │
include third_party/libcxx/libcxx.mk # │
include net/net.mk # │
@@ -191,7 +190,6 @@ include tool/hash/hash.mk
include tool/net/net.mk
include tool/viz/viz.mk
include tool/tool.mk
-include test/libc/alg/test.mk
include test/libc/tinymath/test.mk
include test/libc/intrin/test.mk
include test/libc/mem/test.mk
@@ -294,7 +292,6 @@ COSMOPOLITAN_OBJECTS = \
LIBC_STDIO \
THIRD_PARTY_GDTOA \
THIRD_PARTY_REGEX \
- LIBC_ALG \
LIBC_MEM \
THIRD_PARTY_DLMALLOC \
LIBC_RUNTIME \
@@ -324,7 +321,6 @@ COSMOPOLITAN_OBJECTS = \
COSMOPOLITAN_HEADERS = \
APE \
LIBC \
- LIBC_ALG \
LIBC_CALLS \
LIBC_DNS \
LIBC_ELF \
diff --git a/dsp/tty/sendtitle.c b/dsp/tty/sendtitle.c
index c8288f72e..520dac6ba 100644
--- a/dsp/tty/sendtitle.c
+++ b/dsp/tty/sendtitle.c
@@ -17,7 +17,7 @@
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
#include "dsp/tty/tty.h"
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/runtime/gc.internal.h"
#include "libc/x/x.h"
diff --git a/dsp/tty/tty.mk b/dsp/tty/tty.mk
index f25e21fa9..84f0a7333 100644
--- a/dsp/tty/tty.mk
+++ b/dsp/tty/tty.mk
@@ -25,7 +25,6 @@ DSP_TTY_A_CHECKS = \
DSP_TTY_A_DIRECTDEPS = \
DSP_CORE \
- LIBC_ALG \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
diff --git a/dsp/tty/ttyhisto.c b/dsp/tty/ttyhisto.c
index 7d4518be8..81330028d 100644
--- a/dsp/tty/ttyhisto.c
+++ b/dsp/tty/ttyhisto.c
@@ -18,7 +18,7 @@
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
#include "dsp/tty/tty.h"
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/nexgen32e/nexgen32e.h"
#include "libc/str/str.h"
diff --git a/examples/examples.mk b/examples/examples.mk
index 5fd3e899b..183a8c4ff 100644
--- a/examples/examples.mk
+++ b/examples/examples.mk
@@ -42,7 +42,6 @@ EXAMPLES_DIRECTDEPS = \
DSP_CORE \
DSP_SCALE \
DSP_TTY \
- LIBC_ALG \
LIBC_CALLS \
LIBC_DNS \
LIBC_FMT \
diff --git a/examples/ispell.c b/examples/ispell.c
index 80e9df235..9b45b1624 100644
--- a/examples/ispell.c
+++ b/examples/ispell.c
@@ -7,9 +7,9 @@
│ • http://creativecommons.org/publicdomain/zero/1.0/ │
╚─────────────────────────────────────────────────────────────────*/
#endif
-#include "libc/alg/alg.h"
-#include "libc/alg/arraylist.internal.h"
-#include "libc/alg/critbit0.h"
+#include "libc/mem/alg.h"
+#include "libc/mem/arraylist.internal.h"
+#include "libc/mem/critbit0.h"
#include "libc/intrin/bits.h"
#include "libc/calls/calls.h"
#include "libc/fmt/conv.h"
diff --git a/examples/kilo.c b/examples/kilo.c
index 99486d498..c6e4df37f 100644
--- a/examples/kilo.c
+++ b/examples/kilo.c
@@ -58,8 +58,8 @@ Contact: antirez@gmail.com\"\n\
#endif
#define _GNU_SOURCE
-#include "libc/alg/alg.h"
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/alg.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/calls/calls.h"
#include "libc/calls/termios.h"
#include "libc/calls/weirdtypes.h"
diff --git a/examples/lstime.c b/examples/lstime.c
index d8078fcc0..2a1119e84 100644
--- a/examples/lstime.c
+++ b/examples/lstime.c
@@ -7,8 +7,8 @@
│ • http://creativecommons.org/publicdomain/zero/1.0/ │
╚─────────────────────────────────────────────────────────────────*/
#endif
-#include "libc/alg/alg.h"
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/alg.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/intrin/safemacros.internal.h"
#include "libc/calls/calls.h"
#include "libc/calls/struct/dirent.h"
diff --git a/examples/nesemu1.cc b/examples/nesemu1.cc
index b73425cdd..31ff06279 100644
--- a/examples/nesemu1.cc
+++ b/examples/nesemu1.cc
@@ -10,7 +10,7 @@
#include "dsp/tty/itoa8.h"
#include "dsp/tty/quant.h"
#include "dsp/tty/tty.h"
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/assert.h"
#include "libc/intrin/bits.h"
#include "libc/intrin/safemacros.internal.h"
diff --git a/examples/unbourne.c b/examples/unbourne.c
index f84251abc..a9ba11d97 100644
--- a/examples/unbourne.c
+++ b/examples/unbourne.c
@@ -110,7 +110,7 @@
│ cosmopolitan § the unbourne shell » macros ─╬─│┼
╚────────────────────────────────────────────────────────────────────────────│*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/assert.h"
#include "libc/intrin/safemacros.internal.h"
#include "libc/calls/calls.h"
diff --git a/libc/alg/alg.h b/libc/alg/alg.h
old mode 100644
new mode 100755
index 2522ab53b..e69de29bb
--- a/libc/alg/alg.h
+++ b/libc/alg/alg.h
@@ -1,50 +0,0 @@
-#ifndef COSMOPOLITAN_LIBC_ALG_ALG_H_
-#define COSMOPOLITAN_LIBC_ALG_ALG_H_
-#if !(__ASSEMBLER__ + __LINKER__ + 0)
-COSMOPOLITAN_C_START_
-/*───────────────────────────────────────────────────────────────────────────│─╗
-│ cosmopolitan § algorithms ─╬─│┼
-╚────────────────────────────────────────────────────────────────────────────│*/
-
-void *bsearch(const void *, const void *, size_t, size_t,
- int cmp(const void *, const void *))
- paramsnonnull() dontthrow nosideeffect;
-void *bsearch_r(const void *, const void *, size_t, size_t,
- int cmp(const void *, const void *, void *), void *)
- paramsnonnull((1, 2, 5)) dontthrow nosideeffect;
-void djbsort(int32_t *, size_t);
-void qsort(void *, size_t, size_t, int (*)(const void *, const void *))
- paramsnonnull();
-void qsort_r(void *, size_t, size_t,
- int cmp(const void *, const void *, void *), void *arg)
- paramsnonnull((1, 4));
-int tarjan(int, const int (*)[2], int, int[], int[], int *)
- paramsnonnull((2, 4)) nocallback dontthrow;
-
-#define __algalloc returnspointerwithnoaliases dontthrow nocallback dontdiscard
-
-char *replacestr(const char *, const char *, const char *)
- paramsnonnull() __algalloc;
-char16_t *replacestr16(const char16_t *, const char16_t *, const char16_t *)
- paramsnonnull() __algalloc;
-wchar_t *replacewcs(const wchar_t *, const wchar_t *, const wchar_t *)
- paramsnonnull() __algalloc;
-
-char *concatstr(const char *, ...) nullterminated() paramsnonnull() __algalloc;
-char16_t *concatstr16(const char16_t *, ...) nullterminated()
- paramsnonnull() __algalloc;
-wchar_t *concatwcs(const wchar_t *, ...) nullterminated()
- paramsnonnull() __algalloc;
-
-int cmpsb(const void *, const void *);
-int cmpub(const void *, const void *);
-int cmpsw(const void *, const void *);
-int cmpuw(const void *, const void *);
-int cmpsl(const void *, const void *);
-int cmpul(const void *, const void *);
-int cmpsq(const void *, const void *);
-int cmpuq(const void *, const void *);
-
-COSMOPOLITAN_C_END_
-#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
-#endif /* COSMOPOLITAN_LIBC_ALG_ALG_H_ */
diff --git a/libc/alg/alg.mk b/libc/alg/alg.mk
deleted file mode 100644
index 6ed940acc..000000000
--- a/libc/alg/alg.mk
+++ /dev/null
@@ -1,61 +0,0 @@
-#-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐
-#───vi: set et ft=make ts=8 tw=8 fenc=utf-8 :vi───────────────────────┘
-
-PKGS += LIBC_ALG
-
-LIBC_ALG_ARTIFACTS += LIBC_ALG_A
-LIBC_ALG = $(LIBC_ALG_A_DEPS) $(LIBC_ALG_A)
-LIBC_ALG_A = o/$(MODE)/libc/alg/alg.a
-LIBC_ALG_A_FILES := $(wildcard libc/alg/*)
-LIBC_ALG_A_HDRS = $(filter %.h,$(LIBC_ALG_A_FILES))
-LIBC_ALG_A_INCS = $(filter %.inc,$(LIBC_ALG_A_FILES))
-LIBC_ALG_A_SRCS_S = $(filter %.S,$(LIBC_ALG_A_FILES))
-LIBC_ALG_A_SRCS_C = $(filter %.c,$(LIBC_ALG_A_FILES))
-
-LIBC_ALG_A_SRCS = \
- $(LIBC_ALG_A_SRCS_S) \
- $(LIBC_ALG_A_SRCS_C)
-
-LIBC_ALG_A_OBJS = \
- $(LIBC_ALG_A_SRCS_S:%.S=o/$(MODE)/%.o) \
- $(LIBC_ALG_A_SRCS_C:%.c=o/$(MODE)/%.o)
-
-LIBC_ALG_A_CHECKS = \
- $(LIBC_ALG_A).pkg \
- $(LIBC_ALG_A_HDRS:%=o/$(MODE)/%.ok)
-
-LIBC_ALG_A_DIRECTDEPS = \
- LIBC_MEM \
- LIBC_NEXGEN32E \
- LIBC_RUNTIME \
- LIBC_STR \
- LIBC_INTRIN \
- LIBC_STUBS \
- LIBC_SYSV
-
-LIBC_ALG_A_DEPS := \
- $(call uniq,$(foreach x,$(LIBC_ALG_A_DIRECTDEPS),$($(x))))
-
-$(LIBC_ALG_A): libc/alg/ \
- $(LIBC_ALG_A).pkg \
- $(LIBC_ALG_A_OBJS)
-
-$(LIBC_ALG_A).pkg: \
- $(LIBC_ALG_A_OBJS) \
- $(foreach x,$(LIBC_ALG_A_DIRECTDEPS),$($(x)_A).pkg)
-
-o/$(MODE)/libc/alg/critbit0.o: private \
- DEFAULT_CFLAGS += \
- -ffunction-sections \
- -fdata-sections
-
-LIBC_ALG_LIBS = $(foreach x,$(LIBC_ALG_ARTIFACTS),$($(x)))
-LIBC_ALG_SRCS = $(foreach x,$(LIBC_ALG_ARTIFACTS),$($(x)_SRCS))
-LIBC_ALG_HDRS = $(foreach x,$(LIBC_ALG_ARTIFACTS),$($(x)_HDRS))
-LIBC_ALG_INCS = $(foreach x,$(LIBC_ALG_ARTIFACTS),$($(x)_INCS))
-LIBC_ALG_CHECKS = $(foreach x,$(LIBC_ALG_ARTIFACTS),$($(x)_CHECKS))
-LIBC_ALG_OBJS = $(foreach x,$(LIBC_ALG_ARTIFACTS),$($(x)_OBJS))
-$(LIBC_ALG_OBJS): $(BUILD_FILES) libc/alg/alg.mk
-
-.PHONY: o/$(MODE)/libc/alg
-o/$(MODE)/libc/alg: $(LIBC_ALG_CHECKS)
diff --git a/libc/alg/arraylist.internal.h b/libc/alg/arraylist.internal.h
old mode 100644
new mode 100755
index d40da7684..e69de29bb
--- a/libc/alg/arraylist.internal.h
+++ b/libc/alg/arraylist.internal.h
@@ -1,31 +0,0 @@
-#ifndef COSMOPOLITAN_LIBC_ALG_ARRAYLIST_H_
-#define COSMOPOLITAN_LIBC_ALG_ARRAYLIST_H_
-#include "libc/intrin/bits.h"
-#include "libc/mem/mem.h"
-#include "libc/str/str.h"
-#if !(__ASSEMBLER__ + __LINKER__ + 0)
-
-/* TODO(jart): DELETE */
-
-#define append(ARRAYLIST, ITEM) concat((ARRAYLIST), (ITEM), 1)
-
-#ifndef concat
-#define concat(ARRAYLIST, ITEM, COUNT) \
- ({ \
- autotype(ARRAYLIST) List = (ARRAYLIST); \
- autotype(&List->p[0]) Item = (ITEM); \
- size_t SizE = sizeof(*Item); \
- size_t Count = (COUNT); \
- size_t Idx = List->i; \
- if (Idx + Count < List->n || __grow(&List->p, &List->n, SizE, Count)) { \
- memcpy(&List->p[Idx], Item, SizE *Count); \
- List->i = Idx + Count; \
- } else { \
- Idx = -1UL; \
- } \
- (ssize_t)(Idx); \
- })
-#endif /* concat */
-
-#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
-#endif /* COSMOPOLITAN_LIBC_ALG_ARRAYLIST_H_ */
diff --git a/libc/alg/arraylist2.internal.h b/libc/alg/arraylist2.internal.h
old mode 100644
new mode 100755
index e86d3a402..e69de29bb
--- a/libc/alg/arraylist2.internal.h
+++ b/libc/alg/arraylist2.internal.h
@@ -1,39 +0,0 @@
-#ifndef COSMOPOLITAN_LIBC_ALG_ARRAYLIST2_H_
-#define COSMOPOLITAN_LIBC_ALG_ARRAYLIST2_H_
-#include "libc/mem/mem.h"
-#include "libc/str/str.h"
-#if !(__ASSEMBLER__ + __LINKER__ + 0)
-COSMOPOLITAN_C_START_
-
-/* TODO(jart): Fully develop these better macros. */
-
-#define APPEND(LIST_P, LIST_I, LIST_N, ITEM) \
- CONCAT(LIST_P, LIST_I, LIST_N, ITEM, 1)
-
-#ifndef CONCAT
-#define CONCAT(LIST_P, LIST_I, LIST_N, ITEM, COUNT) \
- ({ \
- autotype(LIST_P) ListP = (LIST_P); \
- autotype(LIST_I) ListI = (LIST_I); \
- autotype(LIST_N) ListN = (LIST_N); \
- typeof(&(*ListP)[0]) Item = (ITEM); \
- size_t SizE = sizeof(*Item); \
- size_t Count = (COUNT); \
- ssize_t Entry = -1; \
- /* NOTE: We use `<` to guarantee one additional slot */ \
- /* grow() will memset(0) extended memory, thus */ \
- /* you get a nul-terminator for free sometimes */ \
- /* the exception is if you list.i=0 and re-use */ \
- /* so you need concat(...); list.p[list.i++]=0 */ \
- if (*ListI + Count < *ListN || __grow(ListP, ListN, SizE, Count)) { \
- memcpy(&(*ListP)[*ListI], Item, (SizE) * (Count)); \
- Entry = *ListI; \
- *ListI += Count; /* happens after copy in case signal */ \
- } \
- Entry; \
- })
-#endif /* CONCAT */
-
-COSMOPOLITAN_C_END_
-#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
-#endif /* COSMOPOLITAN_LIBC_ALG_ARRAYLIST2_H_ */
diff --git a/libc/alg/internal.h b/libc/alg/internal.h
deleted file mode 100644
index 6a3bab985..000000000
--- a/libc/alg/internal.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef COSMOPOLITAN_LIBC_ALG_INTERNAL_H_
-#define COSMOPOLITAN_LIBC_ALG_INTERNAL_H_
-#if !(__ASSEMBLER__ + __LINKER__ + 0)
-COSMOPOLITAN_C_START_
-
-struct CritbitNode {
- void *child[2];
- uint32_t byte;
- unsigned otherbits;
-};
-
-COSMOPOLITAN_C_END_
-#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
-#endif /* COSMOPOLITAN_LIBC_ALG_INTERNAL_H_ */
diff --git a/libc/bits/asmflag.h b/libc/bits/asmflag.h
deleted file mode 100755
index e69de29bb..000000000
diff --git a/libc/bits/bits.h b/libc/bits/bits.h
deleted file mode 100755
index e69de29bb..000000000
diff --git a/libc/bits/bits.mk b/libc/bits/bits.mk
deleted file mode 100755
index e69de29bb..000000000
diff --git a/libc/bits/bswap.h b/libc/bits/bswap.h
deleted file mode 100755
index e69de29bb..000000000
diff --git a/libc/bits/likely.h b/libc/bits/likely.h
deleted file mode 100755
index e69de29bb..000000000
diff --git a/libc/bits/midpoint.h b/libc/bits/midpoint.h
deleted file mode 100755
index e69de29bb..000000000
diff --git a/libc/bits/safemacros.internal.h b/libc/bits/safemacros.internal.h
deleted file mode 100755
index e69de29bb..000000000
diff --git a/libc/bits/weaken.h b/libc/bits/weaken.h
deleted file mode 100755
index e69de29bb..000000000
diff --git a/libc/bits/xchg.internal.h b/libc/bits/xchg.internal.h
deleted file mode 100755
index e69de29bb..000000000
diff --git a/libc/calls/mkntenvblock.c b/libc/calls/mkntenvblock.c
index e30fa7a2e..0b740ce18 100644
--- a/libc/calls/mkntenvblock.c
+++ b/libc/calls/mkntenvblock.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/intrin/bits.h"
#include "libc/calls/ntspawn.h"
#include "libc/fmt/conv.h"
diff --git a/libc/dns/dns.mk b/libc/dns/dns.mk
index 7f2e1e94a..2adacf41b 100644
--- a/libc/dns/dns.mk
+++ b/libc/dns/dns.mk
@@ -24,7 +24,6 @@ LIBC_DNS_A_CHECKS = \
$(LIBC_DNS_A_HDRS:%=o/$(MODE)/%.ok)
LIBC_DNS_A_DIRECTDEPS = \
- LIBC_ALG \
LIBC_CALLS \
LIBC_FMT \
LIBC_MEM \
diff --git a/libc/dns/getntnameservers.c b/libc/dns/getntnameservers.c
index b906cd7a8..37c44ee23 100644
--- a/libc/dns/getntnameservers.c
+++ b/libc/dns/getntnameservers.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/arraylist.internal.h"
+#include "libc/mem/arraylist.internal.h"
#include "libc/calls/calls.h"
#include "libc/calls/syscall_support-nt.internal.h"
#include "libc/dns/dns.h"
diff --git a/libc/dns/parsehoststxt.c b/libc/dns/parsehoststxt.c
index e5a46d1d4..a7ca33d54 100644
--- a/libc/dns/parsehoststxt.c
+++ b/libc/dns/parsehoststxt.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/arraylist.internal.h"
+#include "libc/mem/arraylist.internal.h"
#include "libc/dns/dns.h"
#include "libc/dns/hoststxt.h"
#include "libc/errno.h"
diff --git a/libc/dns/parseresolvconf.c b/libc/dns/parseresolvconf.c
index b5159998c..6c14c9243 100644
--- a/libc/dns/parseresolvconf.c
+++ b/libc/dns/parseresolvconf.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/arraylist.internal.h"
+#include "libc/mem/arraylist.internal.h"
#include "libc/dns/dns.h"
#include "libc/dns/resolvconf.h"
#include "libc/mem/mem.h"
diff --git a/libc/dns/resolvehostsreverse.c b/libc/dns/resolvehostsreverse.c
index 32fa0fcc4..5b2976681 100644
--- a/libc/dns/resolvehostsreverse.c
+++ b/libc/dns/resolvehostsreverse.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/intrin/bits.h"
#include "libc/dns/consts.h"
#include "libc/dns/dns.h"
diff --git a/libc/dns/resolvehoststxt.c b/libc/dns/resolvehoststxt.c
index c07245581..8e5cd0945 100644
--- a/libc/dns/resolvehoststxt.c
+++ b/libc/dns/resolvehoststxt.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/dns/consts.h"
#include "libc/dns/dns.h"
#include "libc/dns/hoststxt.h"
diff --git a/libc/fmt/itoa128radix10.greg.c b/libc/fmt/itoa128radix10.greg.c
index 57f76f584..eacb6e86f 100644
--- a/libc/fmt/itoa128radix10.greg.c
+++ b/libc/fmt/itoa128radix10.greg.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/reverse.internal.h"
+#include "libc/mem/reverse.internal.h"
#include "libc/fmt/conv.h"
#include "libc/fmt/itoa.h"
#include "libc/limits.h"
diff --git a/libc/fmt/itoa64.c b/libc/fmt/itoa64.c
index 3d3b82f81..be0cfb497 100644
--- a/libc/fmt/itoa64.c
+++ b/libc/fmt/itoa64.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/reverse.internal.h"
+#include "libc/mem/reverse.internal.h"
#include "libc/fmt/conv.h"
#include "libc/fmt/itoa.h"
diff --git a/libc/fmt/itoa64radix8.c b/libc/fmt/itoa64radix8.c
index 5f7035623..449c67c72 100644
--- a/libc/fmt/itoa64radix8.c
+++ b/libc/fmt/itoa64radix8.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/reverse.internal.h"
+#include "libc/mem/reverse.internal.h"
#include "libc/fmt/conv.h"
#include "libc/fmt/itoa.h"
#include "libc/limits.h"
diff --git a/libc/fmt/ntoa.c b/libc/fmt/ntoa.c
index c3d838e53..87f6fe3e1 100644
--- a/libc/fmt/ntoa.c
+++ b/libc/fmt/ntoa.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/reverse.internal.h"
+#include "libc/mem/reverse.internal.h"
#include "libc/assert.h"
#include "libc/fmt/conv.h"
#include "libc/fmt/divmod10.internal.h"
diff --git a/libc/fmt/unbing.c b/libc/fmt/unbing.c
index 1f586ea58..c2f6ed86c 100644
--- a/libc/fmt/unbing.c
+++ b/libc/fmt/unbing.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/macros.internal.h"
#include "libc/nexgen32e/nexgen32e.h"
#include "libc/str/str.h"
diff --git a/libc/intrin/asan.c b/libc/intrin/asan.c
index 7801e69cd..2420169ca 100644
--- a/libc/intrin/asan.c
+++ b/libc/intrin/asan.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/reverse.internal.h"
+#include "libc/mem/reverse.internal.h"
#include "libc/assert.h"
#include "libc/intrin/likely.h"
#include "libc/intrin/weaken.h"
diff --git a/libc/intrin/ubsan.c b/libc/intrin/ubsan.c
index 644dcb9ce..c67c87d8a 100644
--- a/libc/intrin/ubsan.c
+++ b/libc/intrin/ubsan.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/reverse.internal.h"
+#include "libc/mem/reverse.internal.h"
#include "libc/intrin/pushpop.h"
#include "libc/intrin/weaken.h"
#include "libc/calls/calls.h"
diff --git a/libc/isystem/memory.h b/libc/isystem/memory.h
index f639c4efb..1de49e5a4 100644
--- a/libc/isystem/memory.h
+++ b/libc/isystem/memory.h
@@ -1,5 +1,5 @@
#ifndef COSMOPOLITAN_LIBC_ISYSTEM_MEMORY_H_
#define COSMOPOLITAN_LIBC_ISYSTEM_MEMORY_H_
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/str/str.h"
#endif /* COSMOPOLITAN_LIBC_ISYSTEM_MEMORY_H_ */
diff --git a/libc/isystem/stdlib.h b/libc/isystem/stdlib.h
index 82ff1fa1c..f3a130fff 100644
--- a/libc/isystem/stdlib.h
+++ b/libc/isystem/stdlib.h
@@ -1,6 +1,6 @@
#ifndef LIBC_ISYSTEM_STDLIB_H_
#define LIBC_ISYSTEM_STDLIB_H_
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/fmt/conv.h"
#include "libc/mem/mem.h"
#include "libc/stdio/rand.h"
diff --git a/libc/isystem/string.h b/libc/isystem/string.h
index c647b510a..39dc7c33a 100644
--- a/libc/isystem/string.h
+++ b/libc/isystem/string.h
@@ -1,5 +1,5 @@
#ifndef LIBC_ISYSTEM_STRING_H_
#define LIBC_ISYSTEM_STRING_H_
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/str/str.h"
#endif
diff --git a/libc/libc.mk b/libc/libc.mk
index 39007286c..d17a5471e 100644
--- a/libc/libc.mk
+++ b/libc/libc.mk
@@ -9,9 +9,7 @@ LIBC_FILES := $(wildcard libc/*) $(wildcard libc/isystem/*)
LIBC_CHECKS = $(LIBC_HDRS:%=o/$(MODE)/%.ok)
.PHONY: o/$(MODE)/libc
-o/$(MODE)/libc: o/$(MODE)/libc/alg \
- o/$(MODE)/libc/bits \
- o/$(MODE)/libc/calls \
+o/$(MODE)/libc: o/$(MODE)/libc/calls \
o/$(MODE)/libc/crt \
o/$(MODE)/libc/dns \
o/$(MODE)/libc/elf \
@@ -22,7 +20,6 @@ o/$(MODE)/libc: o/$(MODE)/libc/alg \
o/$(MODE)/libc/mem \
o/$(MODE)/libc/nexgen32e \
o/$(MODE)/libc/nt \
- o/$(MODE)/libc/rand \
o/$(MODE)/libc/runtime \
o/$(MODE)/libc/sock \
o/$(MODE)/libc/stdio \
diff --git a/libc/log/backtrace2.c b/libc/log/backtrace2.c
index 383b913af..7cae490de 100644
--- a/libc/log/backtrace2.c
+++ b/libc/log/backtrace2.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
-#include "libc/alg/bisectcarleft.internal.h"
+#include "libc/mem/alg.h"
+#include "libc/mem/bisectcarleft.internal.h"
#include "libc/intrin/safemacros.internal.h"
#include "libc/intrin/weaken.h"
#include "libc/calls/calls.h"
diff --git a/libc/log/backtrace3.c b/libc/log/backtrace3.c
index 9b6359efb..2d22fd022 100644
--- a/libc/log/backtrace3.c
+++ b/libc/log/backtrace3.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/bisectcarleft.internal.h"
+#include "libc/mem/bisectcarleft.internal.h"
#include "libc/assert.h"
#include "libc/intrin/weaken.h"
#include "libc/calls/calls.h"
diff --git a/libc/log/countbranch_report.c b/libc/log/countbranch_report.c
index 902b6b4bc..4ceab253d 100644
--- a/libc/log/countbranch_report.c
+++ b/libc/log/countbranch_report.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/calls/calls.h"
#include "libc/intrin/kprintf.h"
#include "libc/log/countbranch.h"
diff --git a/libc/log/countexpr_report.c b/libc/log/countexpr_report.c
index f3ffbec0b..96d07ff94 100644
--- a/libc/log/countexpr_report.c
+++ b/libc/log/countexpr_report.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/assert.h"
#include "libc/calls/calls.h"
#include "libc/intrin/kprintf.h"
diff --git a/libc/mem/alg.h b/libc/mem/alg.h
new file mode 100644
index 000000000..2522ab53b
--- /dev/null
+++ b/libc/mem/alg.h
@@ -0,0 +1,50 @@
+#ifndef COSMOPOLITAN_LIBC_ALG_ALG_H_
+#define COSMOPOLITAN_LIBC_ALG_ALG_H_
+#if !(__ASSEMBLER__ + __LINKER__ + 0)
+COSMOPOLITAN_C_START_
+/*───────────────────────────────────────────────────────────────────────────│─╗
+│ cosmopolitan § algorithms ─╬─│┼
+╚────────────────────────────────────────────────────────────────────────────│*/
+
+void *bsearch(const void *, const void *, size_t, size_t,
+ int cmp(const void *, const void *))
+ paramsnonnull() dontthrow nosideeffect;
+void *bsearch_r(const void *, const void *, size_t, size_t,
+ int cmp(const void *, const void *, void *), void *)
+ paramsnonnull((1, 2, 5)) dontthrow nosideeffect;
+void djbsort(int32_t *, size_t);
+void qsort(void *, size_t, size_t, int (*)(const void *, const void *))
+ paramsnonnull();
+void qsort_r(void *, size_t, size_t,
+ int cmp(const void *, const void *, void *), void *arg)
+ paramsnonnull((1, 4));
+int tarjan(int, const int (*)[2], int, int[], int[], int *)
+ paramsnonnull((2, 4)) nocallback dontthrow;
+
+#define __algalloc returnspointerwithnoaliases dontthrow nocallback dontdiscard
+
+char *replacestr(const char *, const char *, const char *)
+ paramsnonnull() __algalloc;
+char16_t *replacestr16(const char16_t *, const char16_t *, const char16_t *)
+ paramsnonnull() __algalloc;
+wchar_t *replacewcs(const wchar_t *, const wchar_t *, const wchar_t *)
+ paramsnonnull() __algalloc;
+
+char *concatstr(const char *, ...) nullterminated() paramsnonnull() __algalloc;
+char16_t *concatstr16(const char16_t *, ...) nullterminated()
+ paramsnonnull() __algalloc;
+wchar_t *concatwcs(const wchar_t *, ...) nullterminated()
+ paramsnonnull() __algalloc;
+
+int cmpsb(const void *, const void *);
+int cmpub(const void *, const void *);
+int cmpsw(const void *, const void *);
+int cmpuw(const void *, const void *);
+int cmpsl(const void *, const void *);
+int cmpul(const void *, const void *);
+int cmpsq(const void *, const void *);
+int cmpuq(const void *, const void *);
+
+COSMOPOLITAN_C_END_
+#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
+#endif /* COSMOPOLITAN_LIBC_ALG_ALG_H_ */
diff --git a/libc/mem/arraylist.internal.h b/libc/mem/arraylist.internal.h
new file mode 100644
index 000000000..d40da7684
--- /dev/null
+++ b/libc/mem/arraylist.internal.h
@@ -0,0 +1,31 @@
+#ifndef COSMOPOLITAN_LIBC_ALG_ARRAYLIST_H_
+#define COSMOPOLITAN_LIBC_ALG_ARRAYLIST_H_
+#include "libc/intrin/bits.h"
+#include "libc/mem/mem.h"
+#include "libc/str/str.h"
+#if !(__ASSEMBLER__ + __LINKER__ + 0)
+
+/* TODO(jart): DELETE */
+
+#define append(ARRAYLIST, ITEM) concat((ARRAYLIST), (ITEM), 1)
+
+#ifndef concat
+#define concat(ARRAYLIST, ITEM, COUNT) \
+ ({ \
+ autotype(ARRAYLIST) List = (ARRAYLIST); \
+ autotype(&List->p[0]) Item = (ITEM); \
+ size_t SizE = sizeof(*Item); \
+ size_t Count = (COUNT); \
+ size_t Idx = List->i; \
+ if (Idx + Count < List->n || __grow(&List->p, &List->n, SizE, Count)) { \
+ memcpy(&List->p[Idx], Item, SizE *Count); \
+ List->i = Idx + Count; \
+ } else { \
+ Idx = -1UL; \
+ } \
+ (ssize_t)(Idx); \
+ })
+#endif /* concat */
+
+#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
+#endif /* COSMOPOLITAN_LIBC_ALG_ARRAYLIST_H_ */
diff --git a/libc/mem/arraylist2.internal.h b/libc/mem/arraylist2.internal.h
new file mode 100644
index 000000000..e86d3a402
--- /dev/null
+++ b/libc/mem/arraylist2.internal.h
@@ -0,0 +1,39 @@
+#ifndef COSMOPOLITAN_LIBC_ALG_ARRAYLIST2_H_
+#define COSMOPOLITAN_LIBC_ALG_ARRAYLIST2_H_
+#include "libc/mem/mem.h"
+#include "libc/str/str.h"
+#if !(__ASSEMBLER__ + __LINKER__ + 0)
+COSMOPOLITAN_C_START_
+
+/* TODO(jart): Fully develop these better macros. */
+
+#define APPEND(LIST_P, LIST_I, LIST_N, ITEM) \
+ CONCAT(LIST_P, LIST_I, LIST_N, ITEM, 1)
+
+#ifndef CONCAT
+#define CONCAT(LIST_P, LIST_I, LIST_N, ITEM, COUNT) \
+ ({ \
+ autotype(LIST_P) ListP = (LIST_P); \
+ autotype(LIST_I) ListI = (LIST_I); \
+ autotype(LIST_N) ListN = (LIST_N); \
+ typeof(&(*ListP)[0]) Item = (ITEM); \
+ size_t SizE = sizeof(*Item); \
+ size_t Count = (COUNT); \
+ ssize_t Entry = -1; \
+ /* NOTE: We use `<` to guarantee one additional slot */ \
+ /* grow() will memset(0) extended memory, thus */ \
+ /* you get a nul-terminator for free sometimes */ \
+ /* the exception is if you list.i=0 and re-use */ \
+ /* so you need concat(...); list.p[list.i++]=0 */ \
+ if (*ListI + Count < *ListN || __grow(ListP, ListN, SizE, Count)) { \
+ memcpy(&(*ListP)[*ListI], Item, (SizE) * (Count)); \
+ Entry = *ListI; \
+ *ListI += Count; /* happens after copy in case signal */ \
+ } \
+ Entry; \
+ })
+#endif /* CONCAT */
+
+COSMOPOLITAN_C_END_
+#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
+#endif /* COSMOPOLITAN_LIBC_ALG_ARRAYLIST2_H_ */
diff --git a/libc/alg/bisect.internal.h b/libc/mem/bisect.internal.h
similarity index 100%
rename from libc/alg/bisect.internal.h
rename to libc/mem/bisect.internal.h
diff --git a/libc/alg/bisectcarleft.internal.h b/libc/mem/bisectcarleft.internal.h
similarity index 100%
rename from libc/alg/bisectcarleft.internal.h
rename to libc/mem/bisectcarleft.internal.h
diff --git a/libc/alg/bsearch.c b/libc/mem/bsearch.c
similarity index 97%
rename from libc/alg/bsearch.c
rename to libc/mem/bsearch.c
index 3fa99ed74..0075d20a3 100644
--- a/libc/alg/bsearch.c
+++ b/libc/mem/bsearch.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
-#include "libc/alg/bisect.internal.h"
+#include "libc/mem/alg.h"
+#include "libc/mem/bisect.internal.h"
/**
* Searches sorted array for exact item in logarithmic time.
diff --git a/libc/alg/bsearch_r.c b/libc/mem/bsearch_r.c
similarity index 97%
rename from libc/alg/bsearch_r.c
rename to libc/mem/bsearch_r.c
index c3d28d60e..b0e8e64d7 100644
--- a/libc/alg/bsearch_r.c
+++ b/libc/mem/bsearch_r.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
-#include "libc/alg/bisect.internal.h"
+#include "libc/mem/alg.h"
+#include "libc/mem/bisect.internal.h"
/**
* Searches sorted array for exact item in logarithmic time.
diff --git a/libc/alg/critbit0.h b/libc/mem/critbit0.h
similarity index 100%
rename from libc/alg/critbit0.h
rename to libc/mem/critbit0.h
diff --git a/libc/alg/critbit0_allprefixed.c b/libc/mem/critbit0_allprefixed.c
similarity index 98%
rename from libc/alg/critbit0_allprefixed.c
rename to libc/mem/critbit0_allprefixed.c
index d8396fdc1..6a22ae30e 100644
--- a/libc/alg/critbit0_allprefixed.c
+++ b/libc/mem/critbit0_allprefixed.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/critbit0.h"
-#include "libc/alg/internal.h"
+#include "libc/mem/critbit0.h"
+#include "libc/mem/internal.h"
#include "libc/str/str.h"
static intptr_t allprefixed_traverse(unsigned char *top,
diff --git a/libc/alg/critbit0_clear.c b/libc/mem/critbit0_clear.c
similarity index 97%
rename from libc/alg/critbit0_clear.c
rename to libc/mem/critbit0_clear.c
index 0482547cd..714dbe8ad 100644
--- a/libc/alg/critbit0_clear.c
+++ b/libc/mem/critbit0_clear.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/critbit0.h"
-#include "libc/alg/internal.h"
+#include "libc/mem/critbit0.h"
+#include "libc/mem/internal.h"
#include "libc/mem/mem.h"
static void critbit0_clear_traverse(void *top) {
diff --git a/libc/alg/critbit0_contains.c b/libc/mem/critbit0_contains.c
similarity index 97%
rename from libc/alg/critbit0_contains.c
rename to libc/mem/critbit0_contains.c
index 9a95311e4..3b05af53b 100644
--- a/libc/alg/critbit0_contains.c
+++ b/libc/mem/critbit0_contains.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/critbit0.h"
-#include "libc/alg/internal.h"
+#include "libc/mem/critbit0.h"
+#include "libc/mem/internal.h"
#include "libc/str/str.h"
/**
diff --git a/libc/alg/critbit0_delete.c b/libc/mem/critbit0_delete.c
similarity index 97%
rename from libc/alg/critbit0_delete.c
rename to libc/mem/critbit0_delete.c
index 868016db9..d83cf4321 100644
--- a/libc/alg/critbit0_delete.c
+++ b/libc/mem/critbit0_delete.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/critbit0.h"
-#include "libc/alg/internal.h"
+#include "libc/mem/critbit0.h"
+#include "libc/mem/internal.h"
#include "libc/mem/mem.h"
#include "libc/str/str.h"
diff --git a/libc/alg/critbit0_emplace.c b/libc/mem/critbit0_emplace.c
similarity index 98%
rename from libc/alg/critbit0_emplace.c
rename to libc/mem/critbit0_emplace.c
index b010df590..6c1badd7b 100644
--- a/libc/alg/critbit0_emplace.c
+++ b/libc/mem/critbit0_emplace.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/critbit0.h"
-#include "libc/alg/internal.h"
+#include "libc/mem/critbit0.h"
+#include "libc/mem/internal.h"
#include "libc/mem/mem.h"
#include "libc/str/str.h"
diff --git a/libc/alg/critbit0_get.c b/libc/mem/critbit0_get.c
similarity index 97%
rename from libc/alg/critbit0_get.c
rename to libc/mem/critbit0_get.c
index a395b2e4e..ffb639369 100644
--- a/libc/alg/critbit0_get.c
+++ b/libc/mem/critbit0_get.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/critbit0.h"
-#include "libc/alg/internal.h"
+#include "libc/mem/critbit0.h"
+#include "libc/mem/internal.h"
#include "libc/str/str.h"
/**
diff --git a/libc/alg/critbit0_insert.c b/libc/mem/critbit0_insert.c
similarity index 97%
rename from libc/alg/critbit0_insert.c
rename to libc/mem/critbit0_insert.c
index 0b5cc1904..e65c3ba23 100644
--- a/libc/alg/critbit0_insert.c
+++ b/libc/mem/critbit0_insert.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/critbit0.h"
-#include "libc/alg/internal.h"
+#include "libc/mem/critbit0.h"
+#include "libc/mem/internal.h"
#include "libc/mem/mem.h"
#include "libc/str/str.h"
diff --git a/libc/mem/internal.h b/libc/mem/internal.h
index c6fb3ad3b..d3517779d 100644
--- a/libc/mem/internal.h
+++ b/libc/mem/internal.h
@@ -3,6 +3,12 @@
#if !(__ASSEMBLER__ + __LINKER__ + 0)
COSMOPOLITAN_C_START_
+struct CritbitNode {
+ void *child[2];
+ uint32_t byte;
+ unsigned otherbits;
+};
+
int PutEnvImpl(char *, bool) hidden;
void __freeenv(void *) hidden;
diff --git a/libc/mem/putenv.c b/libc/mem/putenv.c
index be407b1b9..4b10da970 100644
--- a/libc/mem/putenv.c
+++ b/libc/mem/putenv.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/calls/strace.internal.h"
#include "libc/dce.h"
#include "libc/macros.internal.h"
diff --git a/libc/alg/replacestr.c b/libc/mem/replacestr.c
similarity index 97%
rename from libc/alg/replacestr.c
rename to libc/mem/replacestr.c
index abad4dfb8..6a9881cb1 100644
--- a/libc/alg/replacestr.c
+++ b/libc/mem/replacestr.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/alg.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/intrin/safemacros.internal.h"
#include "libc/macros.internal.h"
#include "libc/str/str.h"
diff --git a/libc/alg/reverse.internal.h b/libc/mem/reverse.internal.h
similarity index 100%
rename from libc/alg/reverse.internal.h
rename to libc/mem/reverse.internal.h
diff --git a/libc/alg/shuffle.internal.h b/libc/mem/shuffle.internal.h
similarity index 100%
rename from libc/alg/shuffle.internal.h
rename to libc/mem/shuffle.internal.h
diff --git a/libc/alg/tarjan.c b/libc/mem/tarjan.c
similarity index 99%
rename from libc/alg/tarjan.c
rename to libc/mem/tarjan.c
index d7109e1de..9d27ed213 100644
--- a/libc/alg/tarjan.c
+++ b/libc/mem/tarjan.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/assert.h"
#include "libc/limits.h"
#include "libc/macros.internal.h"
diff --git a/libc/rand/rand.mk b/libc/rand/rand.mk
deleted file mode 100755
index e69de29bb..000000000
diff --git a/libc/runtime/opensymboltable.greg.c b/libc/runtime/opensymboltable.greg.c
index ed0aa0901..0ab75a744 100644
--- a/libc/runtime/opensymboltable.greg.c
+++ b/libc/runtime/opensymboltable.greg.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/assert.h"
#include "libc/intrin/bits.h"
#include "libc/calls/calls.h"
diff --git a/libc/stdio/fflush_unlocked.c b/libc/stdio/fflush_unlocked.c
index a24f3dbf4..e98fb6b41 100644
--- a/libc/stdio/fflush_unlocked.c
+++ b/libc/stdio/fflush_unlocked.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/arraylist.internal.h"
+#include "libc/mem/arraylist.internal.h"
#include "libc/intrin/bits.h"
#include "libc/intrin/pushpop.h"
#include "libc/calls/calls.h"
diff --git a/libc/stdio/strfry.c b/libc/stdio/strfry.c
index a91b30df2..048a67ef2 100644
--- a/libc/stdio/strfry.c
+++ b/libc/stdio/strfry.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/shuffle.internal.h"
+#include "libc/mem/shuffle.internal.h"
#include "libc/stdio/rand.h"
#include "libc/str/str.h"
diff --git a/libc/str/djbsort.c b/libc/str/djbsort.c
index 477097ec7..35ea38260 100644
--- a/libc/str/djbsort.c
+++ b/libc/str/djbsort.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/dce.h"
#include "libc/intrin/asan.internal.h"
#include "libc/nexgen32e/bsr.h"
diff --git a/libc/str/getx86processormodel.c b/libc/str/getx86processormodel.c
index 568e70776..45407aef6 100644
--- a/libc/str/getx86processormodel.c
+++ b/libc/str/getx86processormodel.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/bisect.internal.h"
+#include "libc/mem/bisect.internal.h"
#include "libc/nexgen32e/x86info.h"
static int CmpX86ProcModelKey(const struct X86ProcessorModel *a,
diff --git a/libc/str/qsort.c b/libc/str/qsort.c
index d0f112e07..7134fe2fa 100644
--- a/libc/str/qsort.c
+++ b/libc/str/qsort.c
@@ -21,7 +21,7 @@
│ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS │
│ IN THE SOFTWARE. │
└─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/assert.h"
#include "libc/nexgen32e/bsf.h"
#include "libc/str/str.h"
diff --git a/libc/testlib/testlib.mk b/libc/testlib/testlib.mk
index 81c19747d..af6ecf985 100644
--- a/libc/testlib/testlib.mk
+++ b/libc/testlib/testlib.mk
@@ -93,7 +93,6 @@ LIBC_TESTLIB_A_OBJS = \
$(LIBC_TESTLIB_A_ASSETS:%=o/$(MODE)/%.zip.o)
LIBC_TESTLIB_A_DIRECTDEPS = \
- LIBC_ALG \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
diff --git a/libc/unicode/unicode.mk b/libc/unicode/unicode.mk
index 8d83757b0..a9ba5f79b 100644
--- a/libc/unicode/unicode.mk
+++ b/libc/unicode/unicode.mk
@@ -29,10 +29,8 @@ LIBC_UNICODE_A_CHECKS = \
LIBC_UNICODE_A_DIRECTDEPS = \
LIBC_INTRIN \
LIBC_NEXGEN32E \
- LIBC_RUNTIME \
LIBC_STR \
- LIBC_STUBS \
- LIBC_SYSV
+ LIBC_STUBS
LIBC_UNICODE_A_DEPS := \
$(call uniq,$(foreach x,$(LIBC_UNICODE_A_DIRECTDEPS),$($(x))))
diff --git a/libc/x/filecmp.c b/libc/x/filecmp.c
index 1c37aa3da..0acada13c 100644
--- a/libc/x/filecmp.c
+++ b/libc/x/filecmp.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/calls/calls.h"
#include "libc/errno.h"
#include "libc/macros.internal.h"
diff --git a/net/http/parsehttpmessage.c b/net/http/parsehttpmessage.c
index dd03b944b..39e684da7 100644
--- a/net/http/parsehttpmessage.c
+++ b/net/http/parsehttpmessage.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
-#include "libc/alg/arraylist.internal.h"
+#include "libc/mem/alg.h"
+#include "libc/mem/arraylist.internal.h"
#include "libc/assert.h"
#include "libc/intrin/bits.h"
#include "libc/limits.h"
diff --git a/test/libc/alg/test.mk b/test/libc/alg/test.mk
deleted file mode 100644
index 12574fff2..000000000
--- a/test/libc/alg/test.mk
+++ /dev/null
@@ -1,64 +0,0 @@
-#-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐
-#───vi: set et ft=make ts=8 tw=8 fenc=utf-8 :vi───────────────────────┘
-
-PKGS += TEST_LIBC_ALG
-
-TEST_LIBC_ALG_SRCS := $(wildcard test/libc/alg/*.c)
-TEST_LIBC_ALG_SRCS_TEST = $(filter %_test.c,$(TEST_LIBC_ALG_SRCS))
-
-TEST_LIBC_ALG_OBJS = \
- $(TEST_LIBC_ALG_SRCS:%.c=o/$(MODE)/%.o)
-
-TEST_LIBC_ALG_COMS = \
- $(TEST_LIBC_ALG_SRCS:%.c=o/$(MODE)/%.com)
-
-TEST_LIBC_ALG_BINS = \
- $(TEST_LIBC_ALG_COMS) \
- $(TEST_LIBC_ALG_COMS:%=%.dbg)
-
-TEST_LIBC_ALG_TESTS = $(TEST_LIBC_ALG_SRCS_TEST:%.c=o/$(MODE)/%.com.ok)
-
-TEST_LIBC_ALG_CHECKS = \
- $(TEST_LIBC_ALG_SRCS_TEST:%.c=o/$(MODE)/%.com.runs)
-
-TEST_LIBC_ALG_DIRECTDEPS = \
- LIBC_ALG \
- LIBC_FMT \
- LIBC_INTRIN \
- LIBC_LOG \
- LIBC_MEM \
- LIBC_NEXGEN32E \
- LIBC_RUNTIME \
- LIBC_STDIO \
- LIBC_STR \
- LIBC_STUBS \
- LIBC_SYSV \
- LIBC_TESTLIB \
- LIBC_X
-
-TEST_LIBC_ALG_DEPS := \
- $(call uniq,$(foreach x,$(TEST_LIBC_ALG_DIRECTDEPS),$($(x))))
-
-o/$(MODE)/test/libc/alg/alg.pkg: \
- $(TEST_LIBC_ALG_OBJS) \
- $(foreach x,$(TEST_LIBC_ALG_DIRECTDEPS),$($(x)_A).pkg)
-
-o/$(MODE)/test/libc/alg/%.com.dbg: \
- $(TEST_LIBC_ALG_DEPS) \
- o/$(MODE)/test/libc/alg/%.o \
- o/$(MODE)/test/libc/alg/alg.pkg \
- $(LIBC_TESTMAIN) \
- $(CRT) \
- $(APE_NO_MODIFY_SELF)
- @$(APELINK)
-
-$(TEST_LIBC_ALG_OBJS): test/libc/alg/test.mk
-
-$(TEST_LIBC_ALG_OBJS): private \
- DEFAULT_CCFLAGS += \
- -fno-builtin
-
-.PHONY: o/$(MODE)/test/libc/alg
-o/$(MODE)/test/libc/alg: \
- $(TEST_LIBC_ALG_BINS) \
- $(TEST_LIBC_ALG_CHECKS)
diff --git a/test/libc/fmt/test.mk b/test/libc/fmt/test.mk
index 528d29508..3b081db2b 100644
--- a/test/libc/fmt/test.mk
+++ b/test/libc/fmt/test.mk
@@ -18,7 +18,6 @@ TEST_LIBC_FMT_CHECKS = \
$(TEST_LIBC_FMT_SRCS_TEST:%.c=o/$(MODE)/%.com.runs)
TEST_LIBC_FMT_DIRECTDEPS = \
- LIBC_ALG \
LIBC_FMT \
LIBC_INTRIN \
LIBC_LOG \
diff --git a/test/libc/alg/arraylist_test.c b/test/libc/mem/arraylist_test.c
similarity index 98%
rename from test/libc/alg/arraylist_test.c
rename to test/libc/mem/arraylist_test.c
index 5d12ac1a6..ef007404b 100644
--- a/test/libc/alg/arraylist_test.c
+++ b/test/libc/mem/arraylist_test.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
-#include "libc/alg/arraylist.internal.h"
+#include "libc/mem/alg.h"
+#include "libc/mem/arraylist.internal.h"
#include "libc/log/libfatal.internal.h"
#include "libc/mem/mem.h"
#include "libc/runtime/runtime.h"
diff --git a/test/libc/alg/bisectcarleft_test.c b/test/libc/mem/bisectcarleft_test.c
similarity index 97%
rename from test/libc/alg/bisectcarleft_test.c
rename to test/libc/mem/bisectcarleft_test.c
index 80455c87b..c42ff3ac0 100644
--- a/test/libc/alg/bisectcarleft_test.c
+++ b/test/libc/mem/bisectcarleft_test.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
-#include "libc/alg/bisectcarleft.internal.h"
+#include "libc/mem/alg.h"
+#include "libc/mem/bisectcarleft.internal.h"
#include "libc/intrin/bits.h"
#include "libc/macros.internal.h"
#include "libc/runtime/runtime.h"
diff --git a/test/libc/alg/comparator_test.c b/test/libc/mem/comparator_test.c
similarity index 99%
rename from test/libc/alg/comparator_test.c
rename to test/libc/mem/comparator_test.c
index f45e485c0..8bfc0db52 100644
--- a/test/libc/alg/comparator_test.c
+++ b/test/libc/mem/comparator_test.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/intrin/bits.h"
#include "libc/mem/mem.h"
#include "libc/str/str.h"
diff --git a/test/libc/alg/critbit0_test.c b/test/libc/mem/critbit0_test.c
similarity index 99%
rename from test/libc/alg/critbit0_test.c
rename to test/libc/mem/critbit0_test.c
index e1388d990..99651324a 100644
--- a/test/libc/alg/critbit0_test.c
+++ b/test/libc/mem/critbit0_test.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/critbit0.h"
+#include "libc/mem/critbit0.h"
#include "libc/intrin/bits.h"
#include "libc/mem/mem.h"
#include "libc/runtime/runtime.h"
diff --git a/test/libc/alg/djbsort_test.c b/test/libc/mem/djbsort_test.c
similarity index 99%
rename from test/libc/alg/djbsort_test.c
rename to test/libc/mem/djbsort_test.c
index d7255420b..394ea8635 100644
--- a/test/libc/alg/djbsort_test.c
+++ b/test/libc/mem/djbsort_test.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/limits.h"
#include "libc/log/log.h"
#include "libc/macros.internal.h"
diff --git a/test/libc/alg/replacestr_test.c b/test/libc/mem/replacestr_test.c
similarity index 98%
rename from test/libc/alg/replacestr_test.c
rename to test/libc/mem/replacestr_test.c
index 804bc03be..1cd6afc20 100644
--- a/test/libc/alg/replacestr_test.c
+++ b/test/libc/mem/replacestr_test.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/errno.h"
#include "libc/runtime/gc.internal.h"
#include "libc/testlib/testlib.h"
diff --git a/test/libc/alg/replacestr_test.inc b/test/libc/mem/replacestr_test.inc
similarity index 100%
rename from test/libc/alg/replacestr_test.inc
rename to test/libc/mem/replacestr_test.inc
diff --git a/test/libc/alg/reverse_test.c b/test/libc/mem/reverse_test.c
similarity index 98%
rename from test/libc/alg/reverse_test.c
rename to test/libc/mem/reverse_test.c
index 6803d8db7..7a7140f8e 100644
--- a/test/libc/alg/reverse_test.c
+++ b/test/libc/mem/reverse_test.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/reverse.internal.h"
+#include "libc/mem/reverse.internal.h"
#include "libc/dce.h"
#include "libc/macros.internal.h"
#include "libc/testlib/testlib.h"
diff --git a/test/libc/alg/tarjan_test.c b/test/libc/mem/tarjan_test.c
similarity index 99%
rename from test/libc/alg/tarjan_test.c
rename to test/libc/mem/tarjan_test.c
index 4469dd32a..e4dfe6a84 100644
--- a/test/libc/alg/tarjan_test.c
+++ b/test/libc/mem/tarjan_test.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/macros.internal.h"
#include "libc/testlib/testlib.h"
diff --git a/test/libc/nexgen32e/test.mk b/test/libc/nexgen32e/test.mk
index 20915076a..14b546476 100644
--- a/test/libc/nexgen32e/test.mk
+++ b/test/libc/nexgen32e/test.mk
@@ -25,7 +25,6 @@ TEST_LIBC_NEXGEN32E_CHECKS = \
$(TEST_LIBC_NEXGEN32E_SRCS_TEST:%.c=o/$(MODE)/%.com.runs)
TEST_LIBC_NEXGEN32E_DIRECTDEPS = \
- LIBC_ALG \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
diff --git a/test/libc/runtime/test.mk b/test/libc/runtime/test.mk
index 8a612ec4a..bbd0300f8 100644
--- a/test/libc/runtime/test.mk
+++ b/test/libc/runtime/test.mk
@@ -23,7 +23,6 @@ TEST_LIBC_RUNTIME_CHECKS = \
$(TEST_LIBC_RUNTIME_SRCS_TEST:%.c=o/$(MODE)/%.com.runs)
TEST_LIBC_RUNTIME_DIRECTDEPS = \
- LIBC_ALG \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
diff --git a/test/libc/str/longsort_test.c b/test/libc/str/longsort_test.c
index bdc007e8c..77586f621 100644
--- a/test/libc/str/longsort_test.c
+++ b/test/libc/str/longsort_test.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/mem/mem.h"
#include "libc/stdio/rand.h"
#include "libc/runtime/gc.internal.h"
diff --git a/test/libc/str/memmem_test.c b/test/libc/str/memmem_test.c
index 2134a8ab3..409988c8a 100644
--- a/test/libc/str/memmem_test.c
+++ b/test/libc/str/memmem_test.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/intrin/bits.h"
#include "libc/intrin/likely.h"
#include "libc/mem/mem.h"
diff --git a/test/libc/str/qsort_test.c b/test/libc/str/qsort_test.c
index 63bfb2d1f..58308489e 100644
--- a/test/libc/str/qsort_test.c
+++ b/test/libc/str/qsort_test.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/intrin/bits.h"
#include "libc/macros.internal.h"
#include "libc/mem/mem.h"
diff --git a/test/libc/str/strcasestr_test.c b/test/libc/str/strcasestr_test.c
index 7729ff5a9..174f09975 100644
--- a/test/libc/str/strcasestr_test.c
+++ b/test/libc/str/strcasestr_test.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/intrin/bits.h"
#include "libc/dce.h"
#include "libc/mem/mem.h"
diff --git a/test/libc/str/strstr_test.c b/test/libc/str/strstr_test.c
index a4372246f..6817abf21 100644
--- a/test/libc/str/strstr_test.c
+++ b/test/libc/str/strstr_test.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/intrin/bits.h"
#include "libc/dce.h"
#include "libc/mem/mem.h"
diff --git a/test/libc/str/test.mk b/test/libc/str/test.mk
index e786f7095..d8269191d 100644
--- a/test/libc/str/test.mk
+++ b/test/libc/str/test.mk
@@ -31,7 +31,6 @@ TEST_LIBC_STR_CHECKS = \
$(TEST_LIBC_STR_SRCS_TEST_CC:%.cc=o/$(MODE)/%.com.runs)
TEST_LIBC_STR_DIRECTDEPS = \
- LIBC_ALG \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
diff --git a/test/libc/test.mk b/test/libc/test.mk
index 02b30e514..ec2c0eca5 100644
--- a/test/libc/test.mk
+++ b/test/libc/test.mk
@@ -3,8 +3,6 @@
.PHONY: o/$(MODE)/test/libc
o/$(MODE)/test/libc: \
- o/$(MODE)/test/libc/alg \
- o/$(MODE)/test/libc/bits \
o/$(MODE)/test/libc/calls \
o/$(MODE)/test/libc/dns \
o/$(MODE)/test/libc/fmt \
@@ -12,7 +10,6 @@ o/$(MODE)/test/libc: \
o/$(MODE)/test/libc/log \
o/$(MODE)/test/libc/mem \
o/$(MODE)/test/libc/nexgen32e \
- o/$(MODE)/test/libc/rand \
o/$(MODE)/test/libc/release \
o/$(MODE)/test/libc/runtime \
o/$(MODE)/test/libc/sock \
diff --git a/test/tool/viz/lib/test.mk b/test/tool/viz/lib/test.mk
index 491d3d36c..54a639c32 100644
--- a/test/tool/viz/lib/test.mk
+++ b/test/tool/viz/lib/test.mk
@@ -24,7 +24,6 @@ TEST_TOOL_VIZ_LIB_CHECKS = \
TEST_TOOL_VIZ_LIB_DIRECTDEPS = \
DSP_MPEG \
- LIBC_ALG \
LIBC_FMT \
LIBC_INTRIN \
LIBC_LOG \
diff --git a/third_party/chibicc/chibicc.mk b/third_party/chibicc/chibicc.mk
index 2d6e8eaaf..6702c71ca 100644
--- a/third_party/chibicc/chibicc.mk
+++ b/third_party/chibicc/chibicc.mk
@@ -43,7 +43,6 @@ THIRD_PARTY_CHIBICC_A_CHECKS = \
$(THIRD_PARTY_CHIBICC_A_HDRS:%=o/$(MODE)/%.ok)
THIRD_PARTY_CHIBICC_A_DIRECTDEPS = \
- LIBC_ALG \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
diff --git a/third_party/chibicc/dox2.c b/third_party/chibicc/dox2.c
index 64cd55eec..aef3baf57 100644
--- a/third_party/chibicc/dox2.c
+++ b/third_party/chibicc/dox2.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/intrin/bits.h"
#include "libc/sysv/consts/map.h"
#include "libc/sysv/consts/o.h"
diff --git a/third_party/chibicc/printast.c b/third_party/chibicc/printast.c
index 4d17b8b44..38b42591b 100644
--- a/third_party/chibicc/printast.c
+++ b/third_party/chibicc/printast.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/arraylist2.internal.h"
#include "third_party/chibicc/chibicc.h"
static const char kBoolStr[2][6] = {"false", "true"};
diff --git a/third_party/finger/sprint.c b/third_party/finger/sprint.c
index 1f5c1c6f0..b3c8ee36d 100644
--- a/third_party/finger/sprint.c
+++ b/third_party/finger/sprint.c
@@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/mem/mem.h"
#include "libc/runtime/runtime.h"
#include "libc/str/str.h"
diff --git a/third_party/linenoise/linenoise.c b/third_party/linenoise/linenoise.c
index 0c50ffc61..e0e7e281d 100644
--- a/third_party/linenoise/linenoise.c
+++ b/third_party/linenoise/linenoise.c
@@ -124,7 +124,7 @@
│ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. │
│ │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/assert.h"
#include "libc/intrin/bits.h"
#include "libc/calls/calls.h"
diff --git a/third_party/lua/lrepl.c b/third_party/lua/lrepl.c
index 1e8390c6d..d99a5998c 100644
--- a/third_party/lua/lrepl.c
+++ b/third_party/lua/lrepl.c
@@ -26,7 +26,7 @@
│ │
╚─────────────────────────────────────────────────────────────────────────────*/
#define lua_c
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/calls/calls.h"
#include "libc/calls/struct/sigaction.h"
#include "libc/errno.h"
diff --git a/third_party/lua/lua.mk b/third_party/lua/lua.mk
index 7c9497e82..76704abee 100644
--- a/third_party/lua/lua.mk
+++ b/third_party/lua/lua.mk
@@ -116,7 +116,6 @@ THIRD_PARTY_LUA_A_OBJS = \
$(THIRD_PARTY_LUA_A_SRCS:%.c=o/$(MODE)/%.o)
THIRD_PARTY_LUA_A_DIRECTDEPS = \
- LIBC_ALG \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
diff --git a/third_party/lua/luaencodejsondata.c b/third_party/lua/luaencodejsondata.c
index a2d7be164..ffedb22f8 100644
--- a/third_party/lua/luaencodejsondata.c
+++ b/third_party/lua/luaencodejsondata.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/critbit0.h"
+#include "libc/mem/critbit0.h"
#include "libc/assert.h"
#include "libc/intrin/bits.h"
#include "libc/intrin/likely.h"
diff --git a/third_party/lua/luaencodeluadata.c b/third_party/lua/luaencodeluadata.c
index bcd613e87..24da0aa23 100644
--- a/third_party/lua/luaencodeluadata.c
+++ b/third_party/lua/luaencodeluadata.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/critbit0.h"
+#include "libc/mem/critbit0.h"
#include "libc/assert.h"
#include "libc/intrin/bits.h"
#include "libc/fmt/itoa.h"
diff --git a/third_party/make/ar.c b/third_party/make/ar.c
index f55738e6e..9bf476220 100644
--- a/third_party/make/ar.c
+++ b/third_party/make/ar.c
@@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with
this program. If not, see . */
#include "third_party/make/makeint.inc"
/**/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "third_party/make/dep.h"
#include "third_party/make/filedef.h"
#include "third_party/musl/fnmatch.h"
diff --git a/third_party/make/makeint.inc b/third_party/make/makeint.inc
index 7acb12a0f..eea604cfa 100644
--- a/third_party/make/makeint.inc
+++ b/third_party/make/makeint.inc
@@ -14,7 +14,7 @@ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see . */
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/assert.h"
#include "libc/calls/calls.h"
#include "libc/calls/makedev.h"
diff --git a/third_party/musl/crypt_blowfish.c b/third_party/musl/crypt_blowfish.c
index db6b9a394..597e402b8 100644
--- a/third_party/musl/crypt_blowfish.c
+++ b/third_party/musl/crypt_blowfish.c
@@ -25,7 +25,7 @@
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
│ │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/limits.h"
#include "libc/literal.h"
#include "libc/mem/mem.h"
diff --git a/third_party/musl/crypt_des.c b/third_party/musl/crypt_des.c
index 75d2f178f..3b25dc9dd 100644
--- a/third_party/musl/crypt_des.c
+++ b/third_party/musl/crypt_des.c
@@ -25,7 +25,7 @@
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
│ │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/limits.h"
#include "libc/literal.h"
#include "libc/str/str.h"
diff --git a/third_party/musl/crypt_md5.c b/third_party/musl/crypt_md5.c
index 37ac97385..27ca95795 100644
--- a/third_party/musl/crypt_md5.c
+++ b/third_party/musl/crypt_md5.c
@@ -25,7 +25,7 @@
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
│ │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/limits.h"
#include "libc/literal.h"
#include "libc/str/str.h"
diff --git a/third_party/musl/crypt_sha256.c b/third_party/musl/crypt_sha256.c
index 9e3b35f19..556d6555d 100644
--- a/third_party/musl/crypt_sha256.c
+++ b/third_party/musl/crypt_sha256.c
@@ -25,7 +25,7 @@
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
│ │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/calls/calls.h"
#include "libc/fmt/conv.h"
#include "libc/fmt/fmt.h"
diff --git a/third_party/musl/crypt_sha512.c b/third_party/musl/crypt_sha512.c
index 82e95194f..39c7525b8 100644
--- a/third_party/musl/crypt_sha512.c
+++ b/third_party/musl/crypt_sha512.c
@@ -25,7 +25,7 @@
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
│ │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/calls/calls.h"
#include "libc/fmt/conv.h"
#include "libc/fmt/fmt.h"
diff --git a/third_party/musl/encrypt.c b/third_party/musl/encrypt.c
index e20a8342e..c401a5021 100644
--- a/third_party/musl/encrypt.c
+++ b/third_party/musl/encrypt.c
@@ -25,7 +25,7 @@
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
│ │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/calls/calls.h"
#include "libc/calls/weirdtypes.h"
#include "libc/fmt/conv.h"
diff --git a/third_party/musl/glob.c b/third_party/musl/glob.c
index b0882473d..eaf30665c 100644
--- a/third_party/musl/glob.c
+++ b/third_party/musl/glob.c
@@ -25,7 +25,7 @@
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
│ │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/calls/calls.h"
#include "libc/calls/struct/dirent.h"
#include "libc/calls/struct/stat.h"
diff --git a/third_party/musl/musl.mk b/third_party/musl/musl.mk
index 446d5283a..2bd943f16 100644
--- a/third_party/musl/musl.mk
+++ b/third_party/musl/musl.mk
@@ -17,7 +17,6 @@ THIRD_PARTY_MUSL_A_OBJS = \
$(THIRD_PARTY_MUSL_A_SRCS:%.c=o/$(MODE)/%.o)
THIRD_PARTY_MUSL_A_DIRECTDEPS = \
- LIBC_ALG \
LIBC_CALLS \
LIBC_INTRIN \
LIBC_FMT \
diff --git a/third_party/python/Modules/posixmodule.c b/third_party/python/Modules/posixmodule.c
index b54e3124b..8d05b99ab 100644
--- a/third_party/python/Modules/posixmodule.c
+++ b/third_party/python/Modules/posixmodule.c
@@ -5,7 +5,7 @@
│ https://docs.python.org/3/license.html │
╚─────────────────────────────────────────────────────────────────────────────*/
#define PY_SSIZE_T_CLEAN
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/assert.h"
#include "libc/intrin/weaken.h"
#include "libc/calls/calls.h"
diff --git a/third_party/python/Python/import.c b/third_party/python/Python/import.c
index 262b98798..3c968d833 100644
--- a/third_party/python/Python/import.c
+++ b/third_party/python/Python/import.c
@@ -4,7 +4,7 @@
│ Python 3 │
│ https://docs.python.org/3/license.html │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/intrin/bits.h"
#include "libc/calls/calls.h"
#include "libc/calls/struct/stat.h"
diff --git a/third_party/python/python.mk b/third_party/python/python.mk
index f87b0b2f3..608a09d94 100644
--- a/third_party/python/python.mk
+++ b/third_party/python/python.mk
@@ -441,7 +441,6 @@ THIRD_PARTY_PYTHON_STAGE1_A_SRCS = \
THIRD_PARTY_PYTHON_STAGE1_A_DIRECTDEPS = \
DSP_SCALE \
- LIBC_ALG \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
@@ -1120,7 +1119,6 @@ THIRD_PARTY_PYTHON_STAGE2_A_DATA = \
THIRD_PARTY_PYTHON_STAGE2_A_DIRECTDEPS = \
DSP_CORE \
- LIBC_ALG \
LIBC_CALLS \
LIBC_DNS \
LIBC_FMT \
diff --git a/third_party/quickjs/quickjs.mk b/third_party/quickjs/quickjs.mk
index 4c58a3105..7f21dcd2b 100644
--- a/third_party/quickjs/quickjs.mk
+++ b/third_party/quickjs/quickjs.mk
@@ -70,7 +70,6 @@ THIRD_PARTY_QUICKJS_A_OBJS = \
$(THIRD_PARTY_QUICKJS_A_SRCS:%.c=o/$(MODE)/%.o)
THIRD_PARTY_QUICKJS_A_DIRECTDEPS = \
- LIBC_ALG \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
diff --git a/third_party/quickjs/run-test262.c b/third_party/quickjs/run-test262.c
index cfe32dd0a..0ce7d24da 100644
--- a/third_party/quickjs/run-test262.c
+++ b/third_party/quickjs/run-test262.c
@@ -22,7 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/calls/struct/stat.h"
#include "libc/calls/weirdtypes.h"
#include "libc/fmt/conv.h"
diff --git a/third_party/quickjs/unicode_gen.c b/third_party/quickjs/unicode_gen.c
index cd03e3c8c..d5d956c41 100644
--- a/third_party/quickjs/unicode_gen.c
+++ b/third_party/quickjs/unicode_gen.c
@@ -22,7 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/assert.h"
#include "libc/fmt/conv.h"
#include "libc/fmt/fmt.h"
diff --git a/third_party/regex/regcomp.c b/third_party/regex/regcomp.c
index a2ed7b029..acbacf19e 100644
--- a/third_party/regex/regcomp.c
+++ b/third_party/regex/regcomp.c
@@ -56,6 +56,7 @@
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
│ │
╚─────────────────────────────────────────────────────────────────────────────*/
+#include "libc/mem/alg.h"
#include "third_party/regex/tre.inc"
#define CHARCLASS_NAME_MAX 14
diff --git a/third_party/regex/tre.inc b/third_party/regex/tre.inc
index 0e9aeffde..b399ba7af 100644
--- a/third_party/regex/tre.inc
+++ b/third_party/regex/tre.inc
@@ -56,7 +56,7 @@
│ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. │
│ │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/assert.h"
#include "libc/mem/mem.h"
#include "libc/str/str.h"
diff --git a/third_party/sqlite3/fts3_write.c b/third_party/sqlite3/fts3_write.c
index fa5aae5fe..1cb3101d2 100644
--- a/third_party/sqlite3/fts3_write.c
+++ b/third_party/sqlite3/fts3_write.c
@@ -21,7 +21,7 @@
#include "third_party/sqlite3/fts3Int.inc"
#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/assert.h"
#include "libc/mem/mem.h"
#include "libc/stdio/stdio.h"
diff --git a/third_party/sqlite3/sqlite3.mk b/third_party/sqlite3/sqlite3.mk
index 9076f84a4..649f7125c 100644
--- a/third_party/sqlite3/sqlite3.mk
+++ b/third_party/sqlite3/sqlite3.mk
@@ -43,7 +43,6 @@ THIRD_PARTY_SQLITE3_A_CHECKS = \
$(THIRD_PARTY_SQLITE3_A_HDRS:%=o/$(MODE)/%.ok)
THIRD_PARTY_SQLITE3_A_DIRECTDEPS = \
- LIBC_ALG \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
diff --git a/third_party/stb/stb.mk b/third_party/stb/stb.mk
index a56dc38ba..36df433bd 100644
--- a/third_party/stb/stb.mk
+++ b/third_party/stb/stb.mk
@@ -26,7 +26,6 @@ THIRD_PARTY_STB_A_OBJS = \
THIRD_PARTY_STB_A_DIRECTDEPS = \
DSP_CORE \
- LIBC_ALG \
LIBC_FMT \
LIBC_INTRIN \
LIBC_LOG \
diff --git a/third_party/stb/stb_rect_pack.c b/third_party/stb/stb_rect_pack.c
index 4842bf4eb..d5a858dcb 100644
--- a/third_party/stb/stb_rect_pack.c
+++ b/third_party/stb/stb_rect_pack.c
@@ -25,7 +25,7 @@
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
│ │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/assert.h"
#include "libc/dce.h"
#include "third_party/stb/stb_rect_pack.h"
diff --git a/third_party/stb/stb_vorbis.c b/third_party/stb/stb_vorbis.c
index 4149aabe0..eda28c57c 100644
--- a/third_party/stb/stb_vorbis.c
+++ b/third_party/stb/stb_vorbis.c
@@ -32,7 +32,7 @@
// manxorist@github saga musix github:infatum
// Timur Gagiev Maxwell Koo
//
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/assert.h"
#include "libc/intrin/bits.h"
#include "libc/calls/calls.h"
diff --git a/third_party/tidy/tidy.c b/third_party/tidy/tidy.c
index feb0abd59..d445a90ec 100644
--- a/third_party/tidy/tidy.c
+++ b/third_party/tidy/tidy.c
@@ -24,7 +24,7 @@
#include "third_party/tidy/tidybuffio.h"
#include "libc/assert.h"
#include "libc/fmt/fmt.h"
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/str/str.h"
#include "libc/runtime/runtime.h"
#include "libc/mem/mem.h"
diff --git a/third_party/unzip/extract.c b/third_party/unzip/extract.c
index 32f39cda1..b31dc0bf4 100644
--- a/third_party/unzip/extract.c
+++ b/third_party/unzip/extract.c
@@ -38,7 +38,7 @@
#include "third_party/unzip/unzip.h"
#include "third_party/unzip/globals.h"
#include "third_party/unzip/crc32.h"
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/log/log.h"
#include "third_party/unzip/crypt.h"
diff --git a/third_party/zip/fileio.c b/third_party/zip/fileio.c
index 84f6c4a85..a9e5a0c2b 100644
--- a/third_party/zip/fileio.c
+++ b/third_party/zip/fileio.c
@@ -18,7 +18,7 @@
#include "libc/calls/struct/stat.macros.h"
#include "third_party/zip/crc32.h"
#include "libc/fmt/fmt.h"
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/stdio/temp.h"
#include "libc/time/time.h"
#include "libc/time/struct/tm.h"
diff --git a/third_party/zip/zipfile.c b/third_party/zip/zipfile.c
index bc1ad3225..97f247a07 100644
--- a/third_party/zip/zipfile.c
+++ b/third_party/zip/zipfile.c
@@ -22,7 +22,7 @@
/* for realloc 2/6/2005 EG */
#include "libc/mem/mem.h"
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/errno.h"
/* for toupper() */
diff --git a/third_party/zip/zipnote.c b/third_party/zip/zipnote.c
index c8cd2d390..da02bd56f 100644
--- a/third_party/zip/zipnote.c
+++ b/third_party/zip/zipnote.c
@@ -23,7 +23,7 @@
#include "libc/calls/calls.h"
#include "libc/fmt/fmt.h"
#include "libc/fmt/conv.h"
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/log/log.h"
#include "libc/calls/struct/sigaction.h"
#include "libc/sysv/consts/sig.h"
diff --git a/third_party/zip/zipsplit.c b/third_party/zip/zipsplit.c
index 3f2077bdc..be53bc299 100644
--- a/third_party/zip/zipsplit.c
+++ b/third_party/zip/zipsplit.c
@@ -23,7 +23,7 @@
#include "libc/calls/calls.h"
#include "libc/fmt/fmt.h"
#include "libc/fmt/conv.h"
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/calls/struct/sigaction.h"
#include "libc/sysv/consts/sig.h"
#include "libc/log/log.h"
diff --git a/tool/build/ar.c b/tool/build/ar.c
index ef444e20c..a27840501 100644
--- a/tool/build/ar.c
+++ b/tool/build/ar.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/assert.h"
#include "libc/intrin/bits.h"
#include "libc/intrin/safemacros.internal.h"
diff --git a/tool/build/blinkenlights.c b/tool/build/blinkenlights.c
index 449baccc9..541bff42f 100644
--- a/tool/build/blinkenlights.c
+++ b/tool/build/blinkenlights.c
@@ -18,7 +18,7 @@
╚─────────────────────────────────────────────────────────────────────────────*/
#include "dsp/scale/cdecimate2xuint8x8.h"
#include "dsp/tty/tty.h"
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/assert.h"
#include "libc/calls/calls.h"
#include "libc/calls/ioctl.h"
diff --git a/tool/build/build.mk b/tool/build/build.mk
index 2a23b4c97..f7bc6a866 100644
--- a/tool/build/build.mk
+++ b/tool/build/build.mk
@@ -37,7 +37,6 @@ TOOL_BUILD_DIRECTDEPS = \
DSP_CORE \
DSP_SCALE \
DSP_TTY \
- LIBC_ALG \
LIBC_CALLS \
LIBC_DNS \
LIBC_ELF \
diff --git a/tool/build/calculator.c b/tool/build/calculator.c
index fa94ad025..0a18a4118 100644
--- a/tool/build/calculator.c
+++ b/tool/build/calculator.c
@@ -8,7 +8,7 @@
╚─────────────────────────────────────────────────────────────────*/
#endif
#include "dsp/tty/tty.h"
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/assert.h"
#include "libc/intrin/bits.h"
#include "libc/intrin/morton.h"
diff --git a/tool/build/compile.c b/tool/build/compile.c
index 79939fb79..610ad98d0 100644
--- a/tool/build/compile.c
+++ b/tool/build/compile.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/intrin/bits.h"
#include "libc/intrin/safemacros.internal.h"
#include "libc/calls/calls.h"
diff --git a/tool/build/lib/asmdown.c b/tool/build/lib/asmdown.c
index d570b0d79..a31bad0d2 100644
--- a/tool/build/lib/asmdown.c
+++ b/tool/build/lib/asmdown.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/mem/mem.h"
#include "libc/str/str.h"
#include "tool/build/lib/asmdown.h"
diff --git a/tool/build/lib/breakpoint.c b/tool/build/lib/breakpoint.c
index b9978af07..f363ea2d2 100644
--- a/tool/build/lib/breakpoint.c
+++ b/tool/build/lib/breakpoint.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/assert.h"
#include "libc/log/log.h"
#include "tool/build/lib/breakpoint.h"
diff --git a/tool/build/lib/buffer.c b/tool/build/lib/buffer.c
index 8ba4eb4ee..85540b0bc 100644
--- a/tool/build/lib/buffer.c
+++ b/tool/build/lib/buffer.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/calls/calls.h"
#include "libc/errno.h"
#include "libc/fmt/fmt.h"
diff --git a/tool/build/lib/buildlib.mk b/tool/build/lib/buildlib.mk
index 88d759202..c244feb22 100644
--- a/tool/build/lib/buildlib.mk
+++ b/tool/build/lib/buildlib.mk
@@ -32,7 +32,6 @@ TOOL_BUILD_LIB_A_OBJS = \
o/$(MODE)/tool/build/lib/apetest2.com.zip.o
TOOL_BUILD_LIB_A_DIRECTDEPS = \
- LIBC_ALG \
LIBC_CALLS \
LIBC_ELF \
LIBC_FMT \
diff --git a/tool/build/lib/dis.c b/tool/build/lib/dis.c
index 6e58a8a12..5377a403b 100644
--- a/tool/build/lib/dis.c
+++ b/tool/build/lib/dis.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/alg.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/intrin/safemacros.internal.h"
#include "libc/fmt/bing.internal.h"
#include "libc/fmt/fmt.h"
diff --git a/tool/build/lib/diself.c b/tool/build/lib/diself.c
index 87b78868e..eed3f7916 100644
--- a/tool/build/lib/diself.c
+++ b/tool/build/lib/diself.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/elf/elf.h"
#include "libc/elf/struct/sym.h"
#include "libc/log/check.h"
diff --git a/tool/build/lib/elfwriter.c b/tool/build/lib/elfwriter.c
index 86e36e84b..d4faf3310 100644
--- a/tool/build/lib/elfwriter.c
+++ b/tool/build/lib/elfwriter.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/assert.h"
#include "libc/calls/calls.h"
#include "libc/log/check.h"
diff --git a/tool/build/lib/interner.c b/tool/build/lib/interner.c
index 91d92b6b8..9411fa1fb 100644
--- a/tool/build/lib/interner.c
+++ b/tool/build/lib/interner.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/arraylist.internal.h"
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/arraylist.internal.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/intrin/safemacros.internal.h"
#include "libc/mem/mem.h"
#include "libc/nexgen32e/crc32.h"
diff --git a/tool/build/lib/pml4t.c b/tool/build/lib/pml4t.c
index 9d3f7a6ab..5b5356949 100644
--- a/tool/build/lib/pml4t.c
+++ b/tool/build/lib/pml4t.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/arraylist2.internal.h"
#include "tool/build/lib/endian.h"
#include "tool/build/lib/machine.h"
#include "tool/build/lib/pml4t.h"
diff --git a/tool/build/lib/pty.c b/tool/build/lib/pty.c
index 3a421077c..57715d85a 100644
--- a/tool/build/lib/pty.c
+++ b/tool/build/lib/pty.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/assert.h"
#include "libc/intrin/bits.h"
#include "libc/intrin/safemacros.internal.h"
diff --git a/tool/build/mkdeps.c b/tool/build/mkdeps.c
index ba889d918..66a8704f9 100644
--- a/tool/build/mkdeps.c
+++ b/tool/build/mkdeps.c
@@ -16,10 +16,10 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
-#include "libc/alg/arraylist.internal.h"
-#include "libc/alg/arraylist2.internal.h"
-#include "libc/alg/bisectcarleft.internal.h"
+#include "libc/mem/alg.h"
+#include "libc/mem/arraylist.internal.h"
+#include "libc/mem/arraylist2.internal.h"
+#include "libc/mem/bisectcarleft.internal.h"
#include "libc/assert.h"
#include "libc/intrin/bits.h"
#include "libc/intrin/safemacros.internal.h"
diff --git a/tool/build/package.c b/tool/build/package.c
index 84545345f..8c3b5f176 100644
--- a/tool/build/package.c
+++ b/tool/build/package.c
@@ -16,8 +16,8 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
-#include "libc/alg/arraylist.internal.h"
+#include "libc/mem/alg.h"
+#include "libc/mem/arraylist.internal.h"
#include "libc/intrin/bswap.h"
#include "libc/intrin/safemacros.internal.h"
#include "libc/calls/calls.h"
diff --git a/tool/build/refactor.c b/tool/build/refactor.c
index ba6ca7b24..d53bbe778 100644
--- a/tool/build/refactor.c
+++ b/tool/build/refactor.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/alg.h"
+#include "libc/mem/alg.h"
#include "libc/assert.h"
#include "libc/intrin/safemacros.internal.h"
#include "libc/calls/calls.h"
diff --git a/tool/build/rollup.c b/tool/build/rollup.c
index e221ae7e2..b10be0260 100644
--- a/tool/build/rollup.c
+++ b/tool/build/rollup.c
@@ -17,7 +17,7 @@
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
#include "ape/relocations.h"
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/calls/calls.h"
#include "libc/calls/struct/stat.h"
#include "libc/errno.h"
diff --git a/tool/build/runit.c b/tool/build/runit.c
index 4bf076c39..badec0d79 100644
--- a/tool/build/runit.c
+++ b/tool/build/runit.c
@@ -68,7 +68,7 @@
*
* o/default/tool/build/runit.com \
* o/default/tool/build/runitd.com \
- * o/default/test/libc/alg/qsort_test.com \
+ * o/default/test/libc/mem/qsort_test.com \
* freebsd.test.:31337:22
*
* APE binaries are hermetic and embed dependent files within their zip
diff --git a/tool/decode/lib/flagger.c b/tool/decode/lib/flagger.c
index 3d283b107..fa61fff57 100644
--- a/tool/decode/lib/flagger.c
+++ b/tool/decode/lib/flagger.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/arraylist2.internal.h"
+#include "libc/mem/arraylist2.internal.h"
#include "libc/fmt/fmt.h"
#include "libc/mem/mem.h"
#include "libc/str/str.h"
diff --git a/tool/net/net.mk b/tool/net/net.mk
index 0a0b9bd9c..7cbf7d990 100644
--- a/tool/net/net.mk
+++ b/tool/net/net.mk
@@ -29,7 +29,6 @@ TOOL_NET_CHECKS = \
TOOL_NET_DIRECTDEPS = \
DSP_SCALE \
- LIBC_ALG \
LIBC_CALLS \
LIBC_DNS \
LIBC_FMT \
diff --git a/tool/viz/lib/vizlib.mk b/tool/viz/lib/vizlib.mk
index cc46ea216..f20180dbb 100644
--- a/tool/viz/lib/vizlib.mk
+++ b/tool/viz/lib/vizlib.mk
@@ -27,7 +27,6 @@ TOOL_VIZ_LIB_A_DIRECTDEPS = \
DSP_CORE \
DSP_SCALE \
DSP_TTY \
- LIBC_ALG \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
diff --git a/tool/viz/printvideo.c b/tool/viz/printvideo.c
index a1a6a540c..46e0adf4d 100644
--- a/tool/viz/printvideo.c
+++ b/tool/viz/printvideo.c
@@ -23,8 +23,8 @@
#include "dsp/scale/scale.h"
#include "dsp/tty/quant.h"
#include "dsp/tty/tty.h"
-#include "libc/alg/alg.h"
-#include "libc/alg/arraylist.internal.h"
+#include "libc/mem/alg.h"
+#include "libc/mem/arraylist.internal.h"
#include "libc/assert.h"
#include "libc/intrin/bits.h"
#include "libc/intrin/safemacros.internal.h"
diff --git a/tool/viz/tabalign.c b/tool/viz/tabalign.c
index 1b8a9ed7c..b9b875ab7 100644
--- a/tool/viz/tabalign.c
+++ b/tool/viz/tabalign.c
@@ -16,7 +16,7 @@
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
-#include "libc/alg/arraylist.internal.h"
+#include "libc/mem/arraylist.internal.h"
#include "libc/intrin/safemacros.internal.h"
#include "libc/fmt/conv.h"
#include "libc/limits.h"