Mercurial > hg > nginx
comparison src/os/win32/ngx_files.c @ 5501:1cd23ca84a9b
Win32: support for UTF-16 surrogate pairs (ticket #457).
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Sat, 04 Jan 2014 03:32:15 +0400 |
parents | dea321e5c021 |
children | a680bf4dddd5 |
comparison
equal
deleted
inserted
replaced
5500:6a3ab6fdd70f | 5501:1cd23ca84a9b |
---|---|
797 p++; | 797 p++; |
798 | 798 |
799 continue; | 799 continue; |
800 } | 800 } |
801 | 801 |
802 if (u + 1 == last) { | |
803 *len = u - utf16; | |
804 break; | |
805 } | |
806 | |
802 n = ngx_utf8_decode(&p, 4); | 807 n = ngx_utf8_decode(&p, 4); |
803 | 808 |
804 if (n > 0xffff) { | 809 if (n > 0x10ffff) { |
805 ngx_set_errno(NGX_EILSEQ); | 810 ngx_set_errno(NGX_EILSEQ); |
806 return NULL; | 811 return NULL; |
812 } | |
813 | |
814 if (n > 0xffff) { | |
815 n -= 0x10000; | |
816 *u++ = (u_short) (0xd800 + (n >> 10)); | |
817 *u++ = (u_short) (0xdc00 + (n & 0x03ff)); | |
818 continue; | |
807 } | 819 } |
808 | 820 |
809 *u++ = (u_short) n; | 821 *u++ = (u_short) n; |
810 } | 822 } |
811 | 823 |
836 continue; | 848 continue; |
837 } | 849 } |
838 | 850 |
839 n = ngx_utf8_decode(&p, 4); | 851 n = ngx_utf8_decode(&p, 4); |
840 | 852 |
841 if (n > 0xffff) { | 853 if (n > 0x10ffff) { |
842 free(utf16); | 854 free(utf16); |
843 ngx_set_errno(NGX_EILSEQ); | 855 ngx_set_errno(NGX_EILSEQ); |
844 return NULL; | 856 return NULL; |
845 } | 857 } |
846 | 858 |
859 if (n > 0xffff) { | |
860 n -= 0x10000; | |
861 *u++ = (u_short) (0xd800 + (n >> 10)); | |
862 *u++ = (u_short) (0xdc00 + (n & 0x03ff)); | |
863 continue; | |
864 } | |
865 | |
847 *u++ = (u_short) n; | 866 *u++ = (u_short) n; |
848 } | 867 } |
849 | 868 |
850 /* unreachable */ | 869 /* unreachable */ |
851 } | 870 } |