* ppc-opc.c (powerpc_opcodes) <"lswx">: Use RAX for the second and
[binutils-gdb.git] / gdb / common / xml-utils.c
blobc486220201c97790943331ac381fdd705c5c1be5
1 /* Shared helper routines for manipulating XML.
3 Copyright (C) 2006-2012 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
20 #ifdef GDBSERVER
21 #include "server.h"
22 #else
23 #include "defs.h"
24 #endif
26 #include "xml-utils.h"
28 #include <string.h>
30 /* Return a malloc allocated string with special characters from TEXT
31 replaced by entity references. */
33 char *
34 xml_escape_text (const char *text)
36 char *result;
37 int i, special;
39 /* Compute the length of the result. */
40 for (i = 0, special = 0; text[i] != '\0'; i++)
41 switch (text[i])
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;
58 /* Expand the result. */
59 result = xmalloc (i + special + 1);
60 for (i = 0, special = 0; text[i] != '\0'; i++)
61 switch (text[i])
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;
87 result[i + special] = '\0';
89 return result;