comparison src/core/ngx_string.c @ 1612:d72f8b48dd87 stable-0.5

r1545, r1546 merge: ngx_escape_html(), SSI echo encoding
author Igor Sysoev <igor@sysoev.ru>
date Mon, 29 Oct 2007 15:03:04 +0000
parents d5db0e96bcc6
children ca6845b19113
comparison
equal deleted inserted replaced
1611:d5db0e96bcc6 1612:d72f8b48dd87
1303 *dst = d; 1303 *dst = d;
1304 *src = s; 1304 *src = s;
1305 } 1305 }
1306 1306
1307 1307
1308 uintptr_t
1309 ngx_escape_html(u_char *dst, u_char *src, size_t size)
1310 {
1311 u_char ch;
1312 ngx_uint_t i, len;
1313
1314 if (dst == NULL) {
1315
1316 len = 0;
1317
1318 for (i = 0; i < size; i++) {
1319 switch (*src++) {
1320
1321 case '<':
1322 len += sizeof("&lt;") - 2;
1323 break;
1324
1325 case '>':
1326 len += sizeof("&gt;") - 2;
1327 break;
1328
1329 case '&':
1330 len += sizeof("&amp;") - 2;
1331 break;
1332
1333 default:
1334 break;
1335 }
1336 }
1337
1338 return (uintptr_t) len;
1339 }
1340
1341 for (i = 0; i < size; i++) {
1342 ch = *src++;
1343
1344 switch (ch) {
1345
1346 case '<':
1347 *dst++ = '&'; *dst++ = 'l'; *dst++ = 't'; *dst++ = ';';
1348 break;
1349
1350 case '>':
1351 *dst++ = '&'; *dst++ = 'g'; *dst++ = 't'; *dst++ = ';';
1352 break;
1353
1354 case '&':
1355 *dst++ = '&'; *dst++ = 'a'; *dst++ = 'm'; *dst++ = 'p';
1356 *dst++ = ';';
1357 break;
1358
1359 default:
1360 *dst++ = ch;
1361 break;
1362 }
1363 }
1364
1365 return (uintptr_t) dst;
1366 }
1367
1368
1308 /* ngx_sort() is implemented as insertion sort because we need stable sort */ 1369 /* ngx_sort() is implemented as insertion sort because we need stable sort */
1309 1370
1310 void 1371 void
1311 ngx_sort(void *base, size_t n, size_t size, 1372 ngx_sort(void *base, size_t n, size_t size,
1312 int (*cmp)(const void *, const void *)) 1373 int (*cmp)(const void *, const void *))