fix(launcherd): M42 包安装入口改委托 nyai — 删内联解包/验签/部署,复用 M35 安全链
- app_launcher.c 删掉 meow_pkg_install 旧内联实现(文件名推包名、硬要 .mpk 后缀、 rm -rf 目标目录直解、失败不回滚 .bak_、不拒 ./..、系统包大小写敏感比较); 导出保留签名逻辑不动(验签仍只 shell-out meow_verify)。 - 新增 pkg_install.c:fork+exec /usr/bin/nyai install <路径>(argv 直传不经 shell; MEOW_NYAI_BIN 覆写,缺省不走 PATH)。包身份/暂存/清理/防降级/大小写全由 nyai 闭环。 - stdout/stderr 分两条管道收:nyai 进度是缓冲 stdout,错误是即时 stderr,合流会把 真错误顶掉(真机首测即踩到);错误文案只取 stderr 尾行。 - start/poll 两段式(+busy 查询)供 UI 主循环按帧驱动不假死;同步封装 20ms 切片轮询, 180s 超时 SIGTERM→SIGKILL,不用时钟 ABI(M40 time32 教训)。 - main_menu --pkg-install 失败打 stderr 可读文案、退出码统一 0/1。 - test_pkg_install.c:44 断言(路径预检含任意文件名可装/目录/不可读/控制字符/超长、 错误文案矩阵、argv 直传、start 立即返回、并发拒装、超时、nyai 缺失)。 - 重链 meow_launcherd 894940B/cea0a735(链 meow_ui.a 86800633,0 warning); fw_content.conf 同步钉值。
This commit is contained in:
1 parent
ebd64d07e1
commit
58cdb73bf8
8 files changed
+654
-108
No files matched your search
@@ -787,7 +787,23 @@ void meow_panel_off(void);
|
||||
void meow_panel_on(void);
|
||||
void meow_parse_app_json(FILE *f, struct app *a);
|
||||
int meow_pkg_export(const char *pkg, const char *out_path);
|
||||
int meow_pkg_install(const char *mpk_path);
|
||||
/* ---- M42:包安装(唯一实现 = /usr/bin/nyai,launcherd 只做入口预检 + 异步执行 + 错误文案)----
|
||||
* 安装流的解包/清单/footer/验签(meow_verify)/防降级/部署/清理全在 nyai;本模块不解析包内容。
|
||||
* nyai 路径 env MEOW_NYAI_BIN 覆写(缺省 /usr/bin/nyai,不依赖 PATH)。 */
|
||||
#define MEOW_PKG_E_PATH (-1) /* 入口路径预检失败(文案见 meow_pkg_install_error) */
|
||||
#define MEOW_PKG_E_NYAI (-2) /* nyai 不可执行 / pipe/fork 失败 */
|
||||
#define MEOW_PKG_E_FAIL (-3) /* nyai 返回非 0 */
|
||||
#define MEOW_PKG_E_TIMEOUT (-4) /* 超时并已终止子进程 */
|
||||
#define MEOW_PKG_E_BUSY (-5) /* 已有一次安装在跑 */
|
||||
#define MEOW_PKG_INSTALL_TIMEOUT_MS 180000
|
||||
int meow_pkg_install(const char *path); /* 同步:0=成功;<0=MEOW_PKG_E_* */
|
||||
int meow_pkg_install_start(const char *path); /* 异步启动:0=已启动;<0 同左 */
|
||||
int meow_pkg_install_poll(int *rc); /* 1=运行中 0=结束(*rc) -1=无任务 */
|
||||
int meow_pkg_install_busy(void); /* 1=有安装在跑(UI 据此禁双击) */
|
||||
const char *meow_pkg_install_error(void); /* 最近一次失败的可读文案(永不 NULL) */
|
||||
/* 纯逻辑(宿主单测 test_pkg_install.c):路径预检 / 退出码→可读文案 */
|
||||
int meow_pkg_install_check_path(const char *path, char *err, int n);
|
||||
void meow_pkg_install_error_text(int rc, const char *detail, char *out, int n);
|
||||
void meow_sys_light(void);
|
||||
void meow_sys_refresh(void);
|
||||
void meow_toggle_panel(void);
|
||||
|
||||
Reference in new issue
Block a user