libdrm: Use readdir instead of readdir_r to avoid build warnings

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) {
           ^

Building on Linux with glibc produces the same warning.
Thus, this patch replaces readdir_r with readdir.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102031
Cc: Robert Foss <robert.foss@collabora.com>
Cc: Rob Herring <robh@kernel.org>
Cc: Stefan Schake <stschake@gmail.com>
Cc: John Stultz <john.stultz@linaro.org>
Signed-off-by: John Stultz <john.stultz@linaro.org>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
[Emil Velikov: remove unused variables, Eric]
Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
main
John Stultz 2018-03-20 17:48:23 +00:00 committed by Emil Velikov
parent 32ee9c0e05
commit bb45ce4e3a
1 changed files with 3 additions and 19 deletions

View File

@ -2819,12 +2819,11 @@ static char *drmGetMinorNameForFD(int fd, int type)
{ {
#ifdef __linux__ #ifdef __linux__
DIR *sysdir; DIR *sysdir;
struct dirent *pent, *ent; struct dirent *ent;
struct stat sbuf; struct stat sbuf;
const char *name = drmGetMinorName(type); const char *name = drmGetMinorName(type);
int len; int len;
char dev_name[64], buf[64]; char dev_name[64], buf[64];
long name_max;
int maj, min; int maj, min;
if (!name) if (!name)
@ -2847,30 +2846,16 @@ static char *drmGetMinorNameForFD(int fd, int type)
if (!sysdir) if (!sysdir)
return NULL; return NULL;
name_max = fpathconf(dirfd(sysdir), _PC_NAME_MAX); while ((ent = readdir(sysdir))) {
if (name_max == -1)
goto out_close_dir;
pent = malloc(offsetof(struct dirent, d_name) + name_max + 1);
if (pent == NULL)
goto out_close_dir;
while (readdir_r(sysdir, pent, &ent) == 0 && ent != NULL) {
if (strncmp(ent->d_name, name, len) == 0) { if (strncmp(ent->d_name, name, len) == 0) {
snprintf(dev_name, sizeof(dev_name), DRM_DIR_NAME "/%s", snprintf(dev_name, sizeof(dev_name), DRM_DIR_NAME "/%s",
ent->d_name); ent->d_name);
free(pent);
closedir(sysdir); closedir(sysdir);
return strdup(dev_name); return strdup(dev_name);
} }
} }
return NULL;
free(pent);
out_close_dir:
closedir(sysdir);
#else #else
struct stat sbuf; struct stat sbuf;
char buf[PATH_MAX + 1]; char buf[PATH_MAX + 1];
@ -2911,7 +2896,6 @@ out_close_dir:
return strdup(buf); return strdup(buf);
#endif #endif
return NULL;
} }
char *drmGetPrimaryDeviceNameFromFd(int fd) char *drmGetPrimaryDeviceNameFromFd(int fd)