| 1117 | #endif |
| 1118 | |
| 1119 | static const char *ReadString(std::string *s, const char *ptr, size_t len) { |
| 1120 | // Read untile NULL(\0). |
| 1121 | const char *p = ptr; |
| 1122 | const char *q = ptr; |
| 1123 | while ((size_t(q - ptr) < len) && (*q) != 0) { |
| 1124 | q++; |
| 1125 | } |
| 1126 | |
| 1127 | if (size_t(q - ptr) >= len) { |
| 1128 | (*s).clear(); |
| 1129 | return NULL; |
| 1130 | } |
| 1131 | |
| 1132 | (*s) = std::string(p, q); |
| 1133 | |
| 1134 | return q + 1; // skip '\0' |
| 1135 | } |
| 1136 | |
| 1137 | static bool ReadAttribute(std::string *name, std::string *type, |
| 1138 | std::vector<unsigned char> *data, size_t *marker_size, |
no test coverage detected