* * * Special escaping routines * * * ************************************************************************/
| 126 | * * |
| 127 | ************************************************************************/ |
| 128 | static unsigned char * |
| 129 | xmlSerializeHexCharRef(unsigned char *out, int val) { |
| 130 | unsigned char *ptr; |
| 131 | |
| 132 | *out++ = '&'; |
| 133 | *out++ = '#'; |
| 134 | *out++ = 'x'; |
| 135 | if (val < 0x10) ptr = out; |
| 136 | else if (val < 0x100) ptr = out + 1; |
| 137 | else if (val < 0x1000) ptr = out + 2; |
| 138 | else if (val < 0x10000) ptr = out + 3; |
| 139 | else if (val < 0x100000) ptr = out + 4; |
| 140 | else ptr = out + 5; |
| 141 | out = ptr + 1; |
| 142 | while (val > 0) { |
| 143 | switch (val & 0xF) { |
| 144 | case 0: *ptr-- = '0'; break; |
| 145 | case 1: *ptr-- = '1'; break; |
| 146 | case 2: *ptr-- = '2'; break; |
| 147 | case 3: *ptr-- = '3'; break; |
| 148 | case 4: *ptr-- = '4'; break; |
| 149 | case 5: *ptr-- = '5'; break; |
| 150 | case 6: *ptr-- = '6'; break; |
| 151 | case 7: *ptr-- = '7'; break; |
| 152 | case 8: *ptr-- = '8'; break; |
| 153 | case 9: *ptr-- = '9'; break; |
| 154 | case 0xA: *ptr-- = 'A'; break; |
| 155 | case 0xB: *ptr-- = 'B'; break; |
| 156 | case 0xC: *ptr-- = 'C'; break; |
| 157 | case 0xD: *ptr-- = 'D'; break; |
| 158 | case 0xE: *ptr-- = 'E'; break; |
| 159 | case 0xF: *ptr-- = 'F'; break; |
| 160 | default: *ptr-- = '0'; break; |
| 161 | } |
| 162 | val >>= 4; |
| 163 | } |
| 164 | *out++ = ';'; |
| 165 | *out = 0; |
| 166 | return(out); |
| 167 | } |
| 168 | |
| 169 | /** |
| 170 | * xmlEscapeEntities: |
no outgoing calls
no test coverage detected