On Monday 26 January 2009 04:30:36 pm Wolfgang Denk wrote: > Dear E Robertson, > > In message <200901261453.10434.e.robertson....@gmail.com> you wrote: > > It seems that sprintf() is modifying at least two bytes from the source > > and I have duplicate this with different varibles. > > For instance, I have a mac address defined as unsigned char [6]: > > Doing the following sets the environment variable correctly, however > > bytes [0] and [1], are modified at the source. > > > > sprintf(env_ethaddr,"%02X:%02X:%02X:%02X:%02X:%02X", MACAddress[0], > > MACAddress[1], > > MACAddress[2], MACAddress[3], > > MACAddress[4], MACAddress[5]); > > > > Has anyone noticed this before? > > I don't think the machine matters but I am building for an arm at91. > > Hmm... I think I wouldbe surprised. What exactly does your test code > look like? > > I tried this one: > > ... > unsigned char buf[128]; > unsigned char a[6] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, }; > int i; > ... > printf ("Before: "); for (i=0; i<6; ++i) printf (" %02X",a[i]); putc > ('\n'); sprintf (buf, "%02X:%02X:%02X:%02X:%02X:%02X", a[0], a[1], a[2], > a[3], a[4], a[5]); printf ("After: "); for (i=0; i<6; ++i) printf (" > %02X",a[i]); putc ('\n'); printf ("buf=\"%s\"\n", buf); > ... > > And this is what I got: > > Before: 11 22 33 44 55 66 > After: 11 22 33 44 55 66 > buf="11:22:33:44:55:66" >
Hi, I did the following: memcpy (gd->bd->bi_enetaddr, MACAddress, sizeof(gd->bd->bi_enetaddr)); memcpy (dupMACAddress, MACAddress, sizeof(dupMACAddress)); printf("Before %02X:%02X:%02X:%02X:%02X:%02X\n",dupMACAddress[0], dupMACAddress[1], dupMACAddress[2], dupMACAddress[3], dupMACAddress[4], dupMACAddress[5]); sprintf(env_ethaddr,"%02X:%02X:%02X:%02X:%02X:%02X",dupMACAddress[0], dupMACAddress[1], dupMACAddress[2], dupMACAddress[3], dupMACAddress[4], dupMACAddress[5]); printf("After %02X:%02X:%02X:%02X:%02X:%02X\n",dupMACAddress[0], dupMACAddress[1], dupMACAddress[2], dupMACAddress[3], dupMACAddress[4], dupMACAddress[5]); printf("ethaddr %02X:%02X:%02X:%02X:%02X:%02X\n",gd->bd->bi_enetaddr[0], gd->bd->bi_enetaddr[1], gd->bd->bi_enetaddr[2], gd->bd->bi_enetaddr[3], gd->bd->bi_enetaddr[4], gd->bd->bi_enetaddr[5]); and I got this: Before 00:04:A6:00:6A:E6 After 36:00:A6:00:6A:E6 ethaddr 00:04:A6:00:6A:E6 Alse env_ethaddr has the correct correct. I make a duplicate before did the sprintf. I'm also on v 1.3.4 and haven't tried it on the latest git. > > Looks sane to me... > > Best regards, > > Wolfgang Denk
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot