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 }