On Mon, 22 Dec 2025 18:56:49 +0800 Li Wang liwang@redhat.com wrote:
It reality scanf() is 'not the function you are lookign for'.
IIRC the 'SUS' (used to) say that this was absolutely fine for command line parsing for 'standard utilities'.
It is best to use strtoul() and check the 'end' character is '\0'.
Hmm, that sounds like we need to go back to the patch V1 [1] method. But I am not sure, @Andrew Morton, do you think so?
--- a/tools/testing/selftests/mm/write_to_hugetlbfs.c +++ b/tools/testing/selftests/mm/write_to_hugetlbfs.c @@ -86,10 +86,17 @@ int main(int argc, char **argv) while ((c = getopt(argc, argv, "s:p:m:owlrn")) != -1) { switch (c) { case 's':
if (sscanf(optarg, "%zu", &size) != 1) {perror("Invalid -s.");
char *end = NULL;unsigned long tmp = strtoul(optarg, &end, 10);if (errno || end == optarg || *end != '\0') {perror("Invalid -s size"); exit_usage(); }if (tmp == 0) {perror("size not found");exit_usage();}size = (size_t)tmp; break; case 'p':
Geeze guys, it's just a selftest.
hp2:/usr/src/linux-6.19-rc1> grep -r scanf tools/testing/selftests | wc -l 177
if your command line breaks the selftest, fix your command line?