Exemplo n.º 1
0
size_t
buffer_read_ (scew_reader *reader, XML_Char *buffer, size_t char_no)
{
  size_t read_no = 0;
  size_t maxlen = 0;
  scew_reader_buffer *buf_reader = NULL;

  assert (reader != NULL);
  assert (buffer != NULL);

  buf_reader = scew_reader_data (reader);

  /* Get maximum number of available bytes in buffer. */
  maxlen = buf_reader->size - buf_reader->current;
  read_no = (char_no > maxlen) ? maxlen : char_no;

  scew_memcpy (buffer, buf_reader->buffer + buf_reader->current, read_no);
  buf_reader->current += read_no;

  return read_no;
}
Exemplo n.º 2
0
XML_Char*
scew_strescape (XML_Char const *src)
{
    XML_Char *p = (XML_Char *) src;
    XML_Char *escaped = NULL;
    unsigned int len = 0;

    assert (src != NULL);

    /* We first need to calculate the size of the new escaped string. */
    while (*p != _XT('\0'))
    {
        switch (*p)
        {
        case CHR_LT_:
            len += LT_SIZE_;
            break;
        case CHR_GT_:
            len += GT_SIZE_;
            break;
        case CHR_AMP_:
            len += AMP_SIZE_;
            break;
        case CHR_APOS_:
            len += APOS_SIZE_;
            break;
        case CHR_QUOT_:
            len += QUOT_SIZE_;
            break;
        default:
            len += 1;
            break;
        }
        p += 1;
    }

    /* Allocate new string (if necessary). */
    escaped = calloc (len + 1, sizeof (XML_Char));

    /* Append characters to new string, escaping the needed ones. */
    p = (XML_Char *) src;
    len = 0;
    while (*p != _XT('\0'))
    {
        switch (*p)
        {
        case CHR_LT_:
            scew_memcpy (&escaped[len], XML_LT_, LT_SIZE_);
            len += LT_SIZE_;
            break;
        case CHR_GT_:
            scew_memcpy (&escaped[len], XML_GT_, GT_SIZE_);
            len += GT_SIZE_;
            break;
        case CHR_AMP_:
            scew_memcpy (&escaped[len], XML_AMP_, AMP_SIZE_);
            len += AMP_SIZE_;
            break;
        case CHR_APOS_:
            scew_memcpy (&escaped[len], XML_APOS_, APOS_SIZE_);
            len += APOS_SIZE_;
            break;
        case CHR_QUOT_:
            scew_memcpy (&escaped[len], XML_QUOT_, QUOT_SIZE_);
            len += QUOT_SIZE_;
            break;
        default:
            escaped[len] = *p;
            len += 1;
            break;
        }
        p += 1;
    }

    return escaped;
}