Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(629)

Side by Side Diff: third_party/libxml/entities.c

Issue 2951008: Update libxml to 2.7.7. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * entities.c : implementation for the XML entities handling 2 * entities.c : implementation for the XML entities handling
3 * 3 *
4 * See Copyright for the status of this software. 4 * See Copyright for the status of this software.
5 * 5 *
6 * daniel@veillard.com 6 * daniel@veillard.com
7 */ 7 */
8 8
9 #define IN_LIBXML 9 #define IN_LIBXML
10 #include "libxml.h" 10 #include "libxml.h"
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 xmlFree((char *) entity->URI); 132 xmlFree((char *) entity->URI);
133 if (entity->content != NULL) 133 if (entity->content != NULL)
134 xmlFree((char *) entity->content); 134 xmlFree((char *) entity->content);
135 if (entity->orig != NULL) 135 if (entity->orig != NULL)
136 xmlFree((char *) entity->orig); 136 xmlFree((char *) entity->orig);
137 } 137 }
138 xmlFree(entity); 138 xmlFree(entity);
139 } 139 }
140 140
141 /* 141 /*
142 * xmlAddEntity : register a new entity for an entities table. 142 * xmlCreateEntity:
143 *
144 * internal routine doing the entity node strutures allocations
143 */ 145 */
144 static xmlEntityPtr 146 static xmlEntityPtr
145 xmlAddEntity(xmlDtdPtr dtd, const xmlChar *name, int type, 147 xmlCreateEntity(xmlDictPtr dict, const xmlChar *name, int type,
146 » const xmlChar *ExternalID, const xmlChar *SystemID, 148 » const xmlChar *ExternalID, const xmlChar *SystemID,
147 » const xmlChar *content) { 149 » const xmlChar *content) {
148 xmlDictPtr dict = NULL;
149 xmlEntitiesTablePtr table = NULL;
150 xmlEntityPtr ret; 150 xmlEntityPtr ret;
151 151
152 if (name == NULL)
153 return(NULL);
154 if (dtd == NULL)
155 return(NULL);
156 if (dtd->doc != NULL)
157 dict = dtd->doc->dict;
158
159 switch (type) {
160 case XML_INTERNAL_GENERAL_ENTITY:
161 case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
162 case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
163 if (dtd->entities == NULL)
164 dtd->entities = xmlHashCreateDict(0, dict);
165 table = dtd->entities;
166 break;
167 case XML_INTERNAL_PARAMETER_ENTITY:
168 case XML_EXTERNAL_PARAMETER_ENTITY:
169 if (dtd->pentities == NULL)
170 dtd->pentities = xmlHashCreateDict(0, dict);
171 table = dtd->pentities;
172 break;
173 case XML_INTERNAL_PREDEFINED_ENTITY:
174 return(NULL);
175 }
176 if (table == NULL)
177 return(NULL);
178 ret = (xmlEntityPtr) xmlMalloc(sizeof(xmlEntity)); 152 ret = (xmlEntityPtr) xmlMalloc(sizeof(xmlEntity));
179 if (ret == NULL) { 153 if (ret == NULL) {
180 xmlEntitiesErrMemory("xmlAddEntity:: malloc failed"); 154 xmlEntitiesErrMemory("xmlCreateEntity: malloc failed");
181 return(NULL); 155 return(NULL);
182 } 156 }
183 memset(ret, 0, sizeof(xmlEntity)); 157 memset(ret, 0, sizeof(xmlEntity));
184 ret->type = XML_ENTITY_DECL; 158 ret->type = XML_ENTITY_DECL;
185 ret->checked = 0; 159 ret->checked = 0;
186 160
187 /* 161 /*
188 * fill the structure. 162 * fill the structure.
189 */ 163 */
190 ret->etype = (xmlEntityType) type; 164 ret->etype = (xmlEntityType) type;
(...skipping 18 matching lines...) Expand all
209 else 183 else
210 ret->content = xmlStrndup(content, ret->length); 184 ret->content = xmlStrndup(content, ret->length);
211 } else { 185 } else {
212 ret->length = 0; 186 ret->length = 0;
213 ret->content = NULL; 187 ret->content = NULL;
214 } 188 }
215 ret->URI = NULL; /* to be computed by the layer knowing 189 ret->URI = NULL; /* to be computed by the layer knowing
216 the defining entity */ 190 the defining entity */
217 ret->orig = NULL; 191 ret->orig = NULL;
218 ret->owner = 0; 192 ret->owner = 0;
193
194 return(ret);
195 }
196
197 /*
198 * xmlAddEntity : register a new entity for an entities table.
199 */
200 static xmlEntityPtr
201 xmlAddEntity(xmlDtdPtr dtd, const xmlChar *name, int type,
202 const xmlChar *ExternalID, const xmlChar *SystemID,
203 const xmlChar *content) {
204 xmlDictPtr dict = NULL;
205 xmlEntitiesTablePtr table = NULL;
206 xmlEntityPtr ret;
207
208 if (name == NULL)
209 return(NULL);
210 if (dtd == NULL)
211 return(NULL);
212 if (dtd->doc != NULL)
213 dict = dtd->doc->dict;
214
215 switch (type) {
216 case XML_INTERNAL_GENERAL_ENTITY:
217 case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
218 case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
219 if (dtd->entities == NULL)
220 dtd->entities = xmlHashCreateDict(0, dict);
221 table = dtd->entities;
222 break;
223 case XML_INTERNAL_PARAMETER_ENTITY:
224 case XML_EXTERNAL_PARAMETER_ENTITY:
225 if (dtd->pentities == NULL)
226 dtd->pentities = xmlHashCreateDict(0, dict);
227 table = dtd->pentities;
228 break;
229 case XML_INTERNAL_PREDEFINED_ENTITY:
230 return(NULL);
231 }
232 if (table == NULL)
233 return(NULL);
234 ret = xmlCreateEntity(dict, name, type, ExternalID, SystemID, content);
235 if (ret == NULL)
236 return(NULL);
219 ret->doc = dtd->doc; 237 ret->doc = dtd->doc;
220 238
221 if (xmlHashAddEntry(table, name, ret)) { 239 if (xmlHashAddEntry(table, name, ret)) {
222 /* 240 /*
223 * entity was already defined at another level. 241 * entity was already defined at another level.
224 */ 242 */
225 xmlFreeEntity(ret); 243 xmlFreeEntity(ret);
226 return(NULL); 244 return(NULL);
227 } 245 }
228 return(ret); 246 return(ret);
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 dtd->children = dtd->last = (xmlNodePtr) ret; 374 dtd->children = dtd->last = (xmlNodePtr) ret;
357 } else { 375 } else {
358 dtd->last->next = (xmlNodePtr) ret; 376 dtd->last->next = (xmlNodePtr) ret;
359 ret->prev = dtd->last; 377 ret->prev = dtd->last;
360 dtd->last = (xmlNodePtr) ret; 378 dtd->last = (xmlNodePtr) ret;
361 } 379 }
362 return(ret); 380 return(ret);
363 } 381 }
364 382
365 /** 383 /**
384 * xmlNewEntity:
385 * @doc: the document
386 * @name: the entity name
387 * @type: the entity type XML_xxx_yyy_ENTITY
388 * @ExternalID: the entity external ID if available
389 * @SystemID: the entity system ID if available
390 * @content: the entity content
391 *
392 * Create a new entity, this differs from xmlAddDocEntity() that if
393 * the document is NULL or has no internal subset defined, then an
394 * unlinked entity structure will be returned, it is then the responsability
395 * of the caller to link it to the document later or free it when not needed
396 * anymore.
397 *
398 * Returns a pointer to the entity or NULL in case of error
399 */
400 xmlEntityPtr
401 xmlNewEntity(xmlDocPtr doc, const xmlChar *name, int type,
402 const xmlChar *ExternalID, const xmlChar *SystemID,
403 const xmlChar *content) {
404 xmlEntityPtr ret;
405 xmlDictPtr dict;
406
407 if ((doc != NULL) && (doc->intSubset != NULL)) {
408 return(xmlAddDocEntity(doc, name, type, ExternalID, SystemID, content));
409 }
410 if (doc != NULL)
411 dict = doc->dict;
412 else
413 dict = NULL;
414 ret = xmlCreateEntity(dict, name, type, ExternalID, SystemID, content);
415 if (ret == NULL)
416 return(NULL);
417 ret->doc = doc;
418 return(ret);
419 }
420
421 /**
366 * xmlGetEntityFromTable: 422 * xmlGetEntityFromTable:
367 * @table: an entity table 423 * @table: an entity table
368 * @name: the entity name 424 * @name: the entity name
369 * @parameter: look for parameter entities 425 * @parameter: look for parameter entities
370 * 426 *
371 * Do an entity lookup in the table. 427 * Do an entity lookup in the table.
372 * returns the corresponding parameter entity, if found. 428 * returns the corresponding parameter entity, if found.
373 * 429 *
374 * Returns A pointer to the entity structure or NULL if not found. 430 * Returns A pointer to the entity structure or NULL if not found.
375 */ 431 */
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 } else if (IS_BYTE_CHAR(*cur)) { 683 } else if (IS_BYTE_CHAR(*cur)) {
628 char buf[11], *ptr; 684 char buf[11], *ptr;
629 685
630 snprintf(buf, sizeof(buf), "&#%d;", *cur); 686 snprintf(buf, sizeof(buf), "&#%d;", *cur);
631 buf[sizeof(buf) - 1] = 0; 687 buf[sizeof(buf) - 1] = 0;
632 ptr = buf; 688 ptr = buf;
633 while (*ptr != 0) *out++ = *ptr++; 689 while (*ptr != 0) *out++ = *ptr++;
634 } 690 }
635 cur++; 691 cur++;
636 } 692 }
637 *out++ = 0; 693 *out = 0;
638 return(buffer); 694 return(buffer);
639 } 695 }
640 696
641 /** 697 /**
642 * xmlEncodeSpecialChars: 698 * xmlEncodeSpecialChars:
643 * @doc: the document containing the string 699 * @doc: the document containing the string
644 * @input: A string to convert to XML. 700 * @input: A string to convert to XML.
645 * 701 *
646 * Do a global encoding of a string, replacing the predefined entities 702 * Do a global encoding of a string, replacing the predefined entities
647 * this routine is reentrant, and result must be deallocated. 703 * this routine is reentrant, and result must be deallocated.
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
709 *out++ = ';'; 765 *out++ = ';';
710 } else { 766 } else {
711 /* 767 /*
712 * Works because on UTF-8, all extended sequences cannot 768 * Works because on UTF-8, all extended sequences cannot
713 * result in bytes in the ASCII range. 769 * result in bytes in the ASCII range.
714 */ 770 */
715 *out++ = *cur; 771 *out++ = *cur;
716 } 772 }
717 cur++; 773 cur++;
718 } 774 }
719 *out++ = 0; 775 *out = 0;
720 return(buffer); 776 return(buffer);
721 } 777 }
722 778
723 /** 779 /**
724 * xmlCreateEntitiesTable: 780 * xmlCreateEntitiesTable:
725 * 781 *
726 * create and initialize an empty entities hash table. 782 * create and initialize an empty entities hash table.
727 * This really doesn't make sense and should be deprecated 783 * This really doesn't make sense and should be deprecated
728 * 784 *
729 * Returns the xmlEntitiesTablePtr just created or NULL in case of error. 785 * Returns the xmlEntitiesTablePtr just created or NULL in case of error.
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
957 * 1013 *
958 * This will dump the content of the entity table as an XML DTD definition 1014 * This will dump the content of the entity table as an XML DTD definition
959 */ 1015 */
960 void 1016 void
961 xmlDumpEntitiesTable(xmlBufferPtr buf, xmlEntitiesTablePtr table) { 1017 xmlDumpEntitiesTable(xmlBufferPtr buf, xmlEntitiesTablePtr table) {
962 xmlHashScan(table, (xmlHashScanner)xmlDumpEntityDeclScan, buf); 1018 xmlHashScan(table, (xmlHashScanner)xmlDumpEntityDeclScan, buf);
963 } 1019 }
964 #endif /* LIBXML_OUTPUT_ENABLED */ 1020 #endif /* LIBXML_OUTPUT_ENABLED */
965 #define bottom_entities 1021 #define bottom_entities
966 #include "elfgcchack.h" 1022 #include "elfgcchack.h"
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698