From c591233e8e242496a490f8568d2e2268e3e940b4 Mon Sep 17 00:00:00 2001 From: JengHyun Kang Date: Thu, 7 Sep 2017 19:09:02 +0900 Subject: [PATCH] evdev: modify a readdir() to readdir_r() for threads safety Change-Id: Ibfd75463a90d74743b58bcdc68bc4c86e9d6daf2 --- src/lib/evdev/evdev.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lib/evdev/evdev.c b/src/lib/evdev/evdev.c index 9121763..5240b4e 100644 --- a/src/lib/evdev/evdev.c +++ b/src/lib/evdev/evdev.c @@ -251,20 +251,24 @@ pepper_evdev_device_probe(pepper_evdev_t *evdev, uint32_t caps) uint32_t probed = 0; DIR *dir_info = NULL; - struct dirent *dir_entry = NULL; + struct dirent *dir_entry = NULL, dir_prev; + int ret = 0; /* Probe event device nodes under /dev/input */ dir_info = opendir("/dev/input/"); if (dir_info) { - while ((dir_entry = readdir(dir_info))) + ret = readdir_r(dir_info, &dir_prev, &dir_entry); + while ((ret == 0) && (dir_entry != NULL)) { if (!strncmp(dir_entry->d_name, "event", 5)) { if (caps & WL_SEAT_CAPABILITY_KEYBOARD) probed += _evdev_keyboard_device_open(evdev, dir_entry->d_name); } + dir_prev = *dir_entry; + ret = readdir_r(dir_info, &dir_prev, &dir_entry); } closedir(dir_info); -- 2.7.4