| Line | Source Code | Coverage |
|---|
| 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-2012 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 module contains a function for converting any UTF-16 character | - |
| 42 | strings to host byte order. */ | - |
| 43 | | - |
| 44 | | - |
| 45 | #ifdef PCRE_HAVE_CONFIG_H | - |
| 46 | #include "config.h" | - |
| 47 | #endif | - |
| 48 | | - |
| 49 | /* Generate code with 16 bit character support. */ | - |
| 50 | #define COMPILE_PCRE16 | - |
| 51 | | - |
| 52 | #include "pcre_internal.h" | - |
| 53 | | - |
| 54 | /************************************************* | - |
| 55 | * Convert any UTF-16 string to host byte order * | - |
| 56 | *************************************************/ | - |
| 57 | | - |
| 58 | /* This function takes an UTF-16 string and converts | - |
| 59 | it to host byte order. The length can be explicitly set, | - |
| 60 | or automatically detected for zero terminated strings. | - |
| 61 | BOMs can be kept or discarded during the conversion. | - |
| 62 | Conversion can be done in place (output == input). | - |
| 63 | | - |
| 64 | Arguments: | - |
| 65 | output the output buffer, its size must be greater | - |
| 66 | or equal than the input string | - |
| 67 | input any UTF-16 string | - |
| 68 | length the number of 16-bit units in the input string | - |
| 69 | can be less than zero for zero terminated strings | - |
| 70 | host_byte_order | - |
| 71 | A non-zero value means the input is in host byte | - |
| 72 | order, which can be dynamically changed by BOMs later. | - |
| 73 | Initially it contains the starting byte order and returns | - |
| 74 | with the last byte order so it can be used for stream | - |
| 75 | processing. It can be NULL, which set the host byte | - |
| 76 | order mode by default. | - |
| 77 | keep_boms for a non-zero value, the BOM (0xfeff) characters | - |
| 78 | are copied as well | - |
| 79 | | - |
| 80 | Returns: the number of 16-bit units placed into the output buffer, | - |
| 81 | including the zero-terminator | - |
| 82 | */ | - |
| 83 | | - |
| 84 | int | - |
| 85 | pcre16_utf16_to_host_byte_order(PCRE_UCHAR16 *output, PCRE_SPTR16 input, | - |
| 86 | int length, int *host_byte_order, int keep_boms) | - |
| 87 | { | - |
| 88 | #ifdef SUPPORT_UTF | - |
| 89 | /* This function converts any UTF-16 string to host byte order and optionally | - |
| 90 | removes any Byte Order Marks (BOMS). Returns with the remainig length. */ | - |
| 91 | int host_bo = host_byte_order != NULL ? *host_byte_order : 1; never evaluated: host_byte_order != ((void *)0) | 0 |
| 92 | pcre_uchar *optr = (pcre_uchar *)output; never executed (the execution status of this line is deduced): pcre_uchar *optr = (pcre_uchar *)output; | - |
| 93 | const pcre_uchar *iptr = (const pcre_uchar *)input; never executed (the execution status of this line is deduced): const pcre_uchar *iptr = (const pcre_uchar *)input; | - |
| 94 | const pcre_uchar *end; never executed (the execution status of this line is deduced): const pcre_uchar *end; | - |
| 95 | /* The c variable must be unsigned. */ | - |
| 96 | register pcre_uchar c; never executed (the execution status of this line is deduced): register pcre_uchar c; | - |
| 97 | | - |
| 98 | if (length < 0) never evaluated: length < 0 | 0 |
| 99 | length = STRLEN_UC(iptr) + 1; never executed: length = _pcre16_strlen_uc(iptr) + 1; | 0 |
| 100 | end = iptr + length; never executed (the execution status of this line is deduced): end = iptr + length; | - |
| 101 | | - |
| 102 | while (iptr < end) never evaluated: iptr < end | 0 |
| 103 | { | - |
| 104 | c = *iptr++; never executed (the execution status of this line is deduced): c = *iptr++; | - |
| 105 | if (c == 0xfeff || c == 0xfffe) never evaluated: c == 0xfeff never evaluated: c == 0xfffe | 0 |
| 106 | { | - |
| 107 | /* Detecting the byte order of the machine is unnecessary, it is | - |
| 108 | enough to know that the UTF-16 string has the same byte order or not. */ | - |
| 109 | host_bo = c == 0xfeff; never executed (the execution status of this line is deduced): host_bo = c == 0xfeff; | - |
| 110 | if (keep_boms != 0) never evaluated: keep_boms != 0 | 0 |
| 111 | *optr++ = 0xfeff; never executed: *optr++ = 0xfeff; | 0 |
| 112 | else | - |
| 113 | length--; never executed: length--; | 0 |
| 114 | } | - |
| 115 | else | - |
| 116 | *optr++ = host_bo ? c : ((c >> 8) | (c << 8)); /* Flip bytes if needed. */ never executed: *optr++ = host_bo ? c : ((c >> 8) | (c << 8)); never evaluated: host_bo | 0 |
| 117 | } | - |
| 118 | if (host_byte_order != NULL) never evaluated: host_byte_order != ((void *)0) | 0 |
| 119 | *host_byte_order = host_bo; never executed: *host_byte_order = host_bo; | 0 |
| 120 | | - |
| 121 | #else /* SUPPORT_UTF */ | - |
| 122 | (void)(output); /* Keep picky compilers happy */ | - |
| 123 | (void)(input); | - |
| 124 | (void)(keep_boms); | - |
| 125 | #endif /* SUPPORT_UTF */ | - |
| 126 | return length; never executed: return length; | 0 |
| 127 | } | - |
| 128 | | - |
| 129 | /* End of pcre16_utf16_utils.c */ | - |
| 130 | | - |
| | |