[poppler] 2 commits - goo/GooString.cc goo/GooString.h

Albert Astals Cid aacid at kemper.freedesktop.org
Tue Sep 6 21:15:43 UTC 2016


 goo/GooString.cc |    4 ++++
 goo/GooString.h  |    8 +-------
 2 files changed, 5 insertions(+), 7 deletions(-)

New commits:
commit f5c34c63a64ae3a6af9aee2d2710a966b7e2d95c
Author: Jakub Kucharski <jakubkucharski97 at gmail.com>
Date:   Sat Aug 27 06:13:55 2016 +0200

    goo: check at compile time if GooString has the right size
    
    static_assert is a C++ feature introduced in C++0x. GCC already uses this
    standard by default, so we can make use of it. In case it's compiled without C++
    >= 0x support, the #if macro will get rid of it.

diff --git a/goo/GooString.cc b/goo/GooString.cc
index fa3142d..1c0c634 100644
--- a/goo/GooString.cc
+++ b/goo/GooString.cc
@@ -200,6 +200,10 @@ GooString::GooString() {
   s = NULL;
   length = 0;
   Set(NULL);
+
+#if __cplusplus >= 201103L
+  static_assert(sizeof(GooString) == GooString::STR_FINAL_SIZE, "You should check memory alignment or STR_STATIC_SIZE calculation.");
+#endif
 }
 
 GooString::GooString(const char *sA) {
commit 3a1a4baacf9672cd1e26a860303ba22f75c2b942
Author: Jakub Kucharski <jakubkucharski97 at gmail.com>
Date:   Sat Aug 27 06:09:04 2016 +0200

    goo: fix GooString::STR_STATIC_SIZE calculation
    
    Before this fix on 64-bit systems 4 bytes were left unsused (because of memory
    alignment). I've also removed unnecessary MemoryLayout class which used to be
    used to calculate GooString::STR_STATIC_SIZE, although it had only made it
    harder.

diff --git a/goo/GooString.h b/goo/GooString.h
index 5ff01ef..a152a98 100644
--- a/goo/GooString.h
+++ b/goo/GooString.h
@@ -175,14 +175,8 @@ private:
   // You can tweak the final object size for different time/space tradeoffs.
   // In libc malloc(), rounding is 16 so it's best to choose a value that
   // is a multiple of 16.
-  class MemoryLayout {
-      char c[sizeof(char*)];
-      int i;
-      char* s;
-  };
-
   static const int STR_FINAL_SIZE = 32;
-  static const int STR_STATIC_SIZE = STR_FINAL_SIZE - sizeof(MemoryLayout) + sizeof(char*);
+  static const int STR_STATIC_SIZE = STR_FINAL_SIZE - sizeof(int) - sizeof(char*);
 
   int  roundedSize(int len);
 


More information about the poppler mailing list