LinuxSir.cn,穿越时空的Linuxsir!

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

fcitx -c 产生的config出现乱码

[复制链接]
发表于 2010-1-17 17:00:54 | 显示全部楼层 |阅读模式
不知有没有其他人遇到相同的情形?

    $ killall fcitx
    $ fcitx -c
    $ cd .config/fcitx
( 用你最喜欢的editor 看看config, 就发觉config 是乱码的)。

跑到 ~fcitx/src/tools.c, 把SaveConfig 里的 "wt" 改成 "w" 就解决了。
 楼主| 发表于 2010-1-17 18:09:29 | 显示全部楼层
对不起,我再试了好几次,又觉得好像无关源码。需要多加测试才能肯定是那里出错。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-17 20:59:58 | 显示全部楼层
我知道怎么会发生这情形了:

比如说你有两个config, 一个是/usr/share/fcitx/data/config, 一个是~/.config/fcitx/config, 这两个config的内容是不一样的。然后 :-

    $ fcitx -c

fcitx 就把/usr/share/fcitx/data/config 抄到~/.config/fcitx/config, 这样~/.config/fcitx/config 就出现乱码。如果~/.config/fcitx/config是不存在,fcitx -c就不会造成一个乱码的config。当然,如果两个config内容一样,也不会有乱码。

(我猜fcitx抄一份config时并没有fclose已经fopen的config, 所以出现乱码。我没去看源码,所以纯属猜测。猜想说不定也是fcitx常崩溃的原因。)
回复 支持 反对

使用道具 举报

发表于 2010-1-18 00:04:56 | 显示全部楼层
可能是楼上所说的原因。
我这里也发生了一次,
但是删除后再生成的就没有问题了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-18 03:14:40 | 显示全部楼层
至少有这个虫吧:

源码里文件tools.c里, UserConfigFile是一个函数(function) 返回FILE*,但UserConfigFile 里边的FILE* 是从堆栈(stack) 中分配一个指针,可是堆栈变量(stack variable) 从栈函数返回后会被取消,这意味着UserConfigFile可以返回指向垃圾的东西( UserConfigFile returns a pointer pointing to garbage)。因此,无论任何函数调用到UserConfigFile都可能有问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-18 07:30:32 | 显示全部楼层
哈哈,再看看fcitx的其他源码,有好多函数(function)都有这毛病,不崩溃也都几难。;)
回复 支持 反对

使用道具 举报

发表于 2010-1-18 08:37:09 | 显示全部楼层
Post by kl522;2064977
至少有这个虫吧:

源码里文件tools.c里, UserConfigFile是一个函数(function) 返回FILE*,但UserConfigFile 里边的FILE* 是从堆栈(stack) 中分配一个指针,可是堆栈变量(stack variable) 从栈函数返回后会被取消,这意味着UserConfigFile可以返回指向垃圾的东西( UserConfigFile returns a pointer pointing to garbage)。因此,无论任何函数调用到UserConfigFile都可能有问题。
仔细看看,您说的应该不是一个问题,fp虽然是个局部变量,但是函数返回时,它的内容已经赋值给函数名。再者,假如您说的是对的,FILE*已经被销毁,那么后面的文件写入操作怎么可能导致文件乱码呢?
另外,fopen中的"w"和"wt"意思完全相同……
怎么没测试也没没有遇到乱码问题,确定不是编码问题?
如果说常崩溃,还是说明一下怎么样的操作才会崩溃比较好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-18 10:51:40 | 显示全部楼层
ok, 先不理源码。

除了我之外,至少realasking也碰到这情形。要测试,须要有两份差别相当大的config, 一份在/usr/share/fcitx/data 里,一份在~/.config/fcitx里。然后只要'fcitx -c' 就可了。情形如之前所说。
回复 支持 反对

使用道具 举报

发表于 2010-1-18 14:03:53 | 显示全部楼层
嗯,如果能够再现这个问题,能不能导致出错的配置文件作为附件发一份,这样也好调试一下~谢谢哈
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-18 16:01:58 | 显示全部楼层
两个config已经在zip 文件里。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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