From 0941f0600a26b85b49ab37ab2068a42a4962359c Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Sat, 8 Mar 2025 16:59:02 +0100 Subject: Add Fl_Darwin_System_Driver::filename_relative() This removes the last instance in FLTK of use of #if __APPLE__ instead of the driver mechanism. --- src/Fl_System_Driver.H | 1 + src/drivers/Darwin/Fl_Darwin_System_Driver.H | 1 + src/drivers/Darwin/Fl_Darwin_System_Driver.cxx | 5 +++++ src/filename_absolute.cxx | 28 ++++++++++++++++---------- 4 files changed, 24 insertions(+), 11 deletions(-) (limited to 'src') 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) { -- cgit v1.2.3