summaryrefslogtreecommitdiff
path: root/src/gl_draw.cxx
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2018-12-30 11:04:10 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2018-12-30 11:04:10 +0100
commit362f9350868286b066070df7da1f496df08ecd73 (patch)
treed4bf7e564018d835092fff0f311ebcec6740d02d /src/gl_draw.cxx
parent26bb0e5a831be64f21eec41efef73571aebadab5 (diff)
parentde199c327e9b55bd615f7262724da8ecba1999cf (diff)
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'src/gl_draw.cxx')
-rw-r--r--src/gl_draw.cxx34
1 files changed, 16 insertions, 18 deletions
diff --git a/src/gl_draw.cxx b/src/gl_draw.cxx
index 695c4ee08..ed35d8d62 100644
--- a/src/gl_draw.cxx
+++ b/src/gl_draw.cxx
@@ -97,26 +97,24 @@ void gl_remove_displaylist_fonts()
for (int j = 0 ; j < FL_FREE_FONT ; ++j)
{
- Fl_Font_Descriptor* past = 0;
- Fl_Font_Descriptor** s_first = Fl_Gl_Window_Driver::global()->fontnum_to_fontdescriptor(j);
- Fl_Font_Descriptor* f = *s_first;
- while (f != 0) {
- if(f->listbase) {
- if(f == *s_first) {
- *s_first = f->next;
- }
- else {
- past->next = f->next;
+ Fl_Font_Descriptor *prevDesc = 0L, *nextDesc = 0L;
+ Fl_Font_Descriptor *&firstDesc = *Fl_Gl_Window_Driver::global()->fontnum_to_fontdescriptor(j);
+ for (Fl_Font_Descriptor *desc = firstDesc; desc; desc = nextDesc)
+ {
+ nextDesc = desc->next;
+ if(desc->listbase) {
+ // remove descriptor from a single-linked list
+ if(desc == firstDesc) {
+ firstDesc = desc->next;
+ } else if (prevDesc) {
+ // prevDesc should not be NULL, but this test will make static analysis shut up
+ prevDesc->next = desc->next;
}
// It would be nice if this next line was in a destructor somewhere
- glDeleteLists(f->listbase, Fl_Gl_Window_Driver::global()->genlistsize());
- Fl_Font_Descriptor* tmp = f;
- f = f->next;
- delete tmp;
- }
- else {
- past = f;
- f = f->next;
+ glDeleteLists(desc->listbase, Fl_Gl_Window_Driver::global()->genlistsize());
+ delete desc;
+ } else {
+ prevDesc = desc;
}
}
}