git-subtree-dir: sdk git-subtree-mainline:17a972d46fgit-subtree-split:2e7561d74f
54 lines
3.5 KiB
C
54 lines
3.5 KiB
C
/*
|
||
* meow_ui_config.h — SDK 应用配置读写(§9.2,meow_config_*,M2.x 最小可用版)。
|
||
*
|
||
* 原 meow_ui.h 拆分的一部分(config 模块)。App 自有配置读写:与系统设置 meow_settings_*
|
||
* (板载 settings.conf、系统级、带 schema)明确区分——这是单个 App 自己的键值偏好,
|
||
* 落 TF 数据目录,不占板载、无 schema。返回码 MEOW_CFG_* 见下。
|
||
*/
|
||
#ifndef MEOW_UI_CONFIG_H
|
||
#define MEOW_UI_CONFIG_H
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
/* meow_config_*(§9.2)专用返回码。数值与 MEOWOS_API.md §1 的同名错误码一致,
|
||
* 但用 meow_cfg 前缀——因为 MEOW_OK/MEOW_ERR_* 这个命名空间已被共享协议头
|
||
* meow_ipc.h(枚举)与 launcher meow_settings.h(宏)占用,SDK 的 meow_notify_ipc.c
|
||
* 同 TU include meow_ui.h + meow_ipc.h,若在此定义同名宏会导致「宏展开枚举标识符」冲突。 */
|
||
#define MEOW_CFG_OK 0 /* 成功 */
|
||
#define MEOW_CFG_ERR_INVAL -1 /* 参数/取值非法(空 key、NULL out、outsz<=0 等) */
|
||
#define MEOW_CFG_ERR_NOENT -2 /* 键未设/文件不存在 */
|
||
#define MEOW_CFG_ERR_IO -5 /* 读写(存储/文件)失败 */
|
||
#define MEOW_CFG_ERR_NOMEM -6 /* 路径超长 */
|
||
#define MEOW_CFG_ERR_NODEV -10 /* 无数据目录(卡不在/只读/不可建) */
|
||
|
||
/* ============================================================ */
|
||
/* §9.2 应用配置读写(meow_config_*,M2.x 最小可用版) */
|
||
/* ============================================================ */
|
||
/* App 自有配置读写:与系统设置 meow_settings_*(板载 settings.conf、系统级、带 schema)
|
||
* 明确区分——这是单个 App 自己的键值偏好,落 TF 数据目录,不占板载、无 schema。
|
||
*
|
||
* - 数据目录:优先 env MEOW_DATA_DIR(launcher 注入 /usr/data/mnt/sd_0/MeowData/<pkg>/data,
|
||
* 见 app_launcher.c launch_app);无 env(手动跑/宿主测/无卡)回退 /tmp/meowcfg_<pid>
|
||
* (非持久但仍可写)。meow_config_dir() 返回最终目录;空/不可建返回 NULL。
|
||
* - 文件布局:每键一小文件 <data>/<sanitized_key>.cfg,内容=值字符串(空串=0 字节文件)。
|
||
* key 只允许 [A-Za-z0-9._-],其余字符替换为 '_'(杜绝路径穿越);key 上限 64。
|
||
* - 轻量:每次 get 读文件(App 配置小),不做大内存缓存;pthread_once 惰性初始化目录。
|
||
* - 失败降级:无数据目录/写失败 → 返回负错误码(见上 MEOW_CFG_ERR_*),不崩不阻塞。
|
||
*
|
||
* 返回码:MEOW_CFG_OK(0) 成功;(set) 负=失败;(get) MEOW_CFG_ERR_NOENT(-2)=键未设/文件不存在;
|
||
* meow_config_int/bool 对任何非 MEOW_CFG_OK 一律返回 def。
|
||
* 错误码数值同 MEOWOS_API.md §1 / meow_settings_*(MEOW_ERR_*)一致,便于 App 习惯。 */
|
||
const char *meow_config_dir(void); /* 当前 App 数据目录(data);空/不可建 NULL */
|
||
int meow_config_set(const char *key, const char *val);/* 写 <data>/<key>.cfg;成功 MEOW_CFG_OK(0) */
|
||
int meow_config_get(const char *key, char *out, int outsz); /* 读;未设/不存在返回 MEOW_CFG_ERR_NOENT */
|
||
int meow_config_int(const char *key, int def); /* 便捷 int;未设/非法返回 def */
|
||
int meow_config_bool(const char *key, int def); /* 便捷 bool;未设/非法返回 def */
|
||
void meow_config_remove(const char *key); /* 删键(无该键/无目录则静默) */
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
#endif /* MEOW_UI_CONFIG_H */
|