summaryrefslogtreecommitdiff
path: root/src/drivers/X11
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/X11')
-rw-r--r--src/drivers/X11/Fl_X11_System_Driver.H4
-rw-r--r--src/drivers/X11/Fl_X11_System_Driver.cxx22
2 files changed, 22 insertions, 4 deletions
diff --git a/src/drivers/X11/Fl_X11_System_Driver.H b/src/drivers/X11/Fl_X11_System_Driver.H
index 7c2306a28..f8fddc741 100644
--- a/src/drivers/X11/Fl_X11_System_Driver.H
+++ b/src/drivers/X11/Fl_X11_System_Driver.H
@@ -34,7 +34,9 @@ public:
// these 2 are in Fl_get_key.cxx
virtual int event_key(int k);
virtual int get_key(int k);
- virtual int filename_list(const char *d, dirent ***list, int (*sort)(struct dirent **, struct dirent **) );
+ virtual int filename_list(const char *d, dirent ***list,
+ int (*sort)(struct dirent **, struct dirent **),
+ char *errmsg=NULL, int errmsg_sz=0);
virtual int need_menu_handle_part1_extra() {return 1;}
virtual int open_uri(const char *uri, char *msg, int msglen);
virtual int use_tooltip_timeout_condition() {return 1;}
diff --git a/src/drivers/X11/Fl_X11_System_Driver.cxx b/src/drivers/X11/Fl_X11_System_Driver.cxx
index 0714ff753..28827bcfc 100644
--- a/src/drivers/X11/Fl_X11_System_Driver.cxx
+++ b/src/drivers/X11/Fl_X11_System_Driver.cxx
@@ -25,7 +25,8 @@
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>
-
+#include <string.h> // strerror(errno)
+#include <errno.h> // errno
#if defined(_AIX)
extern "C" {
@@ -56,7 +57,8 @@ extern "C" {
extern "C" {
int fl_scandir(const char *dirname, struct dirent ***namelist,
int (*select)(struct dirent *),
- int (*compar)(struct dirent **, struct dirent **));
+ int (*compar)(struct dirent **, struct dirent **),
+ char *errmsg, int errmsg_sz);
}
#endif
@@ -444,10 +446,19 @@ int Fl_X11_System_Driver::XParseGeometry(const char* string, int* x, int* y,
return ::XParseGeometry(string, x, y, width, height);
}
-int Fl_X11_System_Driver::filename_list(const char *d, dirent ***list, int (*sort)(struct dirent **, struct dirent **) ) {
+//
+// Needs some docs
+// Returns -1 on error, errmsg will contain OS error if non-NULL.
+//
+int Fl_X11_System_Driver::filename_list(const char *d,
+ dirent ***list,
+ int (*sort)(struct dirent **, struct dirent **),
+ char *errmsg, int errmsg_sz) {
int dirlen;
char *dirloc;
+ if (errmsg && errmsg_sz>0) errmsg[0] = '\0';
+
// Assume that locale encoding is no less dense than UTF-8
dirlen = strlen(d);
dirloc = (char *)malloc(dirlen + 1);
@@ -476,6 +487,11 @@ int Fl_X11_System_Driver::filename_list(const char *d, dirent ***list, int (*sor
free(dirloc);
+ if (n==-1) {
+ if (errmsg) fl_snprintf(errmsg, errmsg_sz, "%s", strerror(errno));
+ return -1;
+ }
+
// convert every filename to UTF-8, and append a '/' to all
// filenames that are directories
int i;