| 7591 | } |
| 7592 | |
| 7593 | static ELEMENT_TYPE * |
| 7594 | getElementType(XML_Parser parser, const ENCODING *enc, const char *ptr, |
| 7595 | const char *end) { |
| 7596 | DTD *const dtd = parser->m_dtd; /* save one level of indirection */ |
| 7597 | const XML_Char *name = poolStoreString(&dtd->pool, enc, ptr, end); |
| 7598 | ELEMENT_TYPE *ret; |
| 7599 | |
| 7600 | if (! name) |
| 7601 | return NULL; |
| 7602 | ret = (ELEMENT_TYPE *)lookup(parser, &dtd->elementTypes, name, |
| 7603 | sizeof(ELEMENT_TYPE)); |
| 7604 | if (! ret) |
| 7605 | return NULL; |
| 7606 | if (ret->name != name) |
| 7607 | poolDiscard(&dtd->pool); |
| 7608 | else { |
| 7609 | poolFinish(&dtd->pool); |
| 7610 | if (! setElementTypePrefix(parser, ret)) |
| 7611 | return NULL; |
| 7612 | } |
| 7613 | return ret; |
| 7614 | } |
| 7615 | |
| 7616 | static XML_Char * |
| 7617 | copyString(const XML_Char *s, const XML_Memory_Handling_Suite *memsuite) { |
no test coverage detected