summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2016-04-11 13:07:08 +0000
committerManolo Gouy <Manolo>2016-04-11 13:07:08 +0000
commit5b44fe3bff5a86b888a39b27ceaa8636559e21a9 (patch)
tree44cefad634f4b19b710f01e7de10e47790b33a9c /src
parentaafd8b6031e66e0b2f727197c1d1d040036ec0a8 (diff)
Remove compilation errors in Fl_File_Icon.cxx with MSVC compiler with new method Fl_System_Driver::file_type().
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11581 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
-rw-r--r--src/Fl_File_Icon.cxx53
-rw-r--r--src/Fl_System_Driver.cxx6
-rw-r--r--src/drivers/Darwin/Fl_Darwin_System_Driver.H1
-rw-r--r--src/drivers/Darwin/Fl_Darwin_System_Driver.cxx29
-rw-r--r--src/drivers/Posix/Fl_Posix_System_Driver.H1
-rw-r--r--src/drivers/Posix/Fl_Posix_System_Driver.cxx40
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_System_Driver.H1
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx12
8 files changed, 94 insertions, 49 deletions
diff --git a/src/Fl_File_Icon.cxx b/src/Fl_File_Icon.cxx
index 2d6448943..a7effa14f 100644
--- a/src/Fl_File_Icon.cxx
+++ b/src/Fl_File_Icon.cxx
@@ -36,28 +36,14 @@
#include <stdlib.h>
#include <FL/fl_utf8.h>
#include "flstring.h"
-#include <errno.h>
-#include <sys/types.h>
-#include <FL/Fl_System_Driver.H> // for struct stat
+#include <FL/Fl.H>
+#include <FL/Fl_System_Driver.H>
#include <FL/Fl_File_Icon.H>
#include <FL/Fl_Widget.H>
#include <FL/fl_draw.H>
#include <FL/filename.H>
//
-// Define missing POSIX/XPG4 macros as needed...
-//
-
-#ifndef S_ISDIR
-# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
-# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
-# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
-# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
-# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
-#endif /* !S_ISDIR */
-
-
-//
// Icon cache...
//
@@ -178,39 +164,8 @@ Fl_File_Icon::find(const char *filename,// I - Name of file */
// Get file information if needed...
- if (filetype == ANY)
- {
-#ifdef _MSC_VER // was: WIN32
- if (filename[strlen(filename) - 1] == '/')
- filetype = DIRECTORY;
- else if (fl_filename_isdir(filename))
- filetype = DIRECTORY;
- else
- filetype = PLAIN;
-#else
- struct stat fileinfo; // Information on file
- if (!fl_stat(filename, &fileinfo))
- {
- if (S_ISDIR(fileinfo.st_mode))
- filetype = DIRECTORY;
-# ifdef S_ISFIFO
- else if (S_ISFIFO(fileinfo.st_mode))
- filetype = FIFO;
-# endif // S_ISFIFO
-# if defined(S_ISCHR) && defined(S_ISBLK)
- else if (S_ISCHR(fileinfo.st_mode) || S_ISBLK(fileinfo.st_mode))
- filetype = DEVICE;
-# endif // S_ISCHR && S_ISBLK
-# ifdef S_ISLNK
- else if (S_ISLNK(fileinfo.st_mode))
- filetype = LINK;
-# endif // S_ISLNK
- else
- filetype = PLAIN;
- }
- else
- filetype = PLAIN;
-#endif // _MSC_VER // was: WIN32
+ if (filetype == ANY) {
+ filetype = Fl::system_driver()->file_type(filename);
}
// Look at the base name in the filename
diff --git a/src/Fl_System_Driver.cxx b/src/Fl_System_Driver.cxx
index de8b5e363..eacc9fbf3 100644
--- a/src/Fl_System_Driver.cxx
+++ b/src/Fl_System_Driver.cxx
@@ -19,6 +19,7 @@
#include <FL/Fl_System_Driver.H>
#include <FL/Fl.H>
+#include <FL/Fl_File_Icon.H>
#include <FL/fl_utf8.h>
#include <stdlib.h>
#include <stdio.h>
@@ -423,6 +424,11 @@ int Fl_System_Driver::file_browser_load_directory(const char *directory, char *f
return filename_list(directory, pfiles, sort);
}
+int Fl_System_Driver::file_type(const char *filename)
+{
+ return Fl_File_Icon::ANY;
+}
+
//
// End of "$Id$".
//
diff --git a/src/drivers/Darwin/Fl_Darwin_System_Driver.H b/src/drivers/Darwin/Fl_Darwin_System_Driver.H
index 31b8e4564..d51fdeedf 100644
--- a/src/drivers/Darwin/Fl_Darwin_System_Driver.H
+++ b/src/drivers/Darwin/Fl_Darwin_System_Driver.H
@@ -85,6 +85,7 @@ public:
virtual int lock();
virtual void unlock();
virtual void* thread_message();
+ virtual int file_type(const char *filename);
};
#endif // FL_DARWIN_SYSTEM_DRIVER_H
diff --git a/src/drivers/Darwin/Fl_Darwin_System_Driver.cxx b/src/drivers/Darwin/Fl_Darwin_System_Driver.cxx
index 746fe95ea..3929c63c6 100644
--- a/src/drivers/Darwin/Fl_Darwin_System_Driver.cxx
+++ b/src/drivers/Darwin/Fl_Darwin_System_Driver.cxx
@@ -35,6 +35,7 @@
#include <sys/param.h>
#include <sys/ucred.h>
#include <sys/mount.h>
+#include <sys/stat.h>
#include <ApplicationServices/ApplicationServices.h>
@@ -229,6 +230,34 @@ void *Fl_Darwin_System_Driver::dlopen(const char *filename) {
return ::dlopen(filename, RTLD_LAZY);
}
+int Fl_Darwin_System_Driver::file_type(const char *filename)
+{
+ int filetype;
+ struct stat fileinfo; // Information on file
+ if (!stat(filename, &fileinfo))
+ {
+ if (S_ISDIR(fileinfo.st_mode))
+ filetype = Fl_File_Icon::DIRECTORY;
+# ifdef S_ISFIFO
+ else if (S_ISFIFO(fileinfo.st_mode))
+ filetype = Fl_File_Icon::FIFO;
+# endif // S_ISFIFO
+# if defined(S_ISCHR) && defined(S_ISBLK)
+ else if (S_ISCHR(fileinfo.st_mode) || S_ISBLK(fileinfo.st_mode))
+ filetype = Fl_File_Icon::DEVICE;
+# endif // S_ISCHR && S_ISBLK
+# ifdef S_ISLNK
+ else if (S_ISLNK(fileinfo.st_mode))
+ filetype = Fl_File_Icon::LINK;
+# endif // S_ISLNK
+ else
+ filetype = Fl_File_Icon::PLAIN;
+ }
+ else
+ filetype = Fl_File_Icon::PLAIN;
+ return filetype;
+}
+
//
// End of "$Id$".
//
diff --git a/src/drivers/Posix/Fl_Posix_System_Driver.H b/src/drivers/Posix/Fl_Posix_System_Driver.H
index 67f060b04..20c1e40a2 100644
--- a/src/drivers/Posix/Fl_Posix_System_Driver.H
+++ b/src/drivers/Posix/Fl_Posix_System_Driver.H
@@ -86,6 +86,7 @@ public:
virtual int lock();
virtual void unlock();
virtual void* thread_message();
+ virtual int file_type(const char *filename);
};
#endif // FL_POSIX_SYSTEM_DRIVER_H
diff --git a/src/drivers/Posix/Fl_Posix_System_Driver.cxx b/src/drivers/Posix/Fl_Posix_System_Driver.cxx
index a5b2d7269..0e5526c52 100644
--- a/src/drivers/Posix/Fl_Posix_System_Driver.cxx
+++ b/src/drivers/Posix/Fl_Posix_System_Driver.cxx
@@ -30,6 +30,7 @@
# include <dlfcn.h>
#endif
#include <sys/types.h>
+#include <sys/stat.h>
#include <pwd.h>
#include <unistd.h>
#include <time.h>
@@ -60,6 +61,17 @@ extern "C" {
}
#endif // __NetBSD__
+//
+// Define missing POSIX/XPG4 macros as needed...
+//
+#ifndef S_ISDIR
+# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#endif /* !S_ISDIR */
+
// Pointers you can use to change FLTK to another language.
// Note: Similar pointers are defined in FL/fl_ask.H and src/fl_ask.cxx
const char* fl_local_alt = "Alt";
@@ -521,6 +533,34 @@ void *Fl_Posix_System_Driver::dlopen(const char *filename)
return NULL;
}
+int Fl_Posix_System_Driver::file_type(const char *filename)
+{
+ int filetype;
+ struct stat fileinfo; // Information on file
+ if (!stat(filename, &fileinfo))
+ {
+ if (S_ISDIR(fileinfo.st_mode))
+ filetype = Fl_File_Icon::DIRECTORY;
+# ifdef S_ISFIFO
+ else if (S_ISFIFO(fileinfo.st_mode))
+ filetype = Fl_File_Icon::FIFO;
+# endif // S_ISFIFO
+# if defined(S_ISCHR) && defined(S_ISBLK)
+ else if (S_ISCHR(fileinfo.st_mode) || S_ISBLK(fileinfo.st_mode))
+ filetype = Fl_File_Icon::DEVICE;
+# endif // S_ISCHR && S_ISBLK
+# ifdef S_ISLNK
+ else if (S_ISLNK(fileinfo.st_mode))
+ filetype = Fl_File_Icon::LINK;
+# endif // S_ISLNK
+ else
+ filetype = Fl_File_Icon::PLAIN;
+ }
+ else
+ filetype = Fl_File_Icon::PLAIN;
+ return filetype;
+}
+
//
// End of "$Id$".
//
diff --git a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.H b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.H
index cbec9065d..2bbc81316 100644
--- a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.H
+++ b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.H
@@ -92,6 +92,7 @@ public:
virtual void unlock();
// this one is implemented in Fl_win32.cxx
virtual void* thread_message();
+ virtual int file_type(const char *filename);
};
#endif // FL_WINAPI_SYSTEM_DRIVER_H
diff --git a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx
index 5b9676fdf..df5ef9f89 100644
--- a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx
+++ b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx
@@ -884,6 +884,18 @@ const char *Fl_WinAPI_System_Driver::next_dir_sep(const char *start)
return p;
}
+int Fl_WinAPI_System_Driver::file_type(const char *filename)
+{
+ int filetype;
+ if (filename[strlen(filename) - 1] == '/')
+ filetype = Fl_File_Icon::DIRECTORY;
+ else if (filename_isdir(filename))
+ filetype = Fl_File_Icon::DIRECTORY;
+ else
+ filetype = Fl_File_Icon::PLAIN;
+ return filetype;
+}
+
//
// End of "$Id$".
//