mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
Added fallback in case dirent's d_type wasn't set. Seems how Slackware follows POSIX strictly than others.
This commit is contained in:
parent
fc433aa342
commit
db9e0bad61
@ -36,8 +36,8 @@
|
|||||||
#include <edelib/Run.h>
|
#include <edelib/Run.h>
|
||||||
#include <edelib/MessageBox.h>
|
#include <edelib/MessageBox.h>
|
||||||
#include <edelib/IconLoader.h>
|
#include <edelib/IconLoader.h>
|
||||||
#include <edelib/FileTest.h>
|
|
||||||
#include <edelib/FontCache.h>
|
#include <edelib/FontCache.h>
|
||||||
|
#include <edelib/FileTest.h>
|
||||||
#include <edelib/File.h>
|
#include <edelib/File.h>
|
||||||
|
|
||||||
#include "Desktop.h"
|
#include "Desktop.h"
|
||||||
@ -69,6 +69,8 @@ EDELIB_NS_USING(file_test)
|
|||||||
EDELIB_NS_USING(file_remove)
|
EDELIB_NS_USING(file_remove)
|
||||||
EDELIB_NS_USING(font_cache_find)
|
EDELIB_NS_USING(font_cache_find)
|
||||||
EDELIB_NS_USING(FILE_TEST_IS_DIR)
|
EDELIB_NS_USING(FILE_TEST_IS_DIR)
|
||||||
|
EDELIB_NS_USING(FILE_TEST_IS_REGULAR)
|
||||||
|
EDELIB_NS_USING(FILE_TEST_IS_SYMLINK)
|
||||||
EDELIB_NS_USING(NETWM_WINDOW_TYPE_DESKTOP)
|
EDELIB_NS_USING(NETWM_WINDOW_TYPE_DESKTOP)
|
||||||
EDELIB_NS_USING(NETWM_CHANGED_CURRENT_WORKAREA)
|
EDELIB_NS_USING(NETWM_CHANGED_CURRENT_WORKAREA)
|
||||||
EDELIB_NS_USING(DESK_FILE_TYPE_UNKNOWN)
|
EDELIB_NS_USING(DESK_FILE_TYPE_UNKNOWN)
|
||||||
@ -318,12 +320,27 @@ void Desktop::read_desktop_folder(const char *dpath) {
|
|||||||
if(DOT_OR_DOTDOT(d->d_name))
|
if(DOT_OR_DOTDOT(d->d_name))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if(d->d_type > 0) {
|
||||||
if(d->d_type != DT_REG && d->d_type != DT_LNK && d->d_type != DT_DIR)
|
if(d->d_type != DT_REG && d->d_type != DT_LNK && d->d_type != DT_DIR)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
path = dpath;
|
path = dpath;
|
||||||
path += E_DIR_SEPARATOR;
|
path += E_DIR_SEPARATOR;
|
||||||
path += d->d_name;
|
path += d->d_name;
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* If we got here, it means d_type isn't set and we must do it via file_test() which could be much slower.
|
||||||
|
* By POSIX standard, only d_name must be set, but many modern *nixes set all dirent members correctly. Except Slackware ;)
|
||||||
|
*/
|
||||||
|
path = dpath;
|
||||||
|
path += E_DIR_SEPARATOR;
|
||||||
|
path += d->d_name;
|
||||||
|
|
||||||
|
if(!(file_test(path.c_str(), FILE_TEST_IS_REGULAR) ||
|
||||||
|
file_test(path.c_str(), FILE_TEST_IS_DIR) ||
|
||||||
|
file_test(path.c_str(), FILE_TEST_IS_SYMLINK)))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
DesktopIcon *o = read_desktop_file(path.c_str(), (const char*)d->d_name, &pos);
|
DesktopIcon *o = read_desktop_file(path.c_str(), (const char*)d->d_name, &pos);
|
||||||
if(o) add(o);
|
if(o) add(o);
|
||||||
|
Loading…
Reference in New Issue
Block a user