diff --git a/src/osd/sdl/sdldir.c b/src/osd/sdl/sdldir.c index 183e82557b4..7cbc571b3d3 100644 --- a/src/osd/sdl/sdldir.c +++ b/src/osd/sdl/sdldir.c @@ -79,12 +79,29 @@ static char *build_full_path(const char *path, const char *file) #if HAS_DT_XXX -static osd_dir_entry_type get_attributes_enttype(int attributes) +static osd_dir_entry_type get_attributes_enttype(int attributes, char *path) { - if (attributes == DT_DIR) - return ENTTYPE_DIR; - else - return ENTTYPE_FILE; + switch ( attributes ) + { + case DT_DIR: + return ENTTYPE_DIR; + + case DT_REG: + return ENTTYPE_FILE; + + case DT_LNK: + { + struct stat s; + + if ( stat(path, &s) != 0 ) + return ENTTYPE_OTHER; + else + return S_ISDIR(s.st_mode) ? ENTTYPE_DIR : ENTTYPE_FILE; + } + + default: + return ENTTYPE_OTHER; + } } #else @@ -192,7 +209,7 @@ const osd_directory_entry *osd_readdir(osd_directory *dir) dir->ent.name = dir->data->d_name; temp = build_full_path(dir->path, dir->data->d_name); #if HAS_DT_XXX - dir->ent.type = get_attributes_enttype(dir->data->d_type); + dir->ent.type = get_attributes_enttype(dir->data->d_type, temp); #else dir->ent.type = get_attributes_stat(temp); #endif