Upgrade GDB from 7.4.1 to 7.6.1 on the vendor branch
[dragonfly.git] / contrib / gdb-7 / gdb / common / xml-utils.c
CommitLineData
a45ae5f8
JM
1/* Shared helper routines for manipulating XML.
2
ef5ccd6c 3 Copyright (C) 2006-2013 Free Software Foundation, Inc.
a45ae5f8
JM
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20#ifdef GDBSERVER
21#include "server.h"
22#else
23#include "defs.h"
24#endif
25
26#include "xml-utils.h"
27
28#include <string.h>
29
30/* Return a malloc allocated string with special characters from TEXT
31 replaced by entity references. */
32
33char *
34xml_escape_text (const char *text)
35{
36 char *result;
37 int i, special;
38
39 /* Compute the length of the result. */
40 for (i = 0, special = 0; text[i] != '\0'; i++)
41 switch (text[i])
42 {
43 case '\'':
44 case '\"':
45 special += 5;
46 break;
47 case '&':
48 special += 4;
49 break;
50 case '<':
51 case '>':
52 special += 3;
53 break;
54 default:
55 break;
56 }
57
58 /* Expand the result. */
59 result = xmalloc (i + special + 1);
60 for (i = 0, special = 0; text[i] != '\0'; i++)
61 switch (text[i])
62 {
63 case '\'':
64 strcpy (result + i + special, "&apos;");
65 special += 5;
66 break;
67 case '\"':
68 strcpy (result + i + special, "&quot;");
69 special += 5;
70 break;
71 case '&':
72 strcpy (result + i + special, "&amp;");
73 special += 4;
74 break;
75 case '<':
76 strcpy (result + i + special, "&lt;");
77 special += 3;
78 break;
79 case '>':
80 strcpy (result + i + special, "&gt;");
81 special += 3;
82 break;
83 default:
84 result[i + special] = text[i];
85 break;
86 }
87 result[i + special] = '\0';
88
89 return result;
90}