fix(watchdog): wd_vol_save 不再 O_TRUNC 毁 settings.conf(改读改写单键+去重,与SDK同款语义) — 真机实证整文件被抹/重复行/丢max+step。test_wd_fw 17/17 PASS; 52f2dadd 已热更 /usr/data/meow_watchdog
This commit is contained in:
1 parent
56c569f3a9
commit
104bfe2d21
4 files changed
+30
-9
No files matched your search
Binary file not shown.
@@ -367,17 +367,38 @@ static void wd_vol_write(int pct)
|
|||||||
wd_log("DAC vol -> L/R=%d (pct %d)", dac, pct);
|
wd_log("DAC vol -> L/R=%d (pct %d)", dac, pct);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* M2.92+ 修复(真机实证 settings.conf 被毁):旧版 O_TRUNC 整文件重写只剩 4 行 ——
|
||||||
|
* 抹掉全部其它设置;与其它写者交错还叠出重复 audio.volume 行、丢 volume_max/step。
|
||||||
|
* 改为读改写单键(流式拷贝、命中行全部改写去重、缺失末尾追加、rename 原子替换),
|
||||||
|
* 与 SDK meow_ui_vol_set 同款语义。 */
|
||||||
static void wd_vol_save(void)
|
static void wd_vol_save(void)
|
||||||
{
|
{
|
||||||
system("mkdir -p /usr/data/meow 2>/dev/null");
|
system("mkdir -p /usr/data/meow 2>/dev/null");
|
||||||
int fd = open(MEOW_SETTINGS_FILE, O_WRONLY | O_CREAT | O_TRUNC, 0644);
|
const char *path = MEOW_SETTINGS_FILE;
|
||||||
if (fd < 0) { wd_log("vol: open %s fail: %s", MEOW_SETTINGS_FILE, strerror(errno)); return; }
|
char tmp[300];
|
||||||
char buf[128];
|
snprintf(tmp, sizeof tmp, "%s.tmp", path);
|
||||||
int l = snprintf(buf, sizeof buf,
|
FILE *in = fopen(path, "r");
|
||||||
"# meow-settings 1\naudio.volume = %d\naudio.volume_max = %d\naudio.volume_step = %d\n",
|
FILE *out = fopen(tmp, "w");
|
||||||
wd_vol, wd_vol_max, wd_vol_step);
|
if (!out) { if (in) fclose(in); wd_log("vol: save open tmp fail"); return; }
|
||||||
if (write(fd, buf, l) < 0) wd_log("vol: write fail: %s", strerror(errno));
|
int found = 0;
|
||||||
close(fd);
|
char line[256];
|
||||||
|
while (in && fgets(line, sizeof line, in)) {
|
||||||
|
char *eq = strchr(line, '=');
|
||||||
|
char *k = line;
|
||||||
|
while (*k == ' ' || *k == '\t') k++;
|
||||||
|
int n = eq ? (int)(eq - k) : 0;
|
||||||
|
while (n > 0 && (k[n-1] == ' ' || k[n-1] == '\t')) n--;
|
||||||
|
if (eq && n == 12 && strncmp(k, "audio.volume", 12) == 0) {
|
||||||
|
if (!found) fprintf(out, "audio.volume = %d\n", wd_vol); /* 命中:只写一次(去重) */
|
||||||
|
found = 1;
|
||||||
|
} else {
|
||||||
|
fputs(line, out);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (in) fclose(in);
|
||||||
|
if (!found) fprintf(out, "audio.volume = %d\n", wd_vol);
|
||||||
|
fclose(out);
|
||||||
|
if (rename(tmp, path) != 0) { remove(tmp); wd_log("vol: save rename fail"); return; }
|
||||||
wd_log("vol: saved volume=%d(max=%d,step=%d)", wd_vol, wd_vol_max, wd_vol_step);
|
wd_log("vol: saved volume=%d(max=%d,step=%d)", wd_vol, wd_vol_max, wd_vol_step);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -29,7 +29,7 @@
|
|||||||
# ---- 用户态/服务守护二进制(usr/bin,全部 chmod 755 静态 MIPS)----
|
# ---- 用户态/服务守护二进制(usr/bin,全部 chmod 755 静态 MIPS)----
|
||||||
patch_v2/bootmenu/meow_bootmenu|/usr/bin/meow_bootmenu|4441822d87e76bfce2ce584604ac3830|引导选单 M2.85(sysui让位 agent-216)
|
patch_v2/bootmenu/meow_bootmenu|/usr/bin/meow_bootmenu|4441822d87e76bfce2ce584604ac3830|引导选单 M2.85(sysui让位 agent-216)
|
||||||
patch_v2/meow_launcherd/meow_launcherd|/usr/bin/meow_launcherd|6de9762881245a57f547d53102e996be|主屏 launcher M2.92(NP页死循环/电源键/自动息屏修复+充电闪电图标+255插孔消抖并入)
|
patch_v2/meow_launcherd/meow_launcherd|/usr/bin/meow_launcherd|6de9762881245a57f547d53102e996be|主屏 launcher M2.92(NP页死循环/电源键/自动息屏修复+充电闪电图标+255插孔消抖并入)
|
||||||
patch_v2/meow_watchdog/meow_watchdog|/usr/bin/meow_watchdog|baa997ea9100b04e1cc96e25c16f7e4b|应用看门狗(插孔消抖:插拔瞬态忽略音量键 800ms;M2.89 SIGUSR1 仅裸沉浸 App)
|
patch_v2/meow_watchdog/meow_watchdog|/usr/bin/meow_watchdog|52f2dadd6e14a571bb60f48582a2ba66|应用看门狗 M2.93(+wd_vol_save 不再 O_TRUNC 毁设置文件, 改读改写单键去重)
|
||||||
patch_v2/meow_svcd/meow_svcd|/usr/bin/meow_svcd|605646c4cc93f2baf29071ea6bc870ea|服务管理器 M2.77(+崩溃上报 meow_crash agent-187)
|
patch_v2/meow_svcd/meow_svcd|/usr/bin/meow_svcd|605646c4cc93f2baf29071ea6bc870ea|服务管理器 M2.77(+崩溃上报 meow_crash agent-187)
|
||||||
mips-repo/bins/meow_mdns/bin/meow_mdns|/usr/bin/meow_mdns|d6b0151bda26768f19952dae1342610d|mDNS 应答器 M2.78(启动竞态+换IP重检 agent-194)
|
mips-repo/bins/meow_mdns/bin/meow_mdns|/usr/bin/meow_mdns|d6b0151bda26768f19952dae1342610d|mDNS 应答器 M2.78(启动竞态+换IP重检 agent-194)
|
||||||
patch_v2/meow_sysui/meow_sysui|/usr/bin/meow_sysui|173013cc8f0899b3001d0b894ac0d9e6|系统 UI(sysui)
|
patch_v2/meow_sysui/meow_sysui|/usr/bin/meow_sysui|173013cc8f0899b3001d0b894ac0d9e6|系统 UI(sysui)
|
||||||
|
|||||||
Reference in new issue
Block a user