summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FL/Fl_System_Driver.H15
-rw-r--r--src/Fl_File_Chooser2.cxx2
-rw-r--r--src/Fl_File_Icon.cxx26
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx1
-rw-r--r--src/filename_isdir.cxx11
5 files changed, 20 insertions, 35 deletions
diff --git a/FL/Fl_System_Driver.H b/FL/Fl_System_Driver.H
index a46820100..3c85d413d 100644
--- a/FL/Fl_System_Driver.H
+++ b/FL/Fl_System_Driver.H
@@ -34,6 +34,7 @@ typedef struct CGContext* Fl_Offscreen;
typedef struct CGImage* Fl_Bitmask;
typedef struct flCocoaRegion* Fl_Region;
typedef int FL_SOCKET;
+#include <sys/stat.h>
#elif defined(WIN32)
typedef struct HBITMAP__ *HBITMAP;
@@ -45,6 +46,7 @@ typedef unsigned __int64 FL_SOCKET;
# else
typedef int FL_SOCKET;
# endif
+#include <sys/stat.h>
#elif defined(FL_PORTING)
# pragma message "FL_PORTING: define OS-dependent types"
@@ -52,12 +54,25 @@ typedef void* Fl_Offscreen;
typedef void* Fl_Bitmask;
typedef void *Fl_Region;
typedef int FL_SOCKET;
+# pragma message "FL_PORTING: define struct stat and implement stat() for the platform"
+struct stat { // the FLTK source code uses part of the stat() API
+ unsigned st_mode;
+ off_t st_size;
+};
+#define S_IFMT 0170000 /* type of file */
+#define S_IFIFO 0010000 /* named pipe (fifo) */
+#define S_IFCHR 0020000 /* character special */
+#define S_IFDIR 0040000 /* directory */
+#define S_IFBLK 0060000 /* block special */
+#define S_IFREG 0100000 /* regular */
+#define S_IFLNK 0120000 /* symbolic link */
#else
typedef unsigned long Fl_Offscreen;
typedef unsigned long Fl_Bitmask;
typedef struct _XRegion *Fl_Region;
typedef int FL_SOCKET;
+#include <sys/stat.h>
#endif // __APPLE__
diff --git a/src/Fl_File_Chooser2.cxx b/src/Fl_File_Chooser2.cxx
index fea0b3328..d592ff39f 100644
--- a/src/Fl_File_Chooser2.cxx
+++ b/src/Fl_File_Chooser2.cxx
@@ -344,6 +344,7 @@
//
#include <FL/Fl_File_Chooser.H>
+#include <FL/Fl_System_Driver.H> // for struct stat
#include <FL/filename.H>
#include <FL/fl_ask.H>
#include <FL/x.H>
@@ -355,7 +356,6 @@
#include "flstring.h"
#include <errno.h>
#include <sys/types.h>
-#include <sys/stat.h>
#if defined(WIN32) || defined(__APPLE__) // PORTME: Fl_Screen_Driver - platform file browser
#elif defined(FL_PORTING)
diff --git a/src/Fl_File_Icon.cxx b/src/Fl_File_Icon.cxx
index a4119c922..02475bbdd 100644
--- a/src/Fl_File_Icon.cxx
+++ b/src/Fl_File_Icon.cxx
@@ -38,25 +38,12 @@
#include "flstring.h"
#include <errno.h>
#include <sys/types.h>
-#include <sys/stat.h>
-#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
-# include <io.h>
-# define F_OK 0
-#else
-# include <unistd.h>
-#endif /* WIN32 || __EMX__ */
-
+#include <FL/Fl_System_Driver.H> // for struct stat
#include <FL/Fl_File_Icon.H>
#include <FL/Fl_Widget.H>
#include <FL/fl_draw.H>
#include <FL/filename.H>
-#if defined(WIN32) || defined(__APPLE__) // PORTME: Fl_Screen_Driver - platform file browser
-#elif defined(FL_PORTING)
-# pragma message "FL_PORTING: implement file type interpretation here"
-#else
-#endif
-
//
// Define missing POSIX/XPG4 macros as needed...
//
@@ -187,23 +174,13 @@ Fl_File_Icon::find(const char *filename,// I - Name of file */
int filetype) // I - Enumerated file type
{
Fl_File_Icon *current; // Current file in list
-#ifndef WIN32
struct stat fileinfo; // Information on file
-#endif // !WIN32
const char *name; // Base name of filename
// Get file information if needed...
if (filetype == ANY)
{
-#ifdef WIN32
- if (filename[strlen(filename) - 1] == '/')
- filetype = DIRECTORY;
- else if (fl_filename_isdir(filename))
- filetype = DIRECTORY;
- else
- filetype = PLAIN;
-#else
if (!fl_stat(filename, &fileinfo))
{
if (S_ISDIR(fileinfo.st_mode))
@@ -225,7 +202,6 @@ Fl_File_Icon::find(const char *filename,// I - Name of file */
}
else
filetype = PLAIN;
-#endif // WIN32
}
// Look at the base name in the filename
diff --git a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx
index 3a0b94fc5..46bd9dc78 100644
--- a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx
+++ b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx
@@ -196,6 +196,7 @@ int Fl_WinAPI_System_Driver::access(const char* f, int mode) {
int Fl_WinAPI_System_Driver::stat(const char* f, struct stat *b) {
size_t l = strlen(f);
+ if (f[l-1] == '/') l--; // must remove trailing /
unsigned wn = fl_utf8toUtf16(f, (unsigned) l, NULL, 0) + 1; // Query length
wbuf = (wchar_t*)realloc(wbuf, sizeof(wchar_t)*wn);
wn = fl_utf8toUtf16(f, (unsigned) l, (unsigned short *)wbuf, wn); // Convert string
diff --git a/src/filename_isdir.cxx b/src/filename_isdir.cxx
index 495f6a399..4e69445c1 100644
--- a/src/filename_isdir.cxx
+++ b/src/filename_isdir.cxx
@@ -20,18 +20,11 @@
#include "flstring.h"
#include <sys/types.h>
-#include <sys/stat.h>
+#include <FL/Fl_System_Driver.H> // for struct stat
#include <ctype.h>
#include <FL/filename.H>
#include <FL/fl_utf8.h>
-#ifdef WIN32
-#elif defined(__APPLE__) // PORTME: Fl_System_Driver - directory stuff
-#elif defined(FL_PORTING)
-# pragma message "FL_PORTING: implement directory and filename handling for your platform if needed"
-#else // X11
-#endif
-
#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
static inline int isdirsep(char c) {return c=='/' || c=='\\';}
#else
@@ -92,7 +85,7 @@ int fl_filename_isdir(const char* n) {
}
#endif
- return !fl_stat(n, &s) && (s.st_mode&0170000)==0040000;
+ return !fl_stat(n, &s) && (s.st_mode & S_IFMT) == S_IFDIR;
}
//