comparison src/core/ngx_string.c @ 1544:998c44b19e30

ngx_escape_html()
author Igor Sysoev <igor@sysoev.ru>
date Thu, 27 Sep 2007 09:36:50 +0000
parents f5bd1a7ed2cd
children d0bdd5f2276e
comparison
equal deleted inserted replaced
1543:8596627c4cc5 1544:998c44b19e30
1297 *dst = d; 1297 *dst = d;
1298 *src = s; 1298 *src = s;
1299 } 1299 }
1300 1300
1301 1301
1302 uintptr_t
1303 ngx_escape_html(u_char *dst, u_char *src, size_t size)
1304 {
1305 u_char ch;
1306 ngx_uint_t i, len;
1307
1308 if (dst == NULL) {
1309
1310 len = 0;
1311
1312 for (i = 0; i < size; i++) {
1313 switch (*src++) {
1314
1315 case '<':
1316 len += sizeof("&lt;") - 2;
1317 break;
1318
1319 case '>':
1320 len += sizeof("&gt;") - 2;
1321 break;
1322
1323 case '&':
1324 len += sizeof("&amp;") - 2;
1325 break;
1326
1327 default:
1328 break;
1329 }
1330 }
1331
1332 return (uintptr_t) len;
1333 }
1334
1335 for (i = 0; i < size; i++) {
1336 ch = *src++;
1337
1338 switch (ch) {
1339
1340 case '<':
1341 *dst++ = '&'; *dst++ = 'l'; *dst++ = 't'; *dst++ = ';';
1342 break;
1343
1344 case '>':
1345 *dst++ = '&'; *dst++ = 'g'; *dst++ = 't'; *dst++ = ';';
1346 break;
1347
1348 case '&':
1349 *dst++ = '&'; *dst++ = 'a'; *dst++ = 'm'; *dst++ = 'p';
1350 *dst++ = ';';
1351 break;
1352
1353 default:
1354 *dst++ = ch;
1355 break;
1356 }
1357 }
1358
1359 return (uintptr_t) dst;
1360 }
1361
1362
1302 /* ngx_sort() is implemented as insertion sort because we need stable sort */ 1363 /* ngx_sort() is implemented as insertion sort because we need stable sort */
1303 1364
1304 void 1365 void
1305 ngx_sort(void *base, size_t n, size_t size, 1366 ngx_sort(void *base, size_t n, size_t size,
1306 int (*cmp)(const void *, const void *)) 1367 int (*cmp)(const void *, const void *))