Changeset 597 for vendor/current/source3/lib/charcnv.c
- Timestamp:
- Jul 2, 2011, 4:01:14 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vendor/current/source3/lib/charcnv.c
r414 r597 574 574 return false; 575 575 } 576 576 577 if (srclen == 0) { 577 ob = talloc_strdup(ctx, ""); 578 /* We really should treat this as an error, but 579 there are too many callers that need this to 580 return a NULL terminated string in the correct 581 character set. */ 582 if (to == CH_UTF16LE|| to == CH_UTF16BE || to == CH_UTF16MUNGED) { 583 destlen = 2; 584 } else { 585 destlen = 1; 586 } 587 ob = talloc_zero_array(ctx, char, destlen); 578 588 if (ob == NULL) { 579 589 errno = ENOMEM; 580 590 return false; 581 591 } 592 *converted_size = destlen; 582 593 *dest = ob; 583 *converted_size = 0;584 594 return true; 585 595 } … … 678 688 ob[destlen+1] = '\0'; 679 689 690 /* Ensure we can never return a *converted_size of zero. */ 691 if (destlen == 0) { 692 /* This can happen from a bad iconv "use_as_is:" call. */ 693 if (to == CH_UTF16LE|| to == CH_UTF16BE || to == CH_UTF16MUNGED) { 694 destlen = 2; 695 } else { 696 destlen = 1; 697 } 698 } 699 680 700 *converted_size = destlen; 681 701 return true; … … 1343 1363 { 1344 1364 size_t ret; 1365 size_t ucs2_align_len = 0; 1345 1366 1346 1367 if (dest_len == (size_t)-1) { … … 1360 1381 if (src_len != (size_t)-1) 1361 1382 src_len--; 1383 ucs2_align_len = 1; 1362 1384 } 1363 1385 … … 1395 1417 } 1396 1418 1397 return src_len ;1419 return src_len + ucs2_align_len; 1398 1420 } 1399 1421 … … 1421 1443 char *dest; 1422 1444 size_t dest_len; 1445 size_t ucs2_align_len = 0; 1423 1446 1424 1447 *ppdest = NULL; … … 1439 1462 if (src_len != (size_t)-1) 1440 1463 src_len--; 1464 ucs2_align_len = 1; 1441 1465 } 1442 1466 … … 1504 1528 1505 1529 *ppdest = dest; 1506 return src_len ;1530 return src_len + ucs2_align_len; 1507 1531 } 1508 1532
Note:
See TracChangeset
for help on using the changeset viewer.