aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAuke Kok <sofar@foo-projects.org>2017-02-18 11:40:37 -0800
committerparamat <mat.gregory@virginmedia.com>2017-03-05 09:46:52 +0000
commitf1ab42fdff7a15d81c8cac0f9192b3d5ff9fb913 (patch)
tree6612bfd7de35fbc2e2df263f35045e5f18491e86
parent0a6e53bd31d3905b091dd91c9f284288e503fa48 (diff)
downloadminetest-f1ab42fdff7a15d81c8cac0f9192b3d5ff9fb913.tar.gz
minetest-f1ab42fdff7a15d81c8cac0f9192b3d5ff9fb913.tar.bz2
minetest-f1ab42fdff7a15d81c8cac0f9192b3d5ff9fb913.zip
Font: attempt fallback font, abort if no fonts found.
If you happen to have a font_path setting that is incorrect, minetest will just attempt to start the gui without a valid font which leads to a segfault later on. We can attempt to load the fallback font path fairly easy, but if that fails we should give up with a proper error message and not a weird segfault later. This forces an abort() if the fallback fails as well, and prints a useful error message to the console.
-rw-r--r--src/fontengine.cpp26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/fontengine.cpp b/src/fontengine.cpp
index 55ff001e7..da327c3f6 100644
--- a/src/fontengine.cpp
+++ b/src/fontengine.cpp
@@ -343,11 +343,31 @@ void FontEngine::initFont(unsigned int basesize, FontMode mode)
if (font != NULL) {
m_font_cache[mode][basesize] = font;
+ return;
}
- else {
- errorstream << "FontEngine: failed to load freetype font: "
- << font_path << std::endl;
+
+ // try fallback font
+ errorstream << "FontEngine: failed to load: " << font_path << ", trying to fall back "
+ "to fallback font" << std::endl;
+
+ font_path = g_settings->get(font_config_prefix + "fallback_font_path");
+
+ font = gui::CGUITTFont::createTTFont(m_env,
+ font_path.c_str(), size, true, true, font_shadow,
+ font_shadow_alpha);
+
+ if (font != NULL) {
+ m_font_cache[mode][basesize] = font;
+ return;
}
+
+ // give up
+ errorstream << "FontEngine: failed to load freetype font: "
+ << font_path << std::endl;
+ errorstream << "minetest can not continue without a valid font. Please correct "
+ "the 'font_path' setting or install the font file in the proper "
+ "location" << std::endl;
+ abort();
}
#endif
}