linux/drivers/acpi/acpica/utascii.c
<<
>>
Prefs
   1/******************************************************************************
   2 *
   3 * Module Name: utascii - Utility ascii functions
   4 *
   5 *****************************************************************************/
   6
   7/*
   8 * Copyright (C) 2000 - 2017, Intel Corp.
   9 * All rights reserved.
  10 *
  11 * Redistribution and use in source and binary forms, with or without
  12 * modification, are permitted provided that the following conditions
  13 * are met:
  14 * 1. Redistributions of source code must retain the above copyright
  15 *    notice, this list of conditions, and the following disclaimer,
  16 *    without modification.
  17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  18 *    substantially similar to the "NO WARRANTY" disclaimer below
  19 *    ("Disclaimer") and any redistribution must be conditioned upon
  20 *    including a substantially similar Disclaimer requirement for further
  21 *    binary redistribution.
  22 * 3. Neither the names of the above-listed copyright holders nor the names
  23 *    of any contributors may be used to endorse or promote products derived
  24 *    from this software without specific prior written permission.
  25 *
  26 * Alternatively, this software may be distributed under the terms of the
  27 * GNU General Public License ("GPL") version 2 as published by the Free
  28 * Software Foundation.
  29 *
  30 * NO WARRANTY
  31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
  34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  41 * POSSIBILITY OF SUCH DAMAGES.
  42 */
  43
  44#include <acpi/acpi.h>
  45#include "accommon.h"
  46
  47/*******************************************************************************
  48 *
  49 * FUNCTION:    acpi_ut_valid_nameseg
  50 *
  51 * PARAMETERS:  name            - The name or table signature to be examined.
  52 *                                Four characters, does not have to be a
  53 *                                NULL terminated string.
  54 *
  55 * RETURN:      TRUE if signature is has 4 valid ACPI characters
  56 *
  57 * DESCRIPTION: Validate an ACPI table signature.
  58 *
  59 ******************************************************************************/
  60
  61u8 acpi_ut_valid_nameseg(char *name)
  62{
  63        u32 i;
  64
  65        /* Validate each character in the signature */
  66
  67        for (i = 0; i < ACPI_NAME_SIZE; i++) {
  68                if (!acpi_ut_valid_name_char(name[i], i)) {
  69                        return (FALSE);
  70                }
  71        }
  72
  73        return (TRUE);
  74}
  75
  76/*******************************************************************************
  77 *
  78 * FUNCTION:    acpi_ut_valid_name_char
  79 *
  80 * PARAMETERS:  char            - The character to be examined
  81 *              position        - Byte position (0-3)
  82 *
  83 * RETURN:      TRUE if the character is valid, FALSE otherwise
  84 *
  85 * DESCRIPTION: Check for a valid ACPI character. Must be one of:
  86 *              1) Upper case alpha
  87 *              2) numeric
  88 *              3) underscore
  89 *
  90 *              We allow a '!' as the last character because of the ASF! table
  91 *
  92 ******************************************************************************/
  93
  94u8 acpi_ut_valid_name_char(char character, u32 position)
  95{
  96
  97        if (!((character >= 'A' && character <= 'Z') ||
  98              (character >= '0' && character <= '9') || (character == '_'))) {
  99
 100                /* Allow a '!' in the last position */
 101
 102                if (character == '!' && position == 3) {
 103                        return (TRUE);
 104                }
 105
 106                return (FALSE);
 107        }
 108
 109        return (TRUE);
 110}
 111
 112/*******************************************************************************
 113 *
 114 * FUNCTION:    acpi_ut_check_and_repair_ascii
 115 *
 116 * PARAMETERS:  name                - Ascii string
 117 *              count               - Number of characters to check
 118 *
 119 * RETURN:      None
 120 *
 121 * DESCRIPTION: Ensure that the requested number of characters are printable
 122 *              Ascii characters. Sets non-printable and null chars to <space>.
 123 *
 124 ******************************************************************************/
 125
 126void acpi_ut_check_and_repair_ascii(u8 *name, char *repaired_name, u32 count)
 127{
 128        u32 i;
 129
 130        for (i = 0; i < count; i++) {
 131                repaired_name[i] = (char)name[i];
 132
 133                if (!name[i]) {
 134                        return;
 135                }
 136                if (!isprint(name[i])) {
 137                        repaired_name[i] = ' ';
 138                }
 139        }
 140}
 141