File tree Expand file tree Collapse file tree 1 file changed +14
-5
lines changed Expand file tree Collapse file tree 1 file changed +14
-5
lines changed Original file line number Diff line number Diff line change @@ -24,7 +24,8 @@ int qemu_drm_rendernode_open(const char *rendernode)
24
24
{
25
25
DIR * dir ;
26
26
struct dirent * e ;
27
- int r , fd ;
27
+ struct stat st ;
28
+ int r , fd , ret ;
28
29
char * p ;
29
30
30
31
if (rendernode ) {
@@ -38,10 +39,6 @@ int qemu_drm_rendernode_open(const char *rendernode)
38
39
39
40
fd = -1 ;
40
41
while ((e = readdir (dir ))) {
41
- if (e -> d_type != DT_CHR ) {
42
- continue ;
43
- }
44
-
45
42
if (strncmp (e -> d_name , "renderD" , 7 )) {
46
43
continue ;
47
44
}
@@ -53,6 +50,18 @@ int qemu_drm_rendernode_open(const char *rendernode)
53
50
g_free (p );
54
51
continue ;
55
52
}
53
+
54
+ /*
55
+ * prefer fstat() over checking e->d_type == DT_CHR for
56
+ * portability reasons
57
+ */
58
+ ret = fstat (r , & st );
59
+ if (ret < 0 || (st .st_mode & S_IFMT ) != S_IFCHR ) {
60
+ close (r );
61
+ g_free (p );
62
+ continue ;
63
+ }
64
+
56
65
fd = r ;
57
66
g_free (p );
58
67
break ;
You can’t perform that action at this time.
0 commit comments