Hi Roland, On Mon, 26 Jul 2021 at 02:11, Roland Gaudig (OSS) <[email protected]> wrote: > > Hi Simon, > > On 23.07.21 21:41, Simon Glass wrote: > > On Fri, 23 Jul 2021 at 06:30, Roland Gaudig > > <[email protected]> wrote: > >> > >> From: Roland Gaudig <[email protected]> > >> > >> Import printf.c from the Busybox project, which provides Bash like > >> format string handling. > >> > >> src-url: https://git.busybox.net/busybox/ > >> commit bcc5b0e6caca6c7602a6a41f "Bump version to 1.33.1" > >> version: 1.33.1 > >> > >> Signed-off-by: Roland Gaudig <[email protected]> > >> --- > >> > >> (no changes since v1) > >> > >> cmd/printf.c | 455 +++++++++++++++++++++++++++++++++++++++++++++++++++ > >> 1 file changed, 455 insertions(+) > >> create mode 100644 cmd/printf.c > > > > I think I missed the discussion on this. > > Short summary: We wanted to pass a U-Boot environment variable which > contained a hexadecimal value to the kernel bootargs which required a > decimal value. Therefore I created a dec operator to the setexpr command > for converting a value to decimal. Then came the proposal to use a > format string instead of a dec operator. To keep codesize low I > implemented a very limited version, allowing only one argument. Then > came the request to make it more flexible like its Bash counterpart and > allowing multiple arguments. This is what this version tries to do. > > > Why can we not use U-Boot's existing printf()? > > The existing printf in the lib directroy implements the C library > function, whereas my cmd printf implements a Bash like printf. > Both are on the first glance similar but behave differently in detail. > The C printf requires, that the requested format matches the type of > the argument. If I for example request a %s format and pass an int > type bad things will happen. > > In contrast the shell does not have such a strict concept of types, > when requesting a %d format the argument might contain a string > representing a Number. Therefore the shell printf implementation > has to convert this string first into an integer variable, which > then can be passed to the C lib printf function. > > > If we can't, dot we need to remove the existing U-Boot printf()? > > Again, sorry if I missed some discussion. > > No, we can't. The cmd printf is only a front-end performing the > necessary conversion. It is relying on the lib printf, which does the > actual work.
OK. I think you should add some comments to the top of both impls explaining their purpose and why they are separate from the other one. Regards, Simon

