Blame SOURCES/0001-Fix-stricter-gcc-warnings.patch

707541
From cf872f3053dd5b0af7b3b4f583bcce9d5bb953c2 Mon Sep 17 00:00:00 2001
707541
From: Tim Eves <tim_eves@sil.org>
707541
Date: Wed, 5 Jul 2017 21:27:03 +0700
707541
Subject: [PATCH] Fix stricter gcc warnings
707541
707541
Also get rid of auto_ptr from comparerenderer
707541
---
707541
 src/gr_logging.cpp                        |   2 +-
707541
 tests/comparerenderer/RenderedLine.h | 14 ++++++--------
707541
 tests/comparerenderer/Gr2Renderer.h | 166 ++++++++++++++--------------
707541
707541
diff --git a/src/gr_logging.cpp b/src/gr_logging.cpp
707541
index 3e453ba..b75a394 100644
707541
--- a/src/gr_logging.cpp
707541
+++ b/src/gr_logging.cpp
707541
@@ -214,7 +214,7 @@ json & graphite2::operator << (json & j, const dslot & ds) throw()
707541
     j << "user" << json::flat << json::array;
707541
     for (int n = 0; n!= seg.numAttrs(); ++n)
707541
         j   << s.userAttrs()[n];
707541
-        j   << json::close;
707541
+    j       << json::close;
707541
     if (s.firstChild())
707541
     {
707541
         j   << "children" << json::flat << json::array;
707541
707541
diff --git a/tests/comparerenderer/RenderedLine.h b/tests/comparerenderer/RenderedLine.h
707541
index fb8398d..649fb63 100644
707541
--- a/tests/comparerenderer/RenderedLine.h
707541
+++ b/tests/comparerenderer/RenderedLine.h
707541
@@ -99,9 +99,9 @@ class RenderedLine
707541
 {
707541
     public:
707541
         RenderedLine()
707541
-        : m_text(NULL), m_numGlyphs(0), m_advance(0), m_glyphs(NULL)
707541
+        : m_numGlyphs(0), m_advance(0), m_glyphs(NULL)
707541
         {}
707541
-        RenderedLine(std::string *text, size_t numGlyphs, float adv = 0.0f)
707541
+        RenderedLine(const std::string & text, size_t numGlyphs, float adv = 0.0f)
707541
         : m_text(text), m_numGlyphs(numGlyphs), m_advance(adv), m_glyphs(new GlyphInfo[numGlyphs])
707541
         {
707541
         }
707541
@@ -109,12 +109,11 @@ class RenderedLine
707541
         {
707541
             delete [] m_glyphs;
707541
             m_glyphs = NULL;
707541
-            delete m_text;
707541
         }
707541
         void setAdvance(float newAdv) { m_advance = newAdv; }
707541
         void dump(FILE * f)
707541
         {
707541
-            fprintf(f, "{\"%s\" : [", m_text->c_str());
707541
+            fprintf(f, "{\"%s\" : [", m_text.c_str());
707541
             for (size_t i = 0; i < m_numGlyphs; i++)
707541
             {
707541
                 //fprintf(f, "%2u", (unsigned int)i);
707541
@@ -157,9 +156,8 @@ class RenderedLine
707541
             return true;
707541
         }
707541
     private:
707541
-        size_t m_numGlyphs;
707541
-        float m_advance;
707541
+        size_t      m_numGlyphs;
707541
+        float       m_advance;
707541
         GlyphInfo * m_glyphs;
707541
-        std::string * m_text;
707541
+        std::string m_text;
707541
 };
707541
-
707541
-- 
707541
diff --git a/tests/comparerenderer/Gr2Renderer.h b/tests/comparerenderer/Gr2Renderer.h
707541
index dfce31b..8aaeddc 100644
707541
--- a/tests/comparerenderer/Gr2Renderer.h
707541
+++ b/tests/comparerenderer/Gr2Renderer.h
707541
@@ -22,6 +22,7 @@
707541
 #pragma once
707541
 
707541
 #include <new>
707541
+#include <iostream>
707541
 #include <memory>
707541
 #include <string>
707541
 #include "Renderer.h"
707541
@@ -30,99 +31,102 @@
707541
 #include <graphite2/Segment.h>
707541
 #include <graphite2/Log.h>
707541
 
707541
-class Gr2Face : private std::auto_ptr<gr_face>
707541
+
707541
+using gr_face_ptr = std::unique_ptr<gr_face, decltype(&gr_face_destroy)>;
707541
+using gr_font_ptr = std::unique_ptr<gr_font, decltype(&gr_font_destroy)>;
707541
+using gr_feature_val_ptr = std::unique_ptr<gr_feature_val, decltype(&gr_featureval_destroy)>;
707541
+using gr_segment_ptr = std::unique_ptr<gr_segment, decltype(&gr_seg_destroy)>;
707541
+
707541
+class Gr2Face : public gr_face_ptr
707541
 {
707541
 public:
707541
 	Gr2Face(const char * fontFile, const std::string & logPath, const bool demand_load)
707541
-    :  std::auto_ptr<gr_face>(gr_make_file_face(fontFile, !demand_load ? gr_face_preloadGlyphs : gr_face_default))
707541
+	: gr_face_ptr(gr_make_file_face(fontFile,
707541
+			!demand_load ? gr_face_preloadGlyphs : gr_face_default),
707541
+		&gr_face_destroy)
707541
 	{
707541
-        if (!get()) return;
707541
-
707541
-    	if (logPath.size())	gr_start_logging(get(), logPath.c_str());
707541
+		if (*this && logPath.size())	gr_start_logging(get(), logPath.c_str());
707541
 	}
707541
 
707541
+	Gr2Face(Gr2Face && f): gr_face_ptr(std::move(f)) {}
707541
+
707541
 	~Gr2Face() throw()
707541
 	{
707541
-    	gr_stop_logging(get());
707541
-        gr_face_destroy(get());
707541
-        release();
707541
+		gr_stop_logging(get());
707541
 	}
707541
-
707541
-	operator bool () const		{ return get() != 0; }
707541
-	operator gr_face* () const	{ return get(); }
707541
 };
707541
 
707541
 
707541
 class Gr2Renderer : public Renderer
707541
 {
707541
 public:
707541
-    Gr2Renderer(Gr2Face & face, int fontSize, int textDir, FeatureParser * features)
707541
-	: m_rtl(textDir),
707541
-	  m_grFace(face),
707541
-	  m_grFont(0),
707541
-	  m_grFeatures(0)
707541
-    {
707541
-        if (m_grFace)
707541
-        {
707541
-            m_grFont = gr_make_font(static_cast<float>(fontSize), m_grFace);
707541
-            if (features)
707541
-            {
707541
-                m_grFeatures = gr_face_featureval_for_lang(m_grFace, features->langId());
707541
-                for (size_t i = 0; i < features->featureCount(); i++)
707541
-                {
707541
-                    const gr_feature_ref * ref = gr_face_find_fref(m_grFace, features->featureId(i));
707541
-                    if (ref)
707541
-                        gr_fref_set_feature_value(ref, features->featureSValue(i), m_grFeatures);
707541
-                }
707541
-            }
707541
-            else
707541
-            {
707541
-                m_grFeatures = gr_face_featureval_for_lang(m_grFace, 0);
707541
-            }
707541
-        }
707541
-        m_name = "graphite2";
707541
-    }
707541
-    virtual ~Gr2Renderer()
707541
-    {
707541
-        gr_featureval_destroy(m_grFeatures);
707541
-        gr_font_destroy(m_grFont);
707541
-    }
707541
-
707541
-    virtual void renderText(const char * utf8, size_t length, RenderedLine * result, FILE *log)
707541
-    {
707541
-        const void * pError = NULL;
707541
-        if (!m_grFace)
707541
-        {
707541
-            new(result) RenderedLine();
707541
-            return;
707541
-        }
707541
-        size_t numCodePoints = gr_count_unicode_characters(gr_utf8,
707541
-            reinterpret_cast<const void*>(utf8), reinterpret_cast<const void*>(utf8 + length), &pError);
707541
-        if (pError)
707541
-            fprintf(stderr, "Invalid Unicode pos %d\n", static_cast<int>(reinterpret_cast<const char*>(pError) - utf8));
707541
-        gr_segment* pSeg = gr_make_seg(m_grFont, m_grFace, 0u, m_grFeatures, gr_utf8, utf8, numCodePoints, m_rtl ? 1 : 0);
707541
-        if (!pSeg)
707541
-        {
707541
-            fprintf(stderr, "Failed to create segment\n");
707541
-            new(result) RenderedLine(0, .0f);
707541
-            return;
707541
-        }
707541
-        std::string *s = new std::string(utf8, length);
707541
-        RenderedLine * renderedLine = new(result) RenderedLine(s, gr_seg_n_slots(pSeg),
707541
-                                                               gr_seg_advance_X(pSeg));
707541
-        int i = 0;
707541
-        for (const gr_slot* s = gr_seg_first_slot(pSeg); s;
707541
-             s = gr_slot_next_in_segment(s), ++i)
707541
-            (*renderedLine)[i].set(gr_slot_gid(s), gr_slot_origin_X(s),
707541
-                                   gr_slot_origin_Y(s), gr_slot_before(s),
707541
-                                   gr_slot_after(s));
707541
-        gr_seg_destroy(pSeg);
707541
-    }
707541
-    virtual const char * name() const { return m_name; }
707541
-private:
707541
-    int m_rtl;
707541
-    Gr2Face   m_grFace;
707541
-    gr_font * m_grFont;
707541
-    gr_feature_val * m_grFeatures;
707541
-    const char * m_name;
707541
-};
707541
+	Gr2Renderer(Gr2Face & face, int fontSize, bool rtl, FeatureParser * features)
707541
+	: m_rtl(rtl),
707541
+		m_grFace(std::move(face)),
707541
+		m_grFont(nullptr, &gr_font_destroy),
707541
+		m_grFeatures(nullptr, gr_featureval_destroy),
707541
+		m_name("graphite2")
707541
+	{
707541
+		if (!m_grFace)
707541
+			return;
707541
+
707541
+		m_grFont.reset(gr_make_font(static_cast<float>(fontSize), m_grFace.get()));
707541
+		if (features)
707541
+		{
707541
+			m_grFeatures.reset(gr_face_featureval_for_lang(m_grFace.get(), features->langId()));
707541
+			for (size_t i = 0; i < features->featureCount(); i++)
707541
+			{
707541
+				const gr_feature_ref * ref = gr_face_find_fref(m_grFace.get(), features->featureId(i));
707541
+				if (ref)
707541
+				gr_fref_set_feature_value(ref, features->featureSValue(i), m_grFeatures.get());
707541
+			}
707541
+		}
707541
+		else
707541
+		{
707541
+			m_grFeatures.reset(gr_face_featureval_for_lang(m_grFace.get(), 0));
707541
+		}
707541
+	}
707541
+
707541
+	virtual void renderText(const char * utf8, size_t length, RenderedLine * result, FILE *log)
707541
+	{
707541
+		const void * pError = NULL;
707541
+		if (!m_grFace)
707541
+		{
707541
+			new (result) RenderedLine();
707541
+			return;
707541
+		}
707541
+		size_t numCodePoints = gr_count_unicode_characters(gr_utf8, utf8, utf8 + length, &pError);
707541
+		if (pError)
707541
+			std::cerr << "Invalid Unicode pos" << int(static_cast<const char*>(pError) - utf8) << std::endl;
707541
+
707541
+		gr_segment_ptr pSeg = gr_segment_ptr(
707541
+				gr_make_seg(m_grFont.get(), m_grFace.get(), 0u, m_grFeatures.get(),
707541
+										gr_utf8, utf8, numCodePoints, m_rtl),
707541
+				&gr_seg_destroy);
707541
+
707541
+		if (!pSeg)
707541
+		{
707541
+			std::cerr << "Failed to create segment" << std::endl;
707541
+			new (result) RenderedLine(0, .0f);
707541
+			return;
707541
+		}
707541
+
707541
+		RenderedLine * renderedLine = new (result) RenderedLine(std::string(utf8, length), gr_seg_n_slots(pSeg.get()),
707541
+																															 gr_seg_advance_X(pSeg.get()));
707541
+		const gr_slot * s = gr_seg_first_slot(pSeg.get());
707541
+		for (int i = 0; s; ++i)
707541
+		{
707541
+			(*renderedLine)[i].set(gr_slot_gid(s), gr_slot_origin_X(s),
707541
+														gr_slot_origin_Y(s), gr_slot_before(s),
707541
+														gr_slot_after(s));
707541
+			s = gr_slot_next_in_segment(s);
707541
+		}
707541
+	}
707541
+	virtual const char * name() const { return m_name; }
707541
+	private:
707541
+		Gr2Face 						m_grFace;
707541
+		const char * const 	m_name;
707541
+		bool 					 			m_rtl;
707541
+		gr_font_ptr 				m_grFont;
707541
+		gr_feature_val_ptr	m_grFeatures;
707541
+	};
707541
-- 
707541
2.17.0
707541