Skip to content

test: test_inplace_body_only 显式声明 _POSIX_C_SOURCE(修 tag 上 CI 红) - #70

Merged
miaobyte merged 1 commit into
mainfrom
fix/posix-source-mkdtemp
Nov 2, 2026
Merged

miaobyte merged 1 commit into
mainfrom
fix/posix-source-mkdtemp

Conversation

@miaobyte

@miaobyte miaobyte commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

修 v0.3.30 tag 上 ci / ci-macos 的红色:test_inplace_body_only.c 依赖 mkdtemp。

现象

tests/test_inplace_body_only.c:46:18: error: implicit declaration of function 'mkdtemp'
                                   [-Wimplicit-function-declaration]

mkdtemp 属 POSIX/BSD;本仓 CMakeLists.txt 设 CMAKE_C_EXTENSIONS OFF(严格 C11),
CI 的 gcc 报隐式声明。本机 glibc 默认放开该符号,所以本地 ctest 12/12 全绿也发现不了。

四次迭代(如实记录)

# 方案 linux ci macos ci
1 #define _POSIX_C_SOURCE 200809L ✅ ❌
2 __APPLE__ → _DARWIN_C_SOURCE,其余 _POSIX_C_SOURCE ✅ ❌
3 与同目录测试一致的 _GNU_SOURCE ✅ ❌
4 去掉 mkdtemp 依赖(本 PR) ✅ ✅

重要:我们没能查明 1–3 为何在 macOS 上不生效。 同目录 test_art_alignment.c
用 _GNU_SOURCE + mkdtemp 在 macOS CI 上是能编过的,行为不一致;对比过
include 顺序(宏均在所有系统头之前),也排除不了这个矛盾。因此本 PR 不再依赖任何
特性宏,改为只用 C 标准库——结论写进了代码注释,不做未经证实的归因。

改动

-    char dir[] = "/tmp/kvspace-inplace-XXXXXX";
-    char *made = mkdtemp(dir);
-    REQUIRE(made != NULL, "mkdtemp");
-    char dsn[256];
-    snprintf(dsn, sizeof dsn, "shm://%s/db", dir);
+    /* 唯一前缀用标准库构造(time + 静态计数),不依赖 mkdtemp/开目录。
+     * 为什么不用 mkdtemp:……(含四次迭代与「原因未查明」的说明) */
+    static unsigned seq = 0;
+    char dsn[256];
+    snprintf(dsn, sizeof dsn, "shm:///tmp/kvspace-inplace-%ld-%u.shm",
+             (long)time(NULL), ++seq);

shm 后端自己创建文件,无需预先建目录。

验证

  • gcc -std=c11 -fsyntax-only 通过
  • 本仓 CMake Release 构建 rc=0,ctest 12/12
  • ci 与 ci-macos 在 145044c 上均 success(本 PR 的上一版已跑绿;
    本次仅新增代码注释,仍需本次 run 确认)

🤖 Generated with Claude Code

该测试原先用 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.h> 的 time() + 静态计数拼接唯一 shm 路径,只依赖 C 标准库;
shm 后端自己创建文件,无需预先建目录。修复 v0.3.30 tag 上 ci / ci-macos 的红。

Co-Authored-By: Claude Code <noreply@anthropic.com>
@miaobyte
miaobyte force-pushed the fix/posix-source-mkdtemp branch from 145044c to 3b4a333 Compare November 2, 2026 01:32
@miaobyte
miaobyte merged commit 728f289 into main Nov 2, 2026
4 checks passed
@miaobyte
miaobyte deleted the fix/posix-source-mkdtemp branch November 2, 2026 01:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant