On 18 September 2011 20:51, Alexander Gordeev <lasa...@lvk.cs.msu.su> wrote: > В Fri, 16 Sep 2011 18:06:15 +0300 > Roman Yeryomin <leroi.li...@gmail.com> пишет: > >> On 16 September 2011 17:51, Alexander Gordeev <lasa...@lvk.cs.msu.su> wrote: >> > В Fri, 16 Sep 2011 17:41:37 +0300 >> > Roman Yeryomin <leroi.li...@gmail.com> пишет: >> > >> >> On 16 September 2011 01:40, Alexander Gordeev <lasa...@lvk.cs.msu.su> >> >> wrote: >> >> > В Fri, 26 Aug 2011 04:30:43 +0300 >> >> > Roman Yeryomin <leroi.li...@gmail.com> пишет: >> >> > >> >> >> This method is much more stable than reading dd's output via stdin. >> >> > >> >> > What kind of problems do you have with piping dd's output to stdin? >> >> > >> >> >> >> It outputs garbage very frequently and maccalc fails to convert the >> >> mac (and as a consequence uci-default script fails to set the real mac >> >> address). Try dd without piping to maccalc and you'll see. >> >> I've noticed this bug on ramips platform and can't say anything about >> >> other boards. >> > >> > Well, then this is probably a bug in dd? Or uClibc? Or kernel? >> > Ok, I'll try to reproduce it. Can you please tell me what exactly is >> > happening? >> > >> >> Two different reads: >> root@OpenWrt:/# dd bs=1 skip=262148 count=6 if=/dev/mtd0 >> "u�������6+0 records in >> 6+0 records out >> root@OpenWrt:/# dd bs=1 skip=262148 count=6 if=/dev/mtd0 >> "u���6+0 records in >> 6+0 records out >> >> I don't think this is the bug in dd/kernel/uclibc - it would probably >> expose when writing to a file too. >> Maybe it's something with busybox. I'm not sure of cause. > > The bug is in maccalc. It does a single read() and expects to get > everything in one shot which doesn't happen sometimes. The patch is > attached. It fixes the problem according to my tests. > > I don't know whether Roman's change is necessary anymore. What do you > think, Roman? >
I think how it can be that you can't read 6 bytes from stdin in one attempt but can do it from file? It doesn't "happen sometimes", it's about 50 to 70% of failed reads. And it's not about the boards - I've tested on 3 completely different ones. I think that there is something to do with terminal translating binary information into something unexpected. I forgot to mention that error occurs when there are _more_ symbols in stdout (see above). Also note that in both reads there are exactly 6 bytes reported by dd. I'll test your patch. Regards, Roman _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel