Skip to content

Commit 6d0ba61

Browse files
fix: ci compile issue
1 parent 658df07 commit 6d0ba61

2 files changed

Lines changed: 12 additions & 9 deletions

File tree

Roadmap.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Context
44

5-
CFBox 是一个 C++23 BusyBox 替代品,当前版本有 17 个 applet(echo, printf, cat, head, tail, wc, sort, uniq, grep, sed, mkdir, rm, cp, mv, ls, find, init)。项目使用注册表分发模式(`APPLET_REGISTRY`)、`std::expected` 错误处理、自定义参数解析器,CI 覆盖原生构建、交叉编译和 QEMU 测试。
5+
CFBox 是一个 C++23 BusyBox 替代品,当前版本有 33 个 applet。项目使用注册表分发模式(`APPLET_REGISTRY`)、`std::expected` 错误处理、自定义参数解析器,CI 覆盖原生构建、交叉编译和 QEMU 测试。
66

77
**目标**:全面对齐 BusyBox,覆盖嵌入式、容器、救援和通用场景。Shell 是最关键的组件,必须最先实现。
88

@@ -15,7 +15,7 @@ CFBox 是一个 C++23 BusyBox 替代品,当前版本有 17 个 applet(echo,
1515
| 阶段 | 主题 | 新增 Applet | 核心基础设施 | 累计 |
1616
|------|------|------------|-------------|------|
1717
| 0 | 构建系统现代化 ✅ | 0 | CMake 配置、help 系统、UTF-8、彩色输出 | 17 |
18-
| 1 | POSIX Shell + Coreutils I | ~17 | Shell 引擎、进程管理、信号处理 | ~34 |
18+
| 1 | POSIX Shell + Coreutils I 🔨 | ~17 | Shell 引擎、进程管理、信号处理 | ~34 |
1919
| 2 | Coreutils II + findutils | ~41 | 流处理管线、校验和框架 | ~75 |
2020
| 3 | 编辑器 + 归档 + 压缩 | ~15 | 终端抽象、压缩框架 | ~90 |
2121
| 4 | 进程/Init + util-linux | ~38 | /proc 解析器、TUI 框架 | ~128 |
@@ -48,10 +48,16 @@ CFBox 是一个 C++23 BusyBox 替代品,当前版本有 17 个 applet(echo,
4848

4949
---
5050

51-
## Phase 1:POSIX Shell + Coreutils 第一批(最高优先级)
51+
## Phase 1:POSIX Shell + Coreutils 第一批 🔨
5252

5353
**目标**:实现交互式 POSIX Shell——这是在真实 Linux 上使用的基础。同时实现简单的 coreutils 建立势头。
5454

55+
### Coreutils 第一批 ✅
56+
57+
16 个简单 coreutils 已完成,覆盖脚本基础所需:
58+
59+
`basename` ✅, `dirname` ✅, `true` ✅, `false` ✅, `yes` ✅, `sleep` ✅, `pwd` ✅, `tty` ✅, `uname` ✅, `whoami` ✅, `hostname` ✅, `id` ✅, `logname` ✅, `nproc` ✅, `test` ✅, `link`
60+
5561
### Shell 架构(`src/applets/sh/`
5662

5763
Shell 是最复杂的单一组件,按模块拆分:
@@ -71,10 +77,6 @@ Shell 是最复杂的单一组件,按模块拆分:
7177
- **进程管理** `include/cfbox/process.hpp`:fork/exec/pipe/dup2/waitpid RAII 封装
7278
- **信号处理** `include/cfbox/signal.hpp`:RAII 信号处理器
7379

74-
### Coreutils 第一批(简单 applet,50-200 行/个)
75-
76-
`basename`, `dirname`, `true`, `false`, `yes`, `sleep`, `pwd`, `tty`, `uname`, `whoami`, `hostname`, `id`, `logname`, `nproc`, `test`, `link`
77-
7880
### 验证
7981
- `./cfbox sh -c "echo hello | wc -l"` 管道工作
8082
- `./cfbox sh -c "for i in 1 2 3; do echo $i; done"` 循环工作

src/applets/id.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ auto id_main(int argc, char* argv[]) -> int {
7171
int ngroups = getgroups(0, nullptr);
7272
if (ngroups > 0) {
7373
groups.resize(static_cast<std::size_t>(ngroups));
74-
getgroups(ngroups, groups.data());
74+
if (getgroups(ngroups, groups.data()) < 0) groups.clear();
7575
}
7676

7777
bool first = true;
@@ -102,7 +102,8 @@ auto id_main(int argc, char* argv[]) -> int {
102102
int ngroups = getgroups(0, nullptr);
103103
if (ngroups > 0) {
104104
groups.resize(static_cast<std::size_t>(ngroups));
105-
getgroups(ngroups, groups.data());
105+
int ret = getgroups(ngroups, groups.data());
106+
if (ret < 0) groups.clear();
106107
std::fputs(" groups=", stdout);
107108
bool first = true;
108109
for (auto g : groups) {

0 commit comments

Comments
 (0)