无忧启动论坛
标题:
yaya 看,动态 VHD 更新出现 bug
[打印本页]
作者:
不点
时间:
2019-3-24 18:40
标题:
yaya 看,动态 VHD 更新出现 bug
原始讨论在 reboot.pro:
http://reboot.pro/topic/21972-reducing-wimboot-source-wim-file-using-lzx-compression-and-vhd-using-gzip-compression-to-save-room-and-also-load-faster-on-ram/page-2
第 50 楼 karyonix 的发言:
See the diff of stage2/dec_vhd.c in 2017-12-23.
https://github.com/chenall/grub4dos/commit/05379e7b66b71e5665bc5bedda75a58ca74c485a#diff-8f02b0c8853e02d562dc585d418454e3
The codes to read hard disk footer in line 185 and read dynamic disk header in line 209 were just "disabled".
有问题的更动如下:
stage2/dec_vhd.c
@@ -182,7 +182,7 @@ dec_vhd_open(void)
memset(&footer, 0, sizeof(footer));
memset(&dynaheader, 0, sizeof(dynaheader));
- int bytesread = (int)grub_read((unsigned long)&footer, 0x200, 0xedde0d90);
+ //int bytesread = (int)grub_read((unsigned long)&footer, 0x200, 0xedde0d90);
//if (bytesread < 511) {
// grub_printf("bytesread %d < 511\n",bytesread);
@@ -206,7 +206,7 @@ dec_vhd_open(void)
goto quit;
}
filepos = footer.dataOffset;
- bytesread = (int)grub_read((unsigned long)&dynaheader, sizeof(dynaheader), 0xedde0d90);
+ //bytesread = (int)grub_read((unsigned long)&dynaheader, sizeof(dynaheader), 0xedde0d90);
// }
vhdfc = (VHDFileControl*) grub_malloc(sizeof(VHDFileControl));
复制代码
这个更动导致动态 VHD 不再能够支持了。
作者:
2011yaya2007777
时间:
2019-3-24 21:46
这个不是我修改的。之所以注释掉,可能有他的道理。也许是为了解决某一问题,而引起现在这个现象。如果采取简单的办法,恢复补丁,可能又重现以前的问题。
作者:
不点
时间:
2019-3-24 22:17
原始代码是谁写的?如果知道的话,可以联系原始作者。
如果不是你修改的,那有可能是 chenall 修改的。
我觉得你可以试着修复,修复坏了再改回来也没啥要紧的。
另外,也可留意那个讨论,说不定有人会给出修复,也未可知。
作者:
不点
时间:
2019-3-24 22:36
本帖最后由 不点 于 2019-3-24 22:47 编辑
我猜一下。估计是这样的:
bytesread 变量只被赋值,而未被其它地方使用,因此,编译器可能提示这是个没用的变量。修改的人(不管是谁修改的)为了让编译器不报警,就简单注释掉了。
虽然这个变量确实没用,但是,注释掉的话,连同 grub_read 读盘调用也一起注释掉了,那么缓冲区 footer 和 dynaheader 都没有填充有效数据,显然这两个变量(footer 和 dynaheader)也就都废掉了。因此,简单注释掉是不行的。
为了让编译器不报警,可以增添一句:
bytesread =
bytesread;
这一句 “废话”,可以让
bytesread 有被用到一次,这样编译器就不会报警了。
gcc 会把这句废话优化掉。因此,添上这句,不增加生成的代码大小。
作者:
2011yaya2007777
时间:
2019-3-25 09:31
昨天是从手机看的这个帖子,打不开补丁文件。今天从电脑上网,打开补丁文件一看,确实是我更改的。正如不点说言,由于编译时报警,说 bytesread 未使用,就给注释掉来,没有考虑 grub_read 读盘。不好意思!
作者:
2011yaya2007777
时间:
2019-3-25 10:41
已经修正,上传官网。有劳不点通知一下reboot.pro。
作者:
不点
时间:
2019-3-25 11:38
2011yaya2007777 发表于 2019-3-25 09:31
昨天是从手机看的这个帖子,打不开补丁文件。今天从电脑上网,打开补丁文件一看,确实是我更改的。正如不点 ...
是你就好。那么问题也就解决了。
我猜中了 gcc 报警的场景。
我这就去 reboot.pro 给个消息。
作者:
不点
时间:
2019-3-26 11:38
来自 reboot.pro 的反馈说,新版现在工作得很好。
作者:
2011yaya2007777
时间:
2019-3-26 12:48
解决了就好
作者:
cchessbd
时间:
2019-3-27 10:36
本帖最后由 cchessbd 于 2019-3-27 10:40 编辑
不点大大真是太牛了。连编译器在想什么都能猜出来。服。
欢迎光临 无忧启动论坛 (http://wuyou.net/)
Powered by Discuz! X3.3