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_NAME(name, ACPI_ROOT_PATHNAME)) { return; } ACPI_MOVE_NAME(&original_name, name); /* Check each character in the name */ for (i = 0; i < ACPI_NAME_SIZE; i++) { if (acpi_ut_valid_name_char(name[i], i)) { continue; } /* * Replace a bad character with something printable, yet technically * still invalid. 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), repaired: [%4.4s]", original_name, name)); } else { ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Invalid character(s) in name (0x%.8X), repaired: [%4.4s]", original_name, name)); } } }
static acpi_status acpi_ex_name_segment(u8 ** in_aml_address, char *name_string) { char *aml_address = (void *)*in_aml_address; acpi_status status = AE_OK; u32 index; char char_buf[5]; ACPI_FUNCTION_TRACE(ex_name_segment); /* * If first character is a digit, then we know that we aren't looking * at a valid name segment */ char_buf[0] = *aml_address; if ('0' <= char_buf[0] && char_buf[0] <= '9') { ACPI_ERROR((AE_INFO, "Invalid leading digit: %c", char_buf[0])); return_ACPI_STATUS(AE_CTRL_PENDING); } ACPI_DEBUG_PRINT((ACPI_DB_LOAD, "Bytes from stream:\n")); for (index = 0; (index < ACPI_NAME_SIZE) && (acpi_ut_valid_name_char(*aml_address, 0)); index++) { char_buf[index] = *aml_address++; ACPI_DEBUG_PRINT((ACPI_DB_LOAD, "%c\n", char_buf[index])); } /* Valid name segment */ if (index == 4) { /* Found 4 valid characters */ char_buf[4] = '\0'; if (name_string) { strcat(name_string, char_buf); ACPI_DEBUG_PRINT((ACPI_DB_NAMES, "Appended to - %s\n", name_string)); } else { ACPI_DEBUG_PRINT((ACPI_DB_NAMES, "No Name string - %s\n", char_buf)); } } else if (index == 0) { /* * First character was not a valid name character, * so we are looking at something other than a name. */ ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Leading character is not alpha: %02Xh (not a name)\n", char_buf[0])); status = AE_CTRL_PENDING; } else { /* * Segment started with one or more valid characters, but fewer than * the required 4 */ status = AE_AML_BAD_NAME; ACPI_ERROR((AE_INFO, "Bad character 0x%02x in name, at %p", *aml_address, aml_address)); } *in_aml_address = ACPI_CAST_PTR(u8, aml_address); return_ACPI_STATUS(status); }