diff options
-rw-r--r-- | xf86drm.c | 22 |
1 files changed, 3 insertions, 19 deletions
@@ -2819,12 +2819,11 @@ static char *drmGetMinorNameForFD(int fd, int type) | |||
2819 | { | 2819 | { |
2820 | #ifdef __linux__ | 2820 | #ifdef __linux__ |
2821 | DIR *sysdir; | 2821 | DIR *sysdir; |
2822 | struct dirent *pent, *ent; | 2822 | struct dirent *ent; |
2823 | struct stat sbuf; | 2823 | struct stat sbuf; |
2824 | const char *name = drmGetMinorName(type); | 2824 | const char *name = drmGetMinorName(type); |
2825 | int len; | 2825 | int len; |
2826 | char dev_name[64], buf[64]; | 2826 | char dev_name[64], buf[64]; |
2827 | long name_max; | ||
2828 | int maj, min; | 2827 | int maj, min; |
2829 | 2828 | ||
2830 | if (!name) | 2829 | if (!name) |
@@ -2847,30 +2846,16 @@ static char *drmGetMinorNameForFD(int fd, int type) | |||
2847 | if (!sysdir) | 2846 | if (!sysdir) |
2848 | return NULL; | 2847 | return NULL; |
2849 | 2848 | ||
2850 | name_max = fpathconf(dirfd(sysdir), _PC_NAME_MAX); | 2849 | while ((ent = readdir(sysdir))) { |
2851 | if (name_max == -1) | ||
2852 | goto out_close_dir; | ||
2853 | |||
2854 | pent = malloc(offsetof(struct dirent, d_name) + name_max + 1); | ||
2855 | if (pent == NULL) | ||
2856 | goto out_close_dir; | ||
2857 | |||
2858 | while (readdir_r(sysdir, pent, &ent) == 0 && ent != NULL) { | ||
2859 | if (strncmp(ent->d_name, name, len) == 0) { | 2850 | if (strncmp(ent->d_name, name, len) == 0) { |
2860 | snprintf(dev_name, sizeof(dev_name), DRM_DIR_NAME "/%s", | 2851 | snprintf(dev_name, sizeof(dev_name), DRM_DIR_NAME "/%s", |
2861 | ent->d_name); | 2852 | ent->d_name); |
2862 | 2853 | ||
2863 | free(pent); | ||
2864 | closedir(sysdir); | 2854 | closedir(sysdir); |
2865 | |||
2866 | return strdup(dev_name); | 2855 | return strdup(dev_name); |
2867 | } | 2856 | } |
2868 | } | 2857 | } |
2869 | 2858 | return NULL; | |
2870 | free(pent); | ||
2871 | |||
2872 | out_close_dir: | ||
2873 | closedir(sysdir); | ||
2874 | #else | 2859 | #else |
2875 | struct stat sbuf; | 2860 | struct stat sbuf; |
2876 | char buf[PATH_MAX + 1]; | 2861 | char buf[PATH_MAX + 1]; |
@@ -2911,7 +2896,6 @@ out_close_dir: | |||
2911 | 2896 | ||
2912 | return strdup(buf); | 2897 | return strdup(buf); |
2913 | #endif | 2898 | #endif |
2914 | return NULL; | ||
2915 | } | 2899 | } |
2916 | 2900 | ||
2917 | char *drmGetPrimaryDeviceNameFromFd(int fd) | 2901 | char *drmGetPrimaryDeviceNameFromFd(int fd) |