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

Reply via email to