mchome/dogcom

[bug report] openwrt 下realpath问题

FredyVia opened this issue · 5 comments

[bug report] openwrt 下realpath问题

表现:dogcom在openwrt中同时指定logpath,此时log会写入conf文件
realpath 在待转换文件为绝对路径,且不存在时,结果为第一次转换的结果,或者为空值

应该是openwrt 的 c库有问题,跟linux下不一样
这是测试程序

#include <stdlib.h>
#include <limits.h>
#include <stdio.h>

int main() {
  char path_tmp[PATH_MAX];

  //测试相对路径文件不存在时
  memset(path_tmp, '\0', sizeof(path_tmp));
  realpath("../somefile_not_exists", path_tmp);
  printf("文件不存在时的结果:%s\n", path_tmp);

  // 1.测试文件存在时
  memset(path_tmp, '\0', sizeof(path_tmp));
  realpath("/tmp/somefile_exists", path_tmp);
  printf("文件存在时的结果:%s\n", path_tmp);

  // 测试绝对路径文件不存在时,是否改变准备存放结果的变量:path_tmp
  memset(path_tmp, '\0', sizeof(path_tmp));
  printf("测试绝对路径文件不存在时,与上次测试相比是否改变准备存放结果的变量:path_tmp");
  realpath("/tmp/somefile_not_exists1", path_tmp);
  printf("%s\n", path_tmp);

  return 0;
}

不知道openwrt下怎么写 #ifdef,或者全部都判断下转换结果是否为空,为空则使用原值。

这是musl libc库的问题,glibc没有这个问题

musl>=1.2.2 已经修复该问题,只是oepnwrt 21.02 使用了旧版本的musl libc库(1.2.1),openwrt master 分支也是用的修复后的1.2.2,详细见:
https://git.musl-libc.org/cgit/musl/tree/src/misc/realpath.c?h=v1.2.1
https://git.musl-libc.org/cgit/musl/commit/src/misc/realpath.c?id=29ff7599a448232f2527841c2362643d246cee36