// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
/*******************************************************************************
*
* Module Name : utstring - Common functions for strings and characters
*
******************************************************************************/
#include <acpi/acpi.h>
#include "accommon.h"
#include "acnamesp.h"
#define _COMPONENT ACPI_UTILITIES
ACPI_MODULE_NAME("utstring" )
/*******************************************************************************
*
* FUNCTION : acpi_ut_print_string
*
* PARAMETERS : string - Null terminated ASCII string
* max_length - Maximum output length . Used to constrain the
* length of strings during debug output only .
*
* RETURN : None
*
* DESCRIPTION : Dump an ASCII string with support for ACPI - defined escape
* sequences .
*
******************************************************************************/
void acpi_ut_print_string(char *string, u16 max_length)
{
u32 i;
if (!string) {
acpi_os_printf("<\" NULL STRING PTR\">" );
return ;
}
acpi_os_printf("\" ");
for (i = 0 ; (i < max_length) && string[i]; i++) {
/* Escape sequences */
switch (string[i]) {
case 0 x07:
acpi_os_printf("\\a" ); /* BELL */
break ;
case 0 x08:
acpi_os_printf("\\b" ); /* BACKSPACE */
break ;
case 0 x0C:
acpi_os_printf("\\f" ); /* FORMFEED */
break ;
case 0 x0A:
acpi_os_printf("\\n" ); /* LINEFEED */
break ;
case 0 x0D:
acpi_os_printf("\\r" ); /* CARRIAGE RETURN */
break ;
case 0 x09:
acpi_os_printf("\\t" ); /* HORIZONTAL TAB */
break ;
case 0 x0B:
acpi_os_printf("\\v" ); /* VERTICAL TAB */
break ;
case '\' ': /* Single Quote */
case '\"' : /* Double Quote */
case '\\' : /* Backslash */
acpi_os_printf("\\%c" , (int )string[i]);
break ;
default :
/* Check for printable character or hex escape */
if (isprint((int )string[i])) {
/* This is a normal character */
acpi_os_printf("%c" , (int )string[i]);
} else {
/* All others will be Hex escapes */
acpi_os_printf("\\x%2.2X" , (s32)string[i]);
}
break ;
}
}
acpi_os_printf("\" ");
if (i == max_length && string[i]) {
acpi_os_printf("..." );
}
}
/*******************************************************************************
*
* FUNCTION : acpi_ut_repair_name
*
* PARAMETERS : name - The ACPI name to be repaired
*
* RETURN : Repaired version of the name
*
* DESCRIPTION : Repair an ACPI name : Change invalid characters to ' * ' and
* return the new name . NOTE : the Name parameter must reside in
* read / write memory , cannot be a const .
*
* An ACPI Name must consist of valid ACPI characters . We will repair the name
* if necessary because we don ' t want to abort because of this , but we want
* all namespace names to be printable . A warning message is appropriate .
*
* This issue came up because there are in fact machines that exhibit
* this problem , and we want to be able to enable ACPI support for them ,
* even though there are a few bad names .
*
******************************************************************************/
void acpi_ut_repair_name(char *name)
{
u32 i;
u8 found_bad_char = FALSE ;
u32 original_name;
ACPI_FUNCTION_NAME(ut_repair_name);
/*
* Special case for the root node . This can happen if we get an
* error during the execution of module - level code .
*/
if (ACPI_COMPARE_NAMESEG(name, ACPI_ROOT_PATHNAME)) {
return ;
}
ACPI_COPY_NAMESEG(&original_name, &name[0 ]);
/* Check each character in the name */
for (i = 0 ; i < ACPI_NAMESEG_SIZE; i++) {
if (acpi_ut_valid_name_char(name[i], i)) {
continue ;
}
/*
* Replace a bad character with something printable , yet technically
* " odd " . This prevents any collisions with existing " good "
* names in the namespace .
*/
name[i] = '_' ;
found_bad_char = TRUE ;
}
if (found_bad_char) {
/* Report warning only if in strict mode or debug mode */
if (!acpi_gbl_enable_interpreter_slack) {
ACPI_WARNING((AE_INFO,
"Invalid character(s) in name (0x%.8X) %p, repaired: [%4.4s]" ,
original_name, name, &name[0 ]));
} else {
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
"Invalid character(s) in name (0x%.8X), repaired: [%4.4s]" ,
original_name, name));
}
}
}
#if defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP
/*******************************************************************************
*
* FUNCTION : ut_convert_backslashes
*
* PARAMETERS : pathname - File pathname string to be converted
*
* RETURN : Modifies the input Pathname
*
* DESCRIPTION : Convert all backslashes ( 0 x5C ) to forward slashes ( 0 x2F ) within
* the entire input file pathname string .
*
******************************************************************************/
void ut_convert_backslashes(char *pathname)
{
if (!pathname) {
return ;
}
while (*pathname) {
if (*pathname == '\\' ) {
*pathname = '/' ;
}
pathname++;
}
}
#endif
Messung V0.5 in Prozent C=94 H=92 G=92
¤ Dauer der Verarbeitung: 0.4 Sekunden
¤
*© Formatika GbR, Deutschland