OLD | NEW |
---|---|
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ots.h" | 5 #include "ots.h" |
6 | 6 |
7 #include <sys/types.h> | 7 #include <sys/types.h> |
8 #include <zlib.h> | 8 #include <zlib.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
76 hunks_.push_back(p); | 76 hunks_.push_back(p); |
77 return p; | 77 return p; |
78 } | 78 } |
79 | 79 |
80 private: | 80 private: |
81 std::vector<uint8_t*> hunks_; | 81 std::vector<uint8_t*> hunks_; |
82 }; | 82 }; |
83 | 83 |
84 // Use a macro instead of a function because gcc 4.4.3 creates static | 84 // Use a macro instead of a function because gcc 4.4.3 creates static |
85 // initializers in that case. | 85 // initializers in that case. |
86 #if defined(__BIG_ENDIAN__) || defined(_BIG_ENDIAN) | 86 // Try endianness checks with zero, one and two leading underscores, |
Yusuke Sato
2012/05/01 02:23:31
The #ifdefs look too complex to me. What about rev
bashi
2012/05/01 04:05:49
Done. Thank you for suggestion!
| |
87 #define TAG(d, c, b, a) (a | (b << 8) | (c << 16) | (d << 24)) | 87 // as the symbols actually defined seem to vary between systems. (Sigh.) |
88 #else | 88 #if defined(BIG_ENDIAN) && defined(LITTLE_ENDIAN) && defined(BYTE_ORDER) |
89 #define TAG(a, b, c, d) (a | (b << 8) | (c << 16) | (d << 24)) | 89 # if BYTE_ORDER == BIG_ENDIAN |
90 # define TAG(a, b, c, d) ((a << 24) | (b << 16) | (c << 8) | d) | |
91 # elif BYTE_ORDER == LITTLE_ENDIAN | |
92 # define TAG(a, b, c, d) (a | (b << 8) | (c << 16) | (d << 24)) | |
93 # else | |
94 # error "unsupported byte order!" | |
95 # endif | |
96 #elif defined(_BIG_ENDIAN) && defined(_LITTLE_ENDIAN) && defined(_BYTE_ORDER) | |
97 # if _BYTE_ORDER == _BIG_ENDIAN | |
98 # define TAG(a, b, c, d) ((a << 24) | (b << 16) | (c << 8) | d) | |
99 # elif _BYTE_ORDER == _LITTLE_ENDIAN | |
100 # define TAG(a, b, c, d) (a | (b << 8) | (c << 16) | (d << 24)) | |
101 # else | |
102 # error "unsupported byte order!" | |
103 # endif | |
104 #elif defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN) && defined(__BYTE_ORDER) | |
105 # if __BYTE_ORDER == __BIG_ENDIAN | |
106 # define TAG(a, b, c, d) ((a << 24) | (b << 16) | (c << 8) | d) | |
107 # elif __BYTE_ORDER == __LITTLE_ENDIAN | |
108 # define TAG(a, b, c, d) (a | (b << 8) | (c << 16) | (d << 24)) | |
109 # else | |
110 # error "unsupported byte order!" | |
111 # endif | |
112 #elif defined(__BIG_ENDIAN__) | |
113 # define TAG(a, b, c, d) ((a << 24) | (b << 16) | (c << 8) | d) | |
114 #else // fall back to assuming little-endian | |
115 # define TAG(a, b, c, d) (a | (b << 8) | (c << 16) | (d << 24)) | |
90 #endif | 116 #endif |
91 | 117 |
92 const struct { | 118 const struct { |
93 uint32_t tag; | 119 uint32_t tag; |
94 bool (*parse)(ots::OpenTypeFile *otf, const uint8_t *data, size_t length); | 120 bool (*parse)(ots::OpenTypeFile *otf, const uint8_t *data, size_t length); |
95 bool (*serialise)(ots::OTSStream *out, ots::OpenTypeFile *file); | 121 bool (*serialise)(ots::OTSStream *out, ots::OpenTypeFile *file); |
96 bool (*should_serialise)(ots::OpenTypeFile *file); | 122 bool (*should_serialise)(ots::OpenTypeFile *file); |
97 void (*free)(ots::OpenTypeFile *file); | 123 void (*free)(ots::OpenTypeFile *file); |
98 bool required; | 124 bool required; |
99 } table_parsers[] = { | 125 } table_parsers[] = { |
(...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
715 va_start(va, format); | 741 va_start(va, format); |
716 std::vfprintf(stderr, format, va); | 742 std::vfprintf(stderr, format, va); |
717 va_end(va); | 743 va_end(va); |
718 std::fprintf(stderr, "\n"); | 744 std::fprintf(stderr, "\n"); |
719 std::fflush(stderr); | 745 std::fflush(stderr); |
720 } | 746 } |
721 } | 747 } |
722 #endif | 748 #endif |
723 | 749 |
724 } // namespace ots | 750 } // namespace ots |
OLD | NEW |