cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

utnonansi.c (4474B)


      1// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
      2/*******************************************************************************
      3 *
      4 * Module Name: utnonansi - Non-ansi C library functions
      5 *
      6 ******************************************************************************/
      7
      8#include <acpi/acpi.h>
      9#include "accommon.h"
     10
     11#define _COMPONENT          ACPI_UTILITIES
     12ACPI_MODULE_NAME("utnonansi")
     13
     14/*
     15 * Non-ANSI C library functions - strlwr, strupr, stricmp, and "safe"
     16 * string functions.
     17 */
     18/*******************************************************************************
     19 *
     20 * FUNCTION:    acpi_ut_strlwr (strlwr)
     21 *
     22 * PARAMETERS:  src_string      - The source string to convert
     23 *
     24 * RETURN:      None
     25 *
     26 * DESCRIPTION: Convert a string to lowercase
     27 *
     28 ******************************************************************************/
     29void acpi_ut_strlwr(char *src_string)
     30{
     31	char *string;
     32
     33	ACPI_FUNCTION_ENTRY();
     34
     35	if (!src_string) {
     36		return;
     37	}
     38
     39	/* Walk entire string, lowercasing the letters */
     40
     41	for (string = src_string; *string; string++) {
     42		*string = (char)tolower((int)*string);
     43	}
     44}
     45
     46/*******************************************************************************
     47 *
     48 * FUNCTION:    acpi_ut_strupr (strupr)
     49 *
     50 * PARAMETERS:  src_string      - The source string to convert
     51 *
     52 * RETURN:      None
     53 *
     54 * DESCRIPTION: Convert a string to uppercase
     55 *
     56 ******************************************************************************/
     57
     58void acpi_ut_strupr(char *src_string)
     59{
     60	char *string;
     61
     62	ACPI_FUNCTION_ENTRY();
     63
     64	if (!src_string) {
     65		return;
     66	}
     67
     68	/* Walk entire string, uppercasing the letters */
     69
     70	for (string = src_string; *string; string++) {
     71		*string = (char)toupper((int)*string);
     72	}
     73}
     74
     75/******************************************************************************
     76 *
     77 * FUNCTION:    acpi_ut_stricmp (stricmp)
     78 *
     79 * PARAMETERS:  string1             - first string to compare
     80 *              string2             - second string to compare
     81 *
     82 * RETURN:      int that signifies string relationship. Zero means strings
     83 *              are equal.
     84 *
     85 * DESCRIPTION: Case-insensitive string compare. Implementation of the
     86 *              non-ANSI stricmp function.
     87 *
     88 ******************************************************************************/
     89
     90int acpi_ut_stricmp(char *string1, char *string2)
     91{
     92	int c1;
     93	int c2;
     94
     95	do {
     96		c1 = tolower((int)*string1);
     97		c2 = tolower((int)*string2);
     98
     99		string1++;
    100		string2++;
    101	}
    102	while ((c1 == c2) && (c1));
    103
    104	return (c1 - c2);
    105}
    106
    107#if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) || defined (ACPI_DEBUG_OUTPUT)
    108/*******************************************************************************
    109 *
    110 * FUNCTION:    acpi_ut_safe_strcpy, acpi_ut_safe_strcat, acpi_ut_safe_strncat
    111 *
    112 * PARAMETERS:  Adds a "DestSize" parameter to each of the standard string
    113 *              functions. This is the size of the Destination buffer.
    114 *
    115 * RETURN:      TRUE if the operation would overflow the destination buffer.
    116 *
    117 * DESCRIPTION: Safe versions of standard Clib string functions. Ensure that
    118 *              the result of the operation will not overflow the output string
    119 *              buffer.
    120 *
    121 * NOTE:        These functions are typically only helpful for processing
    122 *              user input and command lines. For most ACPICA code, the
    123 *              required buffer length is precisely calculated before buffer
    124 *              allocation, so the use of these functions is unnecessary.
    125 *
    126 ******************************************************************************/
    127
    128u8 acpi_ut_safe_strcpy(char *dest, acpi_size dest_size, char *source)
    129{
    130
    131	if (strlen(source) >= dest_size) {
    132		return (TRUE);
    133	}
    134
    135	strcpy(dest, source);
    136	return (FALSE);
    137}
    138
    139u8 acpi_ut_safe_strcat(char *dest, acpi_size dest_size, char *source)
    140{
    141
    142	if ((strlen(dest) + strlen(source)) >= dest_size) {
    143		return (TRUE);
    144	}
    145
    146	strcat(dest, source);
    147	return (FALSE);
    148}
    149
    150u8
    151acpi_ut_safe_strncat(char *dest,
    152		     acpi_size dest_size,
    153		     char *source, acpi_size max_transfer_length)
    154{
    155	acpi_size actual_transfer_length;
    156
    157	actual_transfer_length = ACPI_MIN(max_transfer_length, strlen(source));
    158
    159	if ((strlen(dest) + actual_transfer_length) >= dest_size) {
    160		return (TRUE);
    161	}
    162
    163	strncat(dest, source, max_transfer_length);
    164	return (FALSE);
    165}
    166
    167void acpi_ut_safe_strncpy(char *dest, char *source, acpi_size dest_size)
    168{
    169	/* Always terminate destination string */
    170
    171	strncpy(dest, source, dest_size);
    172	dest[dest_size - 1] = 0;
    173}
    174
    175#endif