@ -300,3 +300,67 @@ acpi_ns_convert_to_buffer(union acpi_operand_object *original_object,
* return_object = new_object ;
return ( AE_OK ) ;
}
/*******************************************************************************
*
* FUNCTION : acpi_ns_convert_to_unicode
*
* PARAMETERS : original_object - ASCII String Object to be converted
* return_object - Where the new converted object is returned
*
* RETURN : Status . AE_OK if conversion was successful .
*
* DESCRIPTION : Attempt to convert a String object to a Unicode string Buffer .
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
acpi_status
acpi_ns_convert_to_unicode ( union acpi_operand_object * original_object ,
union acpi_operand_object * * return_object )
{
union acpi_operand_object * new_object ;
char * ascii_string ;
u16 * unicode_buffer ;
u32 unicode_length ;
u32 i ;
if ( ! original_object ) {
return ( AE_OK ) ;
}
/* If a Buffer was returned, it must be at least two bytes long */
if ( original_object - > common . type = = ACPI_TYPE_BUFFER ) {
if ( original_object - > buffer . length < 2 ) {
return ( AE_AML_OPERAND_VALUE ) ;
}
* return_object = NULL ;
return ( AE_OK ) ;
}
/*
* The original object is an ASCII string . Convert this string to
* a unicode buffer .
*/
ascii_string = original_object - > string . pointer ;
unicode_length = ( original_object - > string . length * 2 ) + 2 ;
/* Create a new buffer object for the Unicode data */
new_object = acpi_ut_create_buffer_object ( unicode_length ) ;
if ( ! new_object ) {
return ( AE_NO_MEMORY ) ;
}
unicode_buffer = ACPI_CAST_PTR ( u16 , new_object - > buffer . pointer ) ;
/* Convert ASCII to Unicode */
for ( i = 0 ; i < original_object - > string . length ; i + + ) {
unicode_buffer [ i ] = ( u16 ) ascii_string [ i ] ;
}
* return_object = new_object ;
return ( AE_OK ) ;
}