Hi Sven,
do you have a small C test case which might show the failure?
It would be a nice addition to uClibc-ng testsuite if it show the
failure.
best regards
Waldemar
Sven Linker wrote,
> Hi,
>
> I stumbled upon the following code in tempname.c:
>
> switch (kind) {
> case __GT_NOCREATE:
> {
> struct stat st;
> if (stat (tmpl, &st) < 0) {
> if (errno == ENOENT) {
> fd = 0;
> goto restore_and_ret;
> } else
> /* Give up now. */
> return -1;
> } else
> fd = 0;
> }
> case __GT_FILE:
> fd = open (tmpl, O_RDWR | O_CREAT | O_EXCL | flags,
> mode);
> break;
>
>
> I am baffled by the 'else' branch of the check of 'stat (tmpl, &st) <
> 0'.
> If I understand the whole thing correctly, this is an error case,
> where
> a file with the temporary name already exists. But instead, the whole
> execution falls through to the __GT_FILE branch, and actually opens the
> file.
>
> If this happens, this file never seems to be closed again (see for
> example
> the usage in tmpnam_r.c:30:
>
> char * tmpnam_r (char *s)
> {
> if (s == NULL)
> return NULL;
>
> if (__path_search (s, L_tmpnam, NULL, NULL, 0))
> return NULL;
> if (__gen_tempname (s, __GT_NOCREATE, 0, 0, 0))
> return NULL;
>
> return s;
> }
>
> I would suppose that instead of falling to the next switch-case, we
> should return with a non-zero value (maybe '1' to distinguish it from
> the general error case?).
>
> Am I missing something basic?
>
> Cheers,
> Sven
> --
> Sven Linker
> Tel.: +49 351 41883243
> Kernkonzept GmbH at Dresden, Germany,
> HRB 31129, CEO Dr.-Ing. Michael Hohmuth
>
>
> _______________________________________________
> devel mailing list -- [email protected]
> To unsubscribe send an email to [email protected]
_______________________________________________
devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]