Beispiel #1
0
static const char *xml_parse_meta_tag(ACL_XML2 *xml, const char *data)
{
	int   ch;

	if (*data == 0)
		return data;

	if (xml->curr_node->ltag == xml->dummy)
		xml->curr_node->ltag = END(xml);

	while ((ch = *data) != 0) {
		if (END(xml) - xml->curr_node->ltag >= (ssize_t) CDATA_SIZE
			&& IS_CDATA(xml->curr_node->ltag))
		{
			xml->curr_node->ltag_size =
				END(xml) - xml->curr_node->ltag;
			ADD(xml, '\0');
			xml->curr_node->text = END(xml);
			xml->curr_node->status = ACL_XML2_S_CDATA;
			xml->curr_node->flag |= ACL_XML2_F_CDATA;
			break;
		} else if (IS_SPACE(ch) || ch == '>') {
			xml->curr_node->ltag_size =
				END(xml) - xml->curr_node->ltag;
			if (NO_SPACE(xml))
				return data;
			ADD(xml, '\0');
			data++;
			xml->curr_node->status = ACL_XML2_S_MTXT;
			break;
		}

		if (NO_SPACE(xml))
			return data;
		ADD(xml, ch);
		data++;
	}

	return data;
}
Beispiel #2
0
static const char *xml_parse_meta_tag(ACL_XML2 *xml, const char *data)
{
    int   ch;

    if (*data == 0)
        return data;

    if (xml->curr_node->ltag == xml->addr)
        xml->curr_node->ltag = xml->ptr;

    while ((ch = *data) != 0) {
#if 0
        if (IS_SPACE(ch) || ch == '>') {
            if (xml->len < MIN_LEN)
                return data;
            data++;
            xml->curr_node->ltag_size =
                xml->ptr - xml->curr_node->ltag;

            if (IS_CDATA(xml->curr_node->ltag)) {
                cdata_prepare(xml, ch);
                xml->curr_node->status = ACL_XML2_S_CDATA;
                xml->curr_node->flag |= ACL_XML2_F_CDATA;
            } else {
                if (xml->len < MIN_LEN)
                    return data;
                *xml->ptr++ = 0;
                xml->len--;
                xml->curr_node->status = ACL_XML2_S_MTXT;
            }
            break;
        }
#else

        if (xml->ptr - xml->curr_node->ltag >= (ssize_t) CDATA_SIZE
                && IS_CDATA(xml->curr_node->ltag))
        {
            xml->curr_node->ltag_size =
                xml->ptr - xml->curr_node->ltag;
            cdata_prepare(xml);
            xml->curr_node->status = ACL_XML2_S_CDATA;
            xml->curr_node->flag |= ACL_XML2_F_CDATA;
            break;
        } else if (IS_SPACE(ch) || ch == '>') {
            xml->curr_node->ltag_size =
                xml->ptr - xml->curr_node->ltag;
            if (xml->len < MIN_LEN)
                return data;
            data++;
            *xml->ptr++ = 0;
            xml->len--;
            xml->curr_node->status = ACL_XML2_S_MTXT;
            break;
        }
#endif

        if (xml->len < MIN_LEN)
            return data;

        data++;
        xml->len--;
        *xml->ptr++ = ch;
    }

    return data;
}