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; }
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; }