1 | /************************************************* |
---|
2 | * Perl-Compatible Regular Expressions * |
---|
3 | *************************************************/ |
---|
4 | |
---|
5 | /* PCRE is a library of functions to support regular expressions whose syntax |
---|
6 | and semantics are as close as possible to those of the Perl 5 language. |
---|
7 | |
---|
8 | Written by Philip Hazel |
---|
9 | Copyright (c) 1997-2008 University of Cambridge |
---|
10 | |
---|
11 | ----------------------------------------------------------------------------- |
---|
12 | Redistribution and use in source and binary forms, with or without |
---|
13 | modification, are permitted provided that the following conditions are met: |
---|
14 | |
---|
15 | * Redistributions of source code must retain the above copyright notice, |
---|
16 | this list of conditions and the following disclaimer. |
---|
17 | |
---|
18 | * Redistributions in binary form must reproduce the above copyright |
---|
19 | notice, this list of conditions and the following disclaimer in the |
---|
20 | documentation and/or other materials provided with the distribution. |
---|
21 | |
---|
22 | * Neither the name of the University of Cambridge nor the names of its |
---|
23 | contributors may be used to endorse or promote products derived from |
---|
24 | this software without specific prior written permission. |
---|
25 | |
---|
26 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
---|
27 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
---|
28 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
---|
29 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
---|
30 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
---|
31 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
---|
32 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
---|
33 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
---|
34 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
---|
35 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
---|
36 | POSSIBILITY OF SUCH DAMAGE. |
---|
37 | ----------------------------------------------------------------------------- |
---|
38 | */ |
---|
39 | |
---|
40 | |
---|
41 | /* This file contains a private PCRE function that converts an ordinal |
---|
42 | character value into a UTF8 string. */ |
---|
43 | |
---|
44 | #include "pcre_config.h" |
---|
45 | #include "pcre_internal.h" |
---|
46 | |
---|
47 | |
---|
48 | /************************************************* |
---|
49 | * Convert character value to UTF-8 * |
---|
50 | *************************************************/ |
---|
51 | |
---|
52 | /* This function takes an integer value in the range 0 - 0x7fffffff |
---|
53 | and encodes it as a UTF-8 character in 0 to 6 bytes. |
---|
54 | |
---|
55 | Arguments: |
---|
56 | cvalue the character value |
---|
57 | buffer pointer to buffer for result - at least 6 bytes long |
---|
58 | |
---|
59 | Returns: number of characters placed in the buffer |
---|
60 | */ |
---|
61 | |
---|
62 | int |
---|
63 | _pcre_ord2utf8(int cvalue, uschar *buffer) |
---|
64 | { |
---|
65 | #ifdef SUPPORT_UTF8 |
---|
66 | register int i, j; |
---|
67 | for (i = 0; i < _pcre_utf8_table1_size; i++) |
---|
68 | if (cvalue <= _pcre_utf8_table1[i]) break; |
---|
69 | buffer += i; |
---|
70 | for (j = i; j > 0; j--) |
---|
71 | { |
---|
72 | *buffer-- = 0x80 | (cvalue & 0x3f); |
---|
73 | cvalue >>= 6; |
---|
74 | } |
---|
75 | *buffer = _pcre_utf8_table2[i] | cvalue; |
---|
76 | return i + 1; |
---|
77 | #else |
---|
78 | (void)(cvalue); /* Keep compiler happy; this function won't ever be */ |
---|
79 | (void)(buffer); /* called when SUPPORT_UTF8 is not defined. */ |
---|
80 | return 0; |
---|
81 | #endif |
---|
82 | } |
---|
83 | |
---|
84 | /* End of pcre_ord2utf8.c */ |
---|