Back to index

php5  5.3.10
Functions
intl_convert.c File Reference
#include <php.h>
#include "intl_common.h"
#include "intl_convert.h"

Go to the source code of this file.

Functions

void intl_convert_utf8_to_utf16 (UChar **target, int *target_len, const char *src, int src_len, UErrorCode *status)
void intl_convert_utf16_to_utf8 (char **target, int *target_len, const UChar *src, int src_len, UErrorCode *status)

Function Documentation

void intl_convert_utf16_to_utf8 ( char **  target,
int target_len,
const UChar src,
int  src_len,
UErrorCode *  status 
)

Definition at line 110 of file intl_convert.c.

{
       char*       dst_buf = NULL;
       int32_t     dst_len;

       /* Determine required destination buffer size (pre-flighting). */
       *status = U_ZERO_ERROR;
       u_strToUTF8( NULL, 0, &dst_len, src, src_len, status );

       /* Bail out if an unexpected error occured.
        * (U_BUFFER_OVERFLOW_ERROR means that *target buffer is not large enough).
        * (U_STRING_NOT_TERMINATED_WARNING usually means that the input string is empty).
        */
       if( *status != U_BUFFER_OVERFLOW_ERROR && *status != U_STRING_NOT_TERMINATED_WARNING )
              return;

       /* Allocate memory for the destination buffer (it will be zero-terminated). */
       dst_buf = emalloc( dst_len+1 );

       /* Convert source string from UTF-8 to UTF-16. */
       *status = U_ZERO_ERROR;
       u_strToUTF8( dst_buf, dst_len, NULL, src, src_len, status );
       if( U_FAILURE( *status ) )
       {
              efree( dst_buf );
              return;
       }

       /* U_STRING_NOT_TERMINATED_WARNING is OK for us => reset 'status'. */
       *status = U_ZERO_ERROR;

       dst_buf[dst_len] = 0;
       *target     = dst_buf;
       *target_len = dst_len;
}

Here is the caller graph for this function:

void intl_convert_utf8_to_utf16 ( UChar **  target,
int target_len,
const char *  src,
int  src_len,
UErrorCode *  status 
)

Definition at line 46 of file intl_convert.c.

{
       UChar*      dst_buf = NULL;
       int32_t     dst_len = 0;

       /* If *target is NULL determine required destination buffer size (pre-flighting).
        * Otherwise, attempt to convert source string; if *target buffer is not large enough
        * it will be resized appropriately.
        */
       *status = U_ZERO_ERROR;

       u_strFromUTF8( *target, *target_len, &dst_len, src, src_len, status );

       if( *status == U_ZERO_ERROR )
       {
              /* String is converted successfuly */
              (*target)[dst_len] = 0;
              *target_len = dst_len;
              return;
       }

       /* Bail out if an unexpected error occured.
        * (U_BUFFER_OVERFLOW_ERROR means that *target buffer is not large enough).
        * (U_STRING_NOT_TERMINATED_WARNING usually means that the input string is empty).
        */
       if( *status != U_BUFFER_OVERFLOW_ERROR && *status != U_STRING_NOT_TERMINATED_WARNING )
              return;

       /* Allocate memory for the destination buffer (it will be zero-terminated). */
       dst_buf = eumalloc( dst_len + 1 );

       /* Convert source string from UTF-8 to UTF-16. */
       *status = U_ZERO_ERROR;
       u_strFromUTF8( dst_buf, dst_len+1, NULL, src, src_len, status );
       if( U_FAILURE( *status ) )
       {
              efree( dst_buf );
              return;
       }

       dst_buf[dst_len] = 0;

       if( *target )
              efree( *target );

       *target     = dst_buf;
       *target_len = dst_len;
}

Here is the caller graph for this function: