Deprecate readdir_r, readdir64_r [BZ #19056]
This commit is contained in:
parent
8d9c92017d
commit
7584a3f96d
|
@ -1,3 +1,11 @@
|
||||||
|
2016-02-20 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
|
[BZ #19056]
|
||||||
|
* dirent/dirent.h (readdir_r, readdir64_r): Mark as deprecated.
|
||||||
|
* manual/filesys.texi (Reading/Closing Directory): Mention
|
||||||
|
deprecaion.
|
||||||
|
* posix/tst-dir.c (main): Disable deprecation warning in test.
|
||||||
|
|
||||||
2016-02-19 H.J. Lu <hongjiu.lu@intel.com>
|
2016-02-19 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
[BZ #19679]
|
[BZ #19679]
|
||||||
|
|
3
NEWS
3
NEWS
|
@ -11,6 +11,9 @@ Version 2.24
|
||||||
time. It has been replaced by pap_AW & pap_CW, both of which have long
|
time. It has been replaced by pap_AW & pap_CW, both of which have long
|
||||||
been included in previous releases.
|
been included in previous releases.
|
||||||
|
|
||||||
|
* The readdir_r and readdir64_r functions have been deprecated. It is
|
||||||
|
recommended to use readdir and readdir64 instead.
|
||||||
|
|
||||||
Security related changes:
|
Security related changes:
|
||||||
|
|
||||||
[Add security related changes here]
|
[Add security related changes here]
|
||||||
|
|
|
@ -183,14 +183,15 @@ extern struct dirent64 *readdir64 (DIR *__dirp) __nonnull ((1));
|
||||||
extern int readdir_r (DIR *__restrict __dirp,
|
extern int readdir_r (DIR *__restrict __dirp,
|
||||||
struct dirent *__restrict __entry,
|
struct dirent *__restrict __entry,
|
||||||
struct dirent **__restrict __result)
|
struct dirent **__restrict __result)
|
||||||
__nonnull ((1, 2, 3));
|
__nonnull ((1, 2, 3)) __attribute_deprecated__;
|
||||||
# else
|
# else
|
||||||
# ifdef __REDIRECT
|
# ifdef __REDIRECT
|
||||||
extern int __REDIRECT (readdir_r,
|
extern int __REDIRECT (readdir_r,
|
||||||
(DIR *__restrict __dirp,
|
(DIR *__restrict __dirp,
|
||||||
struct dirent *__restrict __entry,
|
struct dirent *__restrict __entry,
|
||||||
struct dirent **__restrict __result),
|
struct dirent **__restrict __result),
|
||||||
readdir64_r) __nonnull ((1, 2, 3));
|
readdir64_r)
|
||||||
|
__nonnull ((1, 2, 3)) __attribute_deprecated__;
|
||||||
# else
|
# else
|
||||||
# define readdir_r readdir64_r
|
# define readdir_r readdir64_r
|
||||||
# endif
|
# endif
|
||||||
|
@ -200,7 +201,7 @@ extern int __REDIRECT (readdir_r,
|
||||||
extern int readdir64_r (DIR *__restrict __dirp,
|
extern int readdir64_r (DIR *__restrict __dirp,
|
||||||
struct dirent64 *__restrict __entry,
|
struct dirent64 *__restrict __entry,
|
||||||
struct dirent64 **__restrict __result)
|
struct dirent64 **__restrict __result)
|
||||||
__nonnull ((1, 2, 3));
|
__nonnull ((1, 2, 3)) __attribute_deprecated__;
|
||||||
# endif
|
# endif
|
||||||
#endif /* POSIX or misc */
|
#endif /* POSIX or misc */
|
||||||
|
|
||||||
|
|
|
@ -525,8 +525,9 @@ locking. Like @code{readdir} it returns the next entry from the
|
||||||
directory. To prevent conflicts between simultaneously running
|
directory. To prevent conflicts between simultaneously running
|
||||||
threads the result is stored inside the @var{entry} object.
|
threads the result is stored inside the @var{entry} object.
|
||||||
|
|
||||||
@strong{Portability Note:} It is recommended to use @code{readdir}
|
@strong{Portability Note:} @code{readdir_r} is deprecated. It is
|
||||||
instead of @code{readdir_r} for the following reasons:
|
recommended to use @code{readdir} instead of @code{readdir_r} for the
|
||||||
|
following reasons:
|
||||||
|
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item
|
@item
|
||||||
|
@ -604,10 +605,10 @@ In all other aspects this function is equivalent to @code{readdir}.
|
||||||
@comment LFS
|
@comment LFS
|
||||||
@deftypefun int readdir64_r (DIR *@var{dirstream}, struct dirent64 *@var{entry}, struct dirent64 **@var{result})
|
@deftypefun int readdir64_r (DIR *@var{dirstream}, struct dirent64 *@var{entry}, struct dirent64 **@var{result})
|
||||||
@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
|
@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
|
||||||
The @code{readdir64_r} function is equivalent to the @code{readdir_r}
|
The deprecated @code{readdir64_r} function is equivalent to the
|
||||||
function except that it takes parameters of base type @code{struct
|
@code{readdir_r} function except that it takes parameters of base type
|
||||||
dirent64} instead of @code{struct dirent} in the second and third
|
@code{struct dirent64} instead of @code{struct dirent} in the second and
|
||||||
position. The same precautions mentioned in the documentation of
|
third position. The same precautions mentioned in the documentation of
|
||||||
@code{readdir_r} also apply here.
|
@code{readdir_r} also apply here.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
|
|
|
@ -319,6 +319,10 @@ main (int argc, char *argv[])
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The test below covers the deprecated readdir64_r function. */
|
||||||
|
DIAG_PUSH_NEEDS_COMMENT;
|
||||||
|
DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wdeprecated-declarations");
|
||||||
|
|
||||||
/* Try to find the new directory. */
|
/* Try to find the new directory. */
|
||||||
rewinddir (dir1);
|
rewinddir (dir1);
|
||||||
while (readdir64_r (dir1, &direntbuf.d, &d) == 0 && d != NULL)
|
while (readdir64_r (dir1, &direntbuf.d, &d) == 0 && d != NULL)
|
||||||
|
@ -351,6 +355,8 @@ main (int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DIAG_POP_NEEDS_COMMENT;
|
||||||
|
|
||||||
if (d == NULL)
|
if (d == NULL)
|
||||||
{
|
{
|
||||||
printf ("haven't found new directory \"%s\"\n", buf);
|
printf ("haven't found new directory \"%s\"\n", buf);
|
||||||
|
@ -439,6 +445,10 @@ main (int argc, char *argv[])
|
||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The test below covers the deprecated readdir64_r function. */
|
||||||
|
DIAG_PUSH_NEEDS_COMMENT;
|
||||||
|
DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wdeprecated-declarations");
|
||||||
|
|
||||||
/* We now should have a directory and a file in the new directory. */
|
/* We now should have a directory and a file in the new directory. */
|
||||||
rewinddir (dir2);
|
rewinddir (dir2);
|
||||||
while (readdir64_r (dir2, &direntbuf.d, &d) == 0 && d != NULL)
|
while (readdir64_r (dir2, &direntbuf.d, &d) == 0 && d != NULL)
|
||||||
|
@ -492,6 +502,8 @@ main (int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DIAG_POP_NEEDS_COMMENT;
|
||||||
|
|
||||||
if (stat64 ("does-not-exist", &st1) >= 0)
|
if (stat64 ("does-not-exist", &st1) >= 0)
|
||||||
{
|
{
|
||||||
puts ("stat for unexisting file did not fail");
|
puts ("stat for unexisting file did not fail");
|
||||||
|
|
Loading…
Reference in New Issue