--- simsys.cc.orig 2020-04-16 21:57:48.159484701 +0200 +++ simsys.cc 2020-04-17 14:49:21.000000000 +0200 @@ -9,6 +9,7 @@ #include #include #include +#include #ifdef __HAIKU__ #include @@ -40,7 +41,6 @@ # include "simdebug.h" #else # include -# include # if !defined __AMIGA__ && !defined __BEOS__ # include # endif @@ -398,35 +398,63 @@ // however, since we cannot rely on it, we just try a few candiates // Apple only uses three locals, and Haiku has no standard ... + char buffer[PATH_MAX]; +#ifdef __APPLE__ + strcpy(buffer, getenv("HOME")); + strcat(buffer, "/Library/"); +#elif defined __HAIKU__ + BPath userDir; + find_directory(B_USER_DIRECTORY, &userDir); + strcpy(buffer, userDir.Path()); + strcat(buffer, "/config/non-packaged/data/fonts/"); +#else + strcpy(buffer, getenv("HOME")); + strcat(buffer, "/.local/share/fonts/"); +#endif + const char *trypaths[] = { #ifdef __APPLE__ - "~/Library/", + buffer, "/Library/Fonts/", "/System/Library/Fonts/", #elif defined __HAIKU__ "/boot/system/non-packaged/data/fonts/", "/boot/home/config/non-packaged/data/fonts/", - "~/config/non-packaged/data/fonts/", + buffer, "/boot/system/data/fonts/ttfonts/", #else - "~/.fonts/", - "~/.local/share/fonts/", - "/usr/share/fonts/truetype/", - "/usr/X11R6/lib/X11/fonts/ttfonts/", - "/usr/local/sharefonts/truetype/", + buffer, "/usr/share/fonts/", - "/usr/X11R6/lib/X11/fonts/", + "/usr/local/share/fonts/", #endif NULL }; for( int i=0; trypaths[i]; i++ ) { DIR *dir = opendir(trypaths[i]); if( dir ) { - closedir( dir ); if( which==0 ) { + closedir( dir ); return trypaths[i]; } which--; + struct dirent *entry; + while( (entry = readdir(dir)) ) { + if( entry->d_type == DT_DIR ) { + if( ( (strcmp(entry->d_name,".") ) != 0) && + ( (strcmp(entry->d_name,"..") ) != 0) ) { + if( which==0 ) { + char *result = (char *) malloc(PATH_MAX); + strcpy(result, trypaths[i]); + strcat(result, entry->d_name); + strcat(result, "/"); + closedir( dir ); + return (const char *) {result}; + } + which--; + } + } + } + closedir( dir ); } } return NULL;