libdrm: Use readdir instead of readdir_r to avoid build warnings

Message ID 1521467252-20065-1-git-send-email-john.stultz@linaro.org
State New
Headers show
Series
  • libdrm: Use readdir instead of readdir_r to avoid build warnings
Related show

Commit Message

John Stultz March 19, 2018, 1:47 p.m.
Building libdrm under AOSP, we see the following build warning:
external/libdrm/xf86drm.c:2861:12: warning: 'readdir_r' is deprecated: readdir_r is deprecated; use readdir instead [-Wdeprecated-declarations]
    while (readdir_r(sysdir, pent, &ent) == 0 && ent != NULL) {
           ^

Thus, this patch replaces readdir_r with readdir.

Cc: Robert Foss <robert.foss@collabora.com>
Cc: Rob Herring <robh@kernel.org>
Cc: Stefan Schake <stschake@gmail.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>

---
 xf86drm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

-- 
2.7.4

Comments

Emil Velikov March 19, 2018, 2:11 p.m. | #1
On 19 March 2018 at 13:47, John Stultz <john.stultz@linaro.org> wrote:
> Building libdrm under AOSP, we see the following build warning:
> external/libdrm/xf86drm.c:2861:12: warning: 'readdir_r' is deprecated: readdir_r is deprecated; use readdir instead [-Wdeprecated-declarations]
>     while (readdir_r(sysdir, pent, &ent) == 0 && ent != NULL) {
>            ^
>
> Thus, this patch replaces readdir_r with readdir.
>
When C runtime suggests new behaviour before the manual/spec is updated... sigh.

readdir(3)
It is expected that a future version of POSIX.1 will require that
readdir() be thread-safe when concurrently employed on different
directory streams

readdir_r(3)
It is expected that a future version of POSIX.1 will make readdir_r()
obsolete, and require that readdir(3) be thread-safe when concurrently
employed on different directory streams.


Regardless, patch is
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>

-Emil
Eric Engestrom March 19, 2018, 2:41 p.m. | #2
On Monday, 2018-03-19 06:47:32 -0700, John Stultz wrote:
> Building libdrm under AOSP, we see the following build warning:
> external/libdrm/xf86drm.c:2861:12: warning: 'readdir_r' is deprecated: readdir_r is deprecated; use readdir instead [-Wdeprecated-declarations]
>     while (readdir_r(sysdir, pent, &ent) == 0 && ent != NULL) {
>            ^
> 
> Thus, this patch replaces readdir_r with readdir.
> 
> Cc: Robert Foss <robert.foss@collabora.com>
> Cc: Rob Herring <robh@kernel.org>
> Cc: Stefan Schake <stschake@gmail.com>
> Signed-off-by: John Stultz <john.stultz@linaro.org>
> ---
>  xf86drm.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/xf86drm.c b/xf86drm.c
> index 344326d..b9058c2 100644
> --- a/xf86drm.c
> +++ b/xf86drm.c
> @@ -2858,7 +2858,7 @@ static char *drmGetMinorNameForFD(int fd, int type)
>      if (pent == NULL)
>           goto out_close_dir;
>  
> -    while (readdir_r(sysdir, pent, &ent) == 0 && ent != NULL) {
> +    while ((ent = readdir(sysdir))) {

I've had the same patch locally for some time, and while this line is
correct, it's missing other changes to clean up unnecessary code around.

I don't have the change on this machine, I'll look at it tonight, but if
you beat me to it, from memory there's a malloc()+free() around, and
a couple unused variables now that should be removed at the start of
the scope.

>          if (strncmp(ent->d_name, name, len) == 0) {
>              snprintf(dev_name, sizeof(dev_name), DRM_DIR_NAME "/%s",
>                   ent->d_name);
> -- 
> 2.7.4
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
Emil Velikov March 20, 2018, 5:54 p.m. | #3
On 19 March 2018 at 14:41, Eric Engestrom <eric.engestrom@imgtec.com> wrote:
> On Monday, 2018-03-19 06:47:32 -0700, John Stultz wrote:
>> Building libdrm under AOSP, we see the following build warning:
>> external/libdrm/xf86drm.c:2861:12: warning: 'readdir_r' is deprecated: readdir_r is deprecated; use readdir instead [-Wdeprecated-declarations]
>>     while (readdir_r(sysdir, pent, &ent) == 0 && ent != NULL) {
>>            ^
>>
>> Thus, this patch replaces readdir_r with readdir.
>>
>> Cc: Robert Foss <robert.foss@collabora.com>
>> Cc: Rob Herring <robh@kernel.org>
>> Cc: Stefan Schake <stschake@gmail.com>
>> Signed-off-by: John Stultz <john.stultz@linaro.org>
>> ---
>>  xf86drm.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/xf86drm.c b/xf86drm.c
>> index 344326d..b9058c2 100644
>> --- a/xf86drm.c
>> +++ b/xf86drm.c
>> @@ -2858,7 +2858,7 @@ static char *drmGetMinorNameForFD(int fd, int type)
>>      if (pent == NULL)
>>           goto out_close_dir;
>>
>> -    while (readdir_r(sysdir, pent, &ent) == 0 && ent != NULL) {
>> +    while ((ent = readdir(sysdir))) {
>
> I've had the same patch locally for some time, and while this line is
> correct, it's missing other changes to clean up unnecessary code around.
>
> I don't have the change on this machine, I'll look at it tonight, but if
> you beat me to it, from memory there's a malloc()+free() around, and
> a couple unused variables now that should be removed at the start of
> the scope.
>
Right - updated patch should be in your inbox.

-Emil

Patch

diff --git a/xf86drm.c b/xf86drm.c
index 344326d..b9058c2 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -2858,7 +2858,7 @@  static char *drmGetMinorNameForFD(int fd, int type)
     if (pent == NULL)
          goto out_close_dir;
 
-    while (readdir_r(sysdir, pent, &ent) == 0 && ent != NULL) {
+    while ((ent = readdir(sysdir))) {
         if (strncmp(ent->d_name, name, len) == 0) {
             snprintf(dev_name, sizeof(dev_name), DRM_DIR_NAME "/%s",
                  ent->d_name);