summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2025-03-08 16:59:02 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2025-03-08 16:59:02 +0100
commit0941f0600a26b85b49ab37ab2068a42a4962359c (patch)
treeaa277563904084a7e8bf97704440e07c017a5915
parent43e24a7541fabf6479432b189998bb07436d7288 (diff)
Add Fl_Darwin_System_Driver::filename_relative()
This removes the last instance in FLTK of use of #if __APPLE__ instead of the driver mechanism.
-rw-r--r--src/Fl_System_Driver.H1
-rw-r--r--src/drivers/Darwin/Fl_Darwin_System_Driver.H1
-rw-r--r--src/drivers/Darwin/Fl_Darwin_System_Driver.cxx5
-rw-r--r--src/filename_absolute.cxx28
4 files changed, 24 insertions, 11 deletions
diff --git a/src/Fl_System_Driver.H b/src/Fl_System_Driver.H
index e1bb6b7d3..e306e7e74 100644
--- a/src/Fl_System_Driver.H
+++ b/src/Fl_System_Driver.H
@@ -64,6 +64,7 @@ protected:
static Fl_System_Driver *newSystemDriver();
Fl_System_Driver();
static bool awake_ring_empty();
+ int filename_relative_(char *to, int tolen, const char *from, const char *base, bool case_sensitive);
public:
virtual ~Fl_System_Driver();
static int command_key;
diff --git a/src/drivers/Darwin/Fl_Darwin_System_Driver.H b/src/drivers/Darwin/Fl_Darwin_System_Driver.H
index 011bea7ff..7dd0ae6da 100644
--- a/src/drivers/Darwin/Fl_Darwin_System_Driver.H
+++ b/src/drivers/Darwin/Fl_Darwin_System_Driver.H
@@ -79,6 +79,7 @@ public:
Fl_Sys_Menu_Bar_Driver *sys_menu_bar_driver() FL_OVERRIDE;
double wait(double time_to_wait) FL_OVERRIDE;
int ready() FL_OVERRIDE;
+ int filename_relative(char *to, int tolen, const char *dest_dir, const char *base_dir) FL_OVERRIDE;
};
#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 9b6a2a694..431e908a5 100644
--- a/src/drivers/Darwin/Fl_Darwin_System_Driver.cxx
+++ b/src/drivers/Darwin/Fl_Darwin_System_Driver.cxx
@@ -367,3 +367,8 @@ void Fl_Darwin_System_Driver::tree_draw_expando_button(int x, int y, bool state,
int Fl_Darwin_System_Driver::tree_connector_style() {
return FL_TREE_CONNECTOR_NONE;
}
+
+
+int Fl_Darwin_System_Driver::filename_relative(char *to, int tolen, const char *dest_dir, const char *base_dir) {
+ return Fl_System_Driver::filename_relative_(to, tolen, dest_dir, base_dir, false);
+}
diff --git a/src/filename_absolute.cxx b/src/filename_absolute.cxx
index f70d59873..b134c48c0 100644
--- a/src/filename_absolute.cxx
+++ b/src/filename_absolute.cxx
@@ -201,7 +201,12 @@ int fl_filename_relative(char *to, int tolen, const char *from, const char *base
\{
*/
-int Fl_System_Driver::filename_relative(char *to, int tolen, const char *dest_dir, const char *base_dir)
+int Fl_System_Driver::filename_relative(char *to, int tolen, const char *dest_dir, const char *base_dir) {
+ return filename_relative_(to, tolen, dest_dir, base_dir, true);
+}
+
+
+int Fl_System_Driver::filename_relative_(char *to, int tolen, const char *dest_dir, const char *base_dir, bool case_sensitive)
{
// Find the relative path from base_dir to dest_dir.
// Both paths must be absolute and well formed (contain no /../ and /./ segments).
@@ -223,16 +228,17 @@ int Fl_System_Driver::filename_relative(char *to, int tolen, const char *dest_di
// compare both path names until we find a difference
for (;;) {
-#ifndef __APPLE__ // case sensitive
- base_i++;
- dest_i++;
- char b = *base_i, d = *dest_i;
-#else // case insensitive
- base_i += fl_utf8len1(*base_i);
- int b = fl_tolower(fl_utf8decode(base_i, NULL, NULL));
- dest_i += fl_utf8len1(*dest_i);
- int d = fl_tolower(fl_utf8decode(dest_i, NULL, NULL));
-#endif
+ int b, d;
+ if (case_sensitive) { // case sensitive
+ base_i++;
+ dest_i++;
+ b = *base_i, d = *dest_i;
+ } else { // case insensitive
+ base_i += fl_utf8len1(*base_i);
+ b = fl_tolower(fl_utf8decode(base_i, NULL, NULL));
+ dest_i += fl_utf8len1(*dest_i);
+ d = fl_tolower(fl_utf8decode(dest_i, NULL, NULL));
+ }
int b0 = (b==0) || (isdirsep(b));
int d0 = (d==0) || (isdirsep(d));
if (b0 && d0) {