Re: [PATCH] sprintf modifiers in usr/gen_init_cpio.c

From: Pragnesh Sampat
Date: Tue Feb 17 2004 - 23:11:28 EST


On Tue, 2004-02-17 at 19:44, Andrew Morton wrote:
> Pragnesh Sampat <pragnesh.sampat@xxxxxxxxxxx> wrote:
> >
> > The file initramfs_data.cpio is slightly different when generated on
> > cygwin, compared to linux, which causes the kernel to panic with the
> > message "no cpio magic" (See Documentation/early-userspace/README).
> >
> > The problem in cpio generation is due to the difference in sprintf
> > modifiers on cygwin. The code uses "%08ZX" for strlen of a device
> > node. printf man pages discourages "Z" and has 'z' instead.
> > Both of these are not available on cygwin sprintf (at least some
> > versions of cygwin). The net result of all of this is that the
> > generated file literally contains "ZX" and then the strlen after that
> > and messes up that 110 offset etc. The file is 516 bytes long on the
> > system that I tested and on linux it is 512 bytes.
> >
> > The fix below just uses "%08X" for that field. Any basic portable
> > modifier should be ok, I think.
>
> ugh, OK.
>
> We'll also need to cast the return value of strlen to the correct type. On
> ppc64 (at least) size_t is 8 bytes and the printf will otherwise grab the wrong
> things off the stack.

[ Removed the patch ]

Yes, agree with your change, I think all 64 bit archs using
longs/pointer = 8 probably benefit from the cast. Thanks,

-Pragnesh

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/