[PATCH] realpath stack usage 8k -> 4k
Carmelo AMOROSO
carmelo.amoroso at st.com
Thu May 8 09:12:05 UTC 2008
Denys Vlasenko wrote:
> On Wednesday 07 May 2008 21:06, Denys Vlasenko wrote:
>
> [SNIP]
>
>
>> or to stop testing buffer's contents?
>>
>
> this way:
>
> --- test-canon-old.c Wed May 7 21:22:49 2008
> +++ test-canon.c Wed May 7 21:25:14 2008
> @@ -72,17 +72,9 @@
> {"foobar", 0, "./foobar", ENOENT},
> {".", "."},
> {"./foobar", 0, "./foobar", ENOENT},
> -#ifdef __UCLIBC__
> - /* we differ from glibc here, but POSIX allows it as it says that if we did
> - * not successfuly complete, the value of resolved_path is undefined */
> - {"SYMLINK_LOOP", 0, "", ELOOP},
> + {"SYMLINK_LOOP", 0, 0, ELOOP},
> /* 15 */
> - {"./SYMLINK_LOOP", 0, "", ELOOP},
> -#else
> - {"SYMLINK_LOOP", 0, "./SYMLINK_LOOP", ELOOP},
> - /* 15 */
> - {"./SYMLINK_LOOP", 0, "./SYMLINK_LOOP", ELOOP},
> -#endif
> + {"./SYMLINK_LOOP", 0, 0, ELOOP},
> {"SYMLINK_1", "."},
> {"SYMLINK_1/foobar", 0, "./foobar", ENOENT},
> {"SYMLINK_2", "/etc"},
> @@ -191,7 +183,8 @@
> continue;
> }
>
> - if (!check_path (buf, tests[i].out ? tests[i].out : tests[i].resolved))
> + if ((tests[i].out || tests[i].resolved)
> + && !check_path (buf, tests[i].out ? tests[i].out : tests[i].resolved))
> {
> printf ("%s: flunked test %d (expected resolved `%s', got `%s')\n",
> argv[0], i, tests[i].out ? tests[i].out : tests[i].resolved,
>
>
>
>> Your pick.
>>
>
> --
> vda
>
Hi Denys,
I looked better at realpath man page and your implementation...
well I think that we should only fix the test not testing for buffer
contents (that in undefined)
when the realpath fails... so i'd use 'result' instead of test[i].out or
test[i].resolved...
something like that
- if (!check_path (buf, tests[i].out ? tests[i].out : tests[i].resolved))
+ if (result && !check_path (buf, tests[i].out ? tests[i].out : tests[i].resolved))
{
printf ("%s: flunked test %d (expected resolved `%s', got `%s')\n",
argv[0], i, tests[i].out ? tests[i].out : tests[i].resolved,
So, if realpath return result==NULL (it means it is failing), then
do not check buffern content and go on to check the errno for ELOOP
Do you agree ?
Let's keep your implementation for realpath ;-)
Thanks,
Carmelo
More information about the uClibc
mailing list