PHP  
 PHP: Test and Code Coverage Analysis
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

LTP GCOV extension - code coverage report
Current view: directory - intl - intl_convert.c
Test: PHP Code Coverage
Date: 2009-11-21 Instrumented lines: 38
Code covered: 86.8 % Executed lines: 33
Legend: not executed executed

       1                 : /*
       2                 :    +----------------------------------------------------------------------+
       3                 :    | PHP Version 5                                                        |
       4                 :    +----------------------------------------------------------------------+
       5                 :    | This source file is subject to version 3.01 of the PHP license,      |
       6                 :    | that is bundled with this package in the file LICENSE, and is        |
       7                 :    | available through the world-wide-web at the following url:           |
       8                 :    | http://www.php.net/license/3_01.txt                                  |
       9                 :    | If you did not receive a copy of the PHP license and are unable to   |
      10                 :    | obtain it through the world-wide-web, please send a note to          |
      11                 :    | license@php.net so we can mail you a copy immediately.               |
      12                 :    +----------------------------------------------------------------------+
      13                 :    | Authors: Vadim Savchuk <vsavchuk@productengine.com>                  |
      14                 :    |          Dmitry Lakhtyuk <dlakhtyuk@productengine.com>               |
      15                 :    +----------------------------------------------------------------------+
      16                 :  */
      17                 : 
      18                 : #ifdef HAVE_CONFIG_H
      19                 : #include "config.h"
      20                 : #endif
      21                 : 
      22                 : #include <php.h>
      23                 : 
      24                 : #include "intl_common.h"
      25                 : #include "intl_convert.h"
      26                 : 
      27                 : /* {{{ intl_convert_utf8_to_utf16
      28                 :  * Convert given string from UTF-8 to UTF-16 to *target buffer.
      29                 :  *
      30                 :  * It *target is NULL then we allocate a large enough buffer,
      31                 :  * store the converted string into it, and make target point to it.
      32                 :  *
      33                 :  * Otherwise, if *target is non-NULL, we assume that it points to a
      34                 :  * dynamically allocated buffer of *target_len bytes length.
      35                 :  * In this case the buffer will be used to store the converted string to,
      36                 :  * and may be resized (made larger) if needed.
      37                 :  *
      38                 :  * @param target      Where to place the result.
      39                 :  * @param target_len  Result length.
      40                 :  * @param source      String to convert.
      41                 :  * @param source_len  Length of the source string.
      42                 :  * @param status      Conversion status.
      43                 :  *
      44                 :  * @return void       This function does not return anything.
      45                 :  */
      46                 : void intl_convert_utf8_to_utf16(
      47                 :         UChar**     target, int* target_len,
      48                 :         const char* src,    int  src_len,
      49                 :         UErrorCode* status )
      50            2066 : {
      51            2066 :         UChar*      dst_buf = NULL;
      52            2066 :         int32_t     dst_len = 0;
      53                 : 
      54                 :         /* If *target is NULL determine required destination buffer size (pre-flighting).
      55                 :          * Otherwise, attempt to convert source string; if *target buffer is not large enough
      56                 :          * it will be resized appropriately.
      57                 :          */
      58            2066 :         *status = U_ZERO_ERROR;
      59                 : 
      60            2066 :         u_strFromUTF8( *target, *target_len, &dst_len, src, src_len, status );
      61                 : 
      62            2066 :         if( *status == U_ZERO_ERROR )
      63                 :         {
      64                 :                 /* String is converted successfuly */
      65             108 :                 (*target)[dst_len] = 0;
      66             108 :                 *target_len = dst_len;
      67             108 :                 return;
      68                 :         }
      69                 : 
      70                 :         /* Bail out if an unexpected error occured.
      71                 :          * (U_BUFFER_OVERFLOW_ERROR means that *target buffer is not large enough).
      72                 :          * (U_STRING_NOT_TERMINATED_WARNING usually means that the input string is empty).
      73                 :          */
      74            1958 :         if( *status != U_BUFFER_OVERFLOW_ERROR && *status != U_STRING_NOT_TERMINATED_WARNING )
      75               3 :                 return;
      76                 : 
      77                 :         /* Allocate memory for the destination buffer (it will be zero-terminated). */
      78            1955 :         dst_buf = eumalloc( dst_len + 1 );
      79                 : 
      80                 :         /* Convert source string from UTF-8 to UTF-16. */
      81            1955 :         *status = U_ZERO_ERROR;
      82            1955 :         u_strFromUTF8( dst_buf, dst_len+1, NULL, src, src_len, status );
      83            1955 :         if( U_FAILURE( *status ) )
      84                 :         {
      85               0 :                 efree( dst_buf );
      86               0 :                 return;
      87                 :         }
      88                 : 
      89            1955 :         dst_buf[dst_len] = 0;
      90                 : 
      91            1955 :         if( *target )
      92               0 :                 efree( *target );
      93                 : 
      94            1955 :         *target     = dst_buf;
      95            1955 :         *target_len = dst_len;
      96                 : }
      97                 : /* }}} */
      98                 : 
      99                 : /* {{{ intl_convert_utf16_to_utf8
     100                 :  * Convert given string from UTF-16 to UTF-8.
     101                 :  *
     102                 :  * @param target      Where to place the result.
     103                 :  * @param target_len  Result length.
     104                 :  * @param source      String to convert.
     105                 :  * @param source_len  Length of the source string.
     106                 :  * @param status      Conversion status.
     107                 :  *
     108                 :  * @return void       This function does not return anything.
     109                 :  */
     110                 : void intl_convert_utf16_to_utf8(
     111                 :         char**       target, int* target_len,
     112                 :         const UChar* src,    int  src_len,
     113                 :         UErrorCode*  status )
     114            2048 : {
     115            2048 :         char*       dst_buf = NULL;
     116                 :         int32_t     dst_len;
     117                 : 
     118                 :         /* Determine required destination buffer size (pre-flighting). */
     119            2048 :         *status = U_ZERO_ERROR;
     120            2048 :         u_strToUTF8( NULL, 0, &dst_len, src, src_len, status );
     121                 : 
     122                 :         /* Bail out if an unexpected error occured.
     123                 :          * (U_BUFFER_OVERFLOW_ERROR means that *target buffer is not large enough).
     124                 :          * (U_STRING_NOT_TERMINATED_WARNING usually means that the input string is empty).
     125                 :          */
     126            2048 :         if( *status != U_BUFFER_OVERFLOW_ERROR && *status != U_STRING_NOT_TERMINATED_WARNING )
     127               1 :                 return;
     128                 : 
     129                 :         /* Allocate memory for the destination buffer (it will be zero-terminated). */
     130            2047 :         dst_buf = emalloc( dst_len+1 );
     131                 : 
     132                 :         /* Convert source string from UTF-8 to UTF-16. */
     133            2047 :         *status = U_ZERO_ERROR;
     134            2047 :         u_strToUTF8( dst_buf, dst_len, NULL, src, src_len, status );
     135            2047 :         if( U_FAILURE( *status ) )
     136                 :         {
     137               0 :                 efree( dst_buf );
     138               0 :                 return;
     139                 :         }
     140                 : 
     141                 :         /* U_STRING_NOT_TERMINATED_WARNING is OK for us => reset 'status'. */
     142            2047 :         *status = U_ZERO_ERROR;
     143                 : 
     144            2047 :         dst_buf[dst_len] = 0;
     145            2047 :         *target     = dst_buf;
     146            2047 :         *target_len = dst_len;
     147                 : }
     148                 : /* }}} */
     149                 : 
     150                 : /*
     151                 :  * Local variables:
     152                 :  * tab-width: 4
     153                 :  * c-basic-offset: 4
     154                 :  * End:
     155                 :  * vim600: noet sw=4 ts=4 fdm=marker
     156                 :  * vim<600: noet sw=4 ts=4
     157                 :  */

Generated by: LTP GCOV extension version 1.5

Generated at Sat, 21 Nov 2009 12:27:01 +0000 (3 days ago)

Copyright © 2005-2009 The PHP Group
All rights reserved.