From 3b4a333979366e2d8bb904d296748285f3d41d0c Mon Sep 17 00:00:00 2001 From: miaobyte Date: Mon, 2 Nov 2026 09:31:54 +0800 Subject: [PATCH] =?UTF-8?q?test:=20test=5Finplace=5Fbody=5Fonly=20?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E4=BE=9D=E8=B5=96=20mkdtemp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 该测试原先用 mkdtemp 建临时目录。mkdtemp 属 POSIX/BSD 命名空间,本仓 CMAKE_C_EXTENSIONS OFF(严格 C11),glibc 下补 _POSIX_C_SOURCE 即可; macOS 上试过 _POSIX_C_SOURCE / _DARWIN_C_SOURCE / _GNU_SOURCE 三种宏均未生效 (原因未查明,同目录 test_art_alignment.c 用 _GNU_SOURCE + mkdtemp 能编过, 行为不一致)。 改为用 的 time() + 静态计数拼接唯一 shm 路径,只依赖 C 标准库; shm 后端自己创建文件,无需预先建目录。修复 v0.3.30 tag 上 ci / ci-macos 的红。 Co-Authored-By: Claude Code --- tests/test_inplace_body_only.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/tests/test_inplace_body_only.c b/tests/test_inplace_body_only.c index 9ac52c1..1962c11 100644 --- a/tests/test_inplace_body_only.c +++ b/tests/test_inplace_body_only.c @@ -10,6 +10,7 @@ #include #include #include +#include #include struct Value { @@ -42,11 +43,18 @@ static int head_attr_same(const struct Value *a, const struct Value *b) { } static void run(void) { - char dir[] = "/tmp/kvspace-inplace-XXXXXX"; - char *made = mkdtemp(dir); - REQUIRE(made != NULL, "mkdtemp"); + /* 唯一前缀用标准库构造(time + 静态计数),不依赖 mkdtemp/开目录。 + * + * 为什么不用 mkdtemp:它在 POSIX/BSD 命名空间,本仓 CMAKE_C_EXTENSIONS OFF + * (严格 C11)。Linux 上补 _POSIX_C_SOURCE 即可;macOS 上试过 + * _POSIX_C_SOURCE / _DARWIN_C_SOURCE / _GNU_SOURCE 三种宏均未生效。 + * 原因未查明——同目录 test_art_alignment.c 用 _GNU_SOURCE + mkdtemp 在 + * macOS 上是能编过的,行为不一致。改为只依赖 C 标准库,两平台都不再需要 + * 特性宏;shm 后端自己创建文件,无需预先建目录。 */ + static unsigned seq = 0; char dsn[256]; - snprintf(dsn, sizeof dsn, "shm://%s/db", dir); + snprintf(dsn, sizeof dsn, "shm:///tmp/kvspace-inplace-%ld-%u.shm", + (long)time(NULL), ++seq); void *h = kvspaceConnect(dsn); REQUIRE(h != NULL, "connect");