无忧启动论坛

标题: builtin_cmd 等问题,chenall 请进 [打印本页]

作者: 不点    时间: 2015-9-5 17:51
标题: builtin_cmd 等问题,chenall 请进

  1. int
  2. builtin_cmd (char *cmd, char *arg, int flags)
  3. {
  4.         struct builtin *builtin1 = 0;

  5.         if (cmd == NULL)
  6.         {
  7.                 return run_line (arg, flags);
  8.         }

  9.         if (substring(cmd,"exec",1) == 0)
  10.                 return command_func(arg, flags);

  11.         builtin1 = find_command (cmd);

  12.         if ((int)builtin1 != -1)
  13.         {
  14.                 if (! builtin1 || ! (builtin1->flags & flags))
  15.                 {
  16.                         errnum = ERR_UNRECOGNIZED;
  17.                         return 0;
  18.                 }
  19.                 else
  20.                 {
  21.                         return (builtin1->func) (arg, flags);
  22.                 }
  23.         }
  24.         else
  25.                 return command_func (cmd, flags);
  26. }
复制代码


其功能用法,能详细解释一下吗?

最后一条语句,当 cmd 不是内置命令的时候,执行 command_func (cmd, flags),那么这就把 arg 参数扔掉了。这是不是一个 bug?或者是此时就应该忽略 arg 参数?




另外还有个问题一并提出来。我发现当 bios 数据区的软盘个数为 0 的时候,软盘就不可访问了。这是错误的呀。不知究竟是我弄错的,还是谁弄错的,这应该纠正啊。

bios 数据区的软盘个数,只能控制 find 命令要不要查找软盘,不能控制用其他命令访问软盘。

硬盘的情况也一样,硬盘个数只能限制 find 命令的行为,不能去限制其他命令的访问。

比如说,无论软盘个数为 0 或 1, 除了 find 命令之外,其他命令照样可以访问 (fd1)、(fd2)、…… (fd127)。

同样地,无论硬盘个数为 0 或 1, 除了 find 命令之外,其他命令照样可以访问 (hd1)、(hd2)、…… (hd127)。

即使软盘个数为 0, 所有的软盘也都是可以访问的(只不过禁止 find 命令去访问罢了)。
即使硬盘个数为 0, 所有的硬盘也都是可以访问的(只不过禁止 find 命令去访问罢了)。




作者: chenall    时间: 2015-9-7 10:02
builtin_cmd本来只是用于调用内置命令

1.常规语法如下(这个命令必需是一个有效的并且符号运行条件的内部命令)
builtin_cmd(命令,参数,flags)

2.后面扩展了一下,增加了一个用法,命令为NULL,这时把参数作为一整行的grub4dos命令来执行.
builtin_cmd(NULL,命令,flags)

后面的这些其实是有点多余的,可以直接返回,这个相当于把 cmd作为一个外部命令来执行.
  1. else
  2.                 return command_func (cmd, flags);
复制代码





欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3