LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1565|回复: 2

在读fcitx源代码时想到的一个问题

[复制链接]
发表于 2007-12-9 11:54:29 | 显示全部楼层 |阅读模式
以下代码在tools.c  void LoadProfile (void)函数中.


  1. strcpy (strPath, (char *) getenv ("HOME"));
  2.     strcat (strPath, "/.fcitx/profile");

  3.     fp = fopen (strPath, "rt");

  4.     if (fp) {
  5.         for (;;) {
  6.             if (!fgets (str, PATH_MAX, fp))
  7.                 break;

  8.             i = strlen (str) - 1;
  9.             while (str[i] == ' ' || str[i] == '\n')
  10.                 str[i--] = '\0';

  11.             pstr = str;

  12.             if (MyStrcmp (str, "版本=")) {
  13.                 pstr += 5;

  14.                 if (!strcasecmp (FCITX_VERSION, pstr))
  15.                     bRetVal = True;
  16.             }
  17.             else if (MyStrcmp (str, "主窗口位置X=")) {
  18.                 pstr += 12;

复制代码


一开始想到,getenv ()有时会返回NULL的吧,代码中没有检查.但想一想Home变量是一定存在的,好像不检查也可以. 这儿到底需要不需要检查一下getenv的返回值?


fp = fopen (strPath, "rt");这个地方,我觉得,如果打不开文件的话,是不是有个提示更好?如果用
if(fp),当fp==NULL时,不是都没提示?
发表于 2007-12-10 22:15:30 | 显示全部楼层
就我的看法,第一个地方,稳健的代码应该检查返回值,以应对特殊的情况,比如某种大小写敏感的操作系统的用户主目录是“home”,当然fcitx跨平台的要求没那么强烈;
而第二个地方,确实错误输出到标准错误管道或者log会更好。
回复 支持 反对

使用道具 举报

发表于 2007-12-18 12:58:37 | 显示全部楼层
还有一种没有HOME变量的情况:某个“贪玩”的用户把HOME变量unset掉了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表