On Fri 2020-07-03 15:23:38, Kars Mulder wrote: > > There ought to be one that returns a pointer to the first character > > that isn't converted - but I'm no expert on the full range of these > > functions. > > I've searched for a function that parses an int from a string and > stores a pointer to the end; I can find some function simple_strtoul > that matches this criterion, but it's documented as > > "This function has caveats. Please use kstrtoul instead." > > ... and kstrtoul does not store a pointer to the end. The documentation > of kstrtoul describes simple_strtoul as obsolete as well. Also, there's > no simple_strtou16 function. > > It seems that the standard C function strtoul has the behaviour you > describe as well, but this function is not defined in the kernel except > for certain specific architectures. > > > The problem with strdup() is you get the extra (unlikely) failure path. > > 128 bytes of stack won't be a problem if the function is (essentially) > > a leaf. > > Deep stack use is actually likely to be in the bowels of printf()) > > inside an obscure error path. > > The function already makes a call to kcalloc, so the unlikely out-of- > memory error path already exists; a second memory allocation just > makes it slightly less unlikely. The two new out-of-memory conditions > do happen at different points of the function though, making them > have different side effects. I could fix this by moving my code. > > As for this function being a leaf: keep in mind that this function has > the potential of calling printk in an obscure error condition (the user- > provided parameter being longer that 128 characters); quirks_param_set > calls param_set_copystring, which on its turn calls pr_err, which is a > macro for printk. > > Meanwhile, here's a patch for copying the parameter to the stack: Looks good, I guess Signed-off-by would be useful. Pavel -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany