LinuxSir.cn,穿越时空的Linuxsir!

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

为何hal无法探测出NTFS/FAT分区的中文标签?

[复制链接]
发表于 2009-10-5 21:01:35 | 显示全部楼层 |阅读模式
我使用的是KDE 4.3 。在 kubuntu/freebsd 中,都可以探测出我的NTFS/FAT分区的中文标签,可是在archlinux 中却探测不出中文标签,只是显示"5555"之类的数字。
请问怎么解决?
发表于 2009-10-5 21:53:50 | 显示全部楼层
Post by ashmer;2033377
我使用的是KDE 4.3 。在 kubuntu/freebsd 中,都可以探测出我的NTFS/FAT分区的中文标签,可是在archlinux 中却探测不出中文标签,只是显示"5555"之类的数字。
请问怎么解决?


在archlinux 使用src/hal-0.5.13/hald/linux/probing/probe-volume.c
freebsd 下可能使用src/hal-0.5.13/hald/freebsd/probing/probe-volume.c
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-5 21:58:30 | 显示全部楼层
Post by 沙漠之子;2033403
在archlinux 使用src/hal-0.5.13/hald/linux/probing/probe-volume.c
freebsd 下可能使用src/hal-0.5.13/hald/freebsd/probing/probe-volume.c


与hal的代码无关吧?同学的kubuntu中也是能够正确检测出中文标签的。

不清楚是哪里的配置问题。
回复 支持 反对

使用道具 举报

发表于 2009-10-5 22:33:30 | 显示全部楼层
Post by ashmer;2033407
与hal的代码无关吧?同学的kubuntu中也是能够正确检测出中文标签的。

不清楚是哪里的配置问题。


那你去卡看看ubuntu的patch http://patches.ubuntu.com/h/hal/hal_0.5.13-1ubuntu2.patch
回复 支持 反对

使用道具 举报

发表于 2009-10-5 22:47:25 | 显示全部楼层
可能是因为你编译bsd内核的时候选择了默认编码
回复 支持 反对

使用道具 举报

发表于 2009-10-5 23:04:24 | 显示全部楼层
用ubuntu的hal源文件和补丁编译 安装后也不行
难道还跟src/hal-0.5.13/debian/下的东东有关??

还有在hal在ubuntu的依赖信息中有
freebsd-utils

文件来自
https://launchpad.net/ubuntu/+source/hal
回复 支持 反对

使用道具 举报

发表于 2009-10-6 11:24:21 | 显示全部楼层
同样是这样的问题。记得1个多月前是可以的,以前是可以探测出如“DATA_数据2"之类的,但现在都是“DATA_551”之类的标签了。各位可以用#lshal来查一下你们的hal探测的中文标签正常不?
回复 支持 反对

使用道具 举报

发表于 2009-10-6 11:33:00 | 显示全部楼层
Post by luyaotang;2033536
同样是这样的问题。记得1个多月前是可以的,以前是可以探测出如“DATA_数据2"之类的,但现在都是“DATA_551”之类的标签了。各位可以用#lshal来查一下你们的hal探测的中文标签正常不?


早试过不行的
回复 支持 反对

使用道具 举报

发表于 2009-10-30 11:06:50 | 显示全部楼层
在src/hal-0.5.13/hald/linux/probing/probe-volume.c中有关赋值volume_label的代码如下
[PHP]      if (label[0] != '\0') {
            char *volume_label;

            /* we need to be sure for a utf8 valid label, because dbus accept only utf8 valid strings */
            volume_label = strdup_valid_utf8 (label);
            if( volume_label != NULL ) {
                  libhal_changeset_set_property_string (cs, "volume.label", volume_label);
                  HAL_DEBUG(("volume.label = '%s'", volume_label));

                  if (volume_label[0] != '\0') {
                        libhal_changeset_set_property_string (cs, "info.product", volume_label);
                        g_free(volume_label);
                        return;
                  }

                  g_free(volume_label);
            }
      }[/PHP]
[PHP]static gchar *
strdup_valid_utf8 (const char *str)
{
      char *endchar;
      char *newstr;
      unsigned int fixes;

      if (str == NULL)
            return NULL;

      newstr = g_strdup (str);

      fixes = 0;
      while (!g_utf8_validate (newstr, -1, (const char **) &endchar)) {
            *endchar = '_';
            ++fixes;
      }

      /* If we had to fix more than 20% of the characters, give up */
      if (fixes > 0 && g_utf8_strlen (newstr, -1) / fixes < 5) {
          g_free (newstr);
          newstr = g_strdup("");
      }

      return newstr;
}[/PHP]
回复 支持 反对

使用道具 举报

发表于 2009-10-30 21:25:25 | 显示全部楼层
热插拔U判是label 赋值的代码以找到
/src/hal-0.5.13/hald/linux/blockdev.c
[PHP]                volume_label = strdup_valid_utf8 (hotplug_event->sysfs.fslabel);
                if (volume_label) {
                        hal_device_property_set_string (d, "volume.label", volume_label);
                        if (volume_label[0] != '\0') {
                                hal_device_property_set_string (d, "info.product", volume_label);
                        }
                        g_free(volume_label);
                }[/PHP]
将volume_label = strdup_valid_utf8 (hotplug_event->sysfs.fslabel);改为
volume_label = g_convert (hotplug_event->sysfs.fslabel, 255, "UTF-8", "GBK", NULL, NULL, NULL);
初步实现 中文标签 但是不完整

比如我的u盘fat16的卷标:沙漠之子
最后显示为:沙漠之73

[HTML] $ -> lshal |grep 沙漠
  info.product = '沙漠之73'  (string)
  volume.label = '沙漠之73'  (string)
  volume.mount_point = '/media/沙漠之73'  (string)
[/HTML]
搞不懂是为什么:yun:

有能力的大大们也来帮忙研究一下亚 :yun::yun::yun:
回复 支持 反对

使用道具 举报

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

本版积分规则

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