| OLD | NEW |
| 1 /* | 1 /* |
| 2 * string.c : an XML string utilities module | 2 * string.c : an XML string utilities module |
| 3 * | 3 * |
| 4 * This module provides various utility functions for manipulating | 4 * This module provides various utility functions for manipulating |
| 5 * the xmlChar* type. All functions named xmlStr* have been moved here | 5 * the xmlChar* type. All functions named xmlStr* have been moved here |
| 6 * from the parser.c file (their original home). | 6 * from the parser.c file (their original home). |
| 7 * | 7 * |
| 8 * See Copyright for the status of this software. | 8 * See Copyright for the status of this software. |
| 9 * | 9 * |
| 10 * UTF8 string routines from: | 10 * UTF8 string routines from: |
| (...skipping 803 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 814 * @utf: a sequence of UTF-8 encoded bytes | 814 * @utf: a sequence of UTF-8 encoded bytes |
| 815 * @len: the number of characters in the array | 815 * @len: the number of characters in the array |
| 816 * | 816 * |
| 817 * storage size of an UTF8 string | 817 * storage size of an UTF8 string |
| 818 * the behaviour is not garanteed if the input string is not UTF-8 | 818 * the behaviour is not garanteed if the input string is not UTF-8 |
| 819 * | 819 * |
| 820 * Returns the storage size of | 820 * Returns the storage size of |
| 821 * the first 'len' characters of ARRAY | 821 * the first 'len' characters of ARRAY |
| 822 */ | 822 */ |
| 823 | 823 |
| 824 #if _MSC_FULL_VER && _MSC_FULL_VER == 190023918 |
| 825 // Workaround for a /O1 ("s") optimization bug in VS 2015 Update 2, remove once |
| 826 // the fix is released. crbug.com/599427 |
| 827 // https://connect.microsoft.com/VisualStudio/feedback/details/2582138 |
| 828 #pragma optimize("t", on) |
| 829 #endif |
| 830 |
| 824 int | 831 int |
| 825 xmlUTF8Strsize(const xmlChar *utf, int len) { | 832 xmlUTF8Strsize(const xmlChar *utf, int len) { |
| 826 const xmlChar *ptr=utf; | 833 const xmlChar *ptr=utf; |
| 827 xmlChar ch; | 834 xmlChar ch; |
| 828 | 835 |
| 829 if (utf == NULL) | 836 if (utf == NULL) |
| 830 return(0); | 837 return(0); |
| 831 | 838 |
| 832 if (len <= 0) | 839 if (len <= 0) |
| 833 return(0); | 840 return(0); |
| 834 | 841 |
| 835 while ( len-- > 0) { | 842 while ( len-- > 0) { |
| 836 if ( !*ptr ) | 843 if ( !*ptr ) |
| 837 break; | 844 break; |
| 838 if ( (ch = *ptr++) & 0x80) | 845 if ( (ch = *ptr++) & 0x80) |
| 839 while ((ch<<=1) & 0x80 ) { | 846 while ((ch<<=1) & 0x80 ) { |
| 840 ptr++; | 847 ptr++; |
| 841 if (*ptr == 0) break; | 848 if (*ptr == 0) break; |
| 842 } | 849 } |
| 843 } | 850 } |
| 844 return (ptr - utf); | 851 return (ptr - utf); |
| 845 } | 852 } |
| 846 | 853 |
| 854 #if _MSC_FULL_VER && _MSC_FULL_VER == 190023918 |
| 855 // Restore the original optimization settings. |
| 856 #pragma optimize("", on) |
| 857 #endif |
| 847 | 858 |
| 848 /** | 859 /** |
| 849 * xmlUTF8Strndup: | 860 * xmlUTF8Strndup: |
| 850 * @utf: the input UTF8 * | 861 * @utf: the input UTF8 * |
| 851 * @len: the len of @utf (in chars) | 862 * @len: the len of @utf (in chars) |
| 852 * | 863 * |
| 853 * a strndup for array of UTF8's | 864 * a strndup for array of UTF8's |
| 854 * | 865 * |
| 855 * Returns a new UTF8 * or NULL | 866 * Returns a new UTF8 * or NULL |
| 856 */ | 867 */ |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 975 if ( (*utf++ & 0xc0) != 0x80 ) | 986 if ( (*utf++ & 0xc0) != 0x80 ) |
| 976 return(NULL); | 987 return(NULL); |
| 977 } | 988 } |
| 978 } | 989 } |
| 979 | 990 |
| 980 return(xmlUTF8Strndup(utf, len)); | 991 return(xmlUTF8Strndup(utf, len)); |
| 981 } | 992 } |
| 982 | 993 |
| 983 #define bottom_xmlstring | 994 #define bottom_xmlstring |
| 984 #include "elfgcchack.h" | 995 #include "elfgcchack.h" |
| OLD | NEW |