📄 cmclib.c
字号:
/******************************************************************************
*
* Module Name: cmclib - Local implementation of C library functions
* $Revision: 1.1 $
*
*****************************************************************************/
/*
* Copyright (C) 2000, 2001 R. Byron Moore
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <acpi.h>
/*
* These implementations of standard C Library routines can optionally be
* used if a C library is not available. In general, they are less efficient
* than an inline or assembly implementation
*/
#define _COMPONENT MISCELLANEOUS
MODULE_NAME ("cmclib")
#ifndef ACPI_USE_SYSTEM_CLIBRARY
/*******************************************************************************
*
* FUNCTION: strlen
*
* PARAMETERS: String - Null terminated string
*
* RETURN: Length
*
* DESCRIPTION: Returns the length of the input string
*
******************************************************************************/
u32
acpi_cm_strlen (
const NATIVE_CHAR *string)
{
u32 length = 0;
/* Count the string until a null is encountered */
while (*string) {
length++;
string++;
}
return (length);
}
/*******************************************************************************
*
* FUNCTION: strcpy
*
* PARAMETERS: Dst_string - Target of the copy
* Src_string - The source string to copy
*
* RETURN: Dst_string
*
* DESCRIPTION: Copy a null terminated string
*
******************************************************************************/
NATIVE_CHAR *
acpi_cm_strcpy (
NATIVE_CHAR *dst_string,
const NATIVE_CHAR *src_string)
{
NATIVE_CHAR *string = dst_string;
/* Move bytes brute force */
while (*src_string) {
*string = *src_string;
string++;
src_string++;
}
/* Null terminate */
*string = 0;
return (dst_string);
}
/*******************************************************************************
*
* FUNCTION: strncpy
*
* PARAMETERS: Dst_string - Target of the copy
* Src_string - The source string to copy
* Count - Maximum # of bytes to copy
*
* RETURN: Dst_string
*
* DESCRIPTION: Copy a null terminated string, with a maximum length
*
******************************************************************************/
NATIVE_CHAR *
acpi_cm_strncpy (
NATIVE_CHAR *dst_string,
const NATIVE_CHAR *src_string,
NATIVE_UINT count)
{
NATIVE_CHAR *string = dst_string;
/* Copy the string */
for (string = dst_string;
count && (count--, (*string++ = *src_string++)); ) {;}
/* Pad with nulls if necessary */
while (count--) {
*string = 0;
string++;
}
/* Return original pointer */
return (dst_string);
}
/*******************************************************************************
*
* FUNCTION: strcmp
*
* PARAMETERS: String1 - First string
* String2 - Second string
*
* RETURN: Index where strings mismatched, or 0 if strings matched
*
* DESCRIPTION: Compare two null terminated strings
*
******************************************************************************/
u32
acpi_cm_strcmp (
const NATIVE_CHAR *string1,
const NATIVE_CHAR *string2)
{
for ( ; (*string1 == *string2); string2++) {
if (!*string1++) {
return (0);
}
}
return ((unsigned char) *string1 - (unsigned char) *string2);
}
/*******************************************************************************
*
* FUNCTION: strncmp
*
* PARAMETERS: String1 - First string
* String2 - Second string
* Count - Maximum # of bytes to compare
*
* RETURN: Index where strings mismatched, or 0 if strings matched
*
* DESCRIPTION: Compare two null terminated strings, with a maximum length
*
******************************************************************************/
u32
acpi_cm_strncmp (
const NATIVE_CHAR *string1,
const NATIVE_CHAR *string2,
NATIVE_UINT count)
{
for ( ; count-- && (*string1 == *string2); string2++) {
if (!*string1++) {
return (0);
}
}
return ((count == -1) ? 0 : ((unsigned char) *string1 -
(unsigned char) *string2));
}
/*******************************************************************************
*
* FUNCTION: Strcat
*
* PARAMETERS: Dst_string - Target of the copy
* Src_string - The source string to copy
*
* RETURN: Dst_string
*
* DESCRIPTION: Append a null terminated string to a null terminated string
*
******************************************************************************/
NATIVE_CHAR *
acpi_cm_strcat (
NATIVE_CHAR *dst_string,
const NATIVE_CHAR *src_string)
{
NATIVE_CHAR *string;
/* Find end of the destination string */
for (string = dst_string; *string++; ) { ; }
/* Concatinate the string */
for (--string; (*string++ = *src_string++); ) { ; }
return (dst_string);
}
/*******************************************************************************
*
* FUNCTION: strncat
*
* PARAMETERS: Dst_string - Target of the copy
* Src_string - The source string to copy
* Count - Maximum # of bytes to copy
*
* RETURN: Dst_string
*
* DESCRIPTION: Append a null terminated string to a null terminated string,
* with a maximum count.
*
******************************************************************************/
NATIVE_CHAR *
acpi_cm_strncat (
NATIVE_CHAR *dst_string,
const NATIVE_CHAR *src_string,
NATIVE_UINT count)
{
NATIVE_CHAR *string;
if (count) {
/* Find end of the destination string */
for (string = dst_string; *string++; ) { ; }
/* Concatinate the string */
for (--string; (*string++ = *src_string++) && --count; ) { ; }
/* Null terminate if necessary */
if (!count) {
*string = 0;
}
}
return (dst_string);
}
/*******************************************************************************
*
* FUNCTION: memcpy
*
* PARAMETERS: Dest - Target of the copy
* Src - Source buffer to copy
* Count - Number of bytes to copy
*
* RETURN: Dest
*
* DESCRIPTION: Copy arbitrary bytes of memory
*
******************************************************************************/
void *
acpi_cm_memcpy (
void *dest,
const void *src,
NATIVE_UINT count)
{
NATIVE_CHAR *new = (NATIVE_CHAR *) dest;
NATIVE_CHAR *old = (NATIVE_CHAR *) src;
while (count) {
*new = *old;
new++;
old++;
count--;
}
return (dest);
}
/*******************************************************************************
*
* FUNCTION: memset
*
* PARAMETERS: Dest - Buffer to set
* Value - Value to set each byte of memory
* Count - Number of bytes to set
*
* RETURN: Dest
*
* DESCRIPTION: Initialize a buffer to a known value.
*
******************************************************************************/
void *
acpi_cm_memset (
void *dest,
NATIVE_UINT value,
NATIVE_UINT count)
{
NATIVE_CHAR *new = (NATIVE_CHAR *) dest;
while (count) {
*new = (char) value;
new++;
count--;
}
return (dest);
}
#define NEGATIVE 1
#define POSITIVE 0
#define _ACPI_XA 0x00 /* extra alphabetic - not supported */
#define _ACPI_XS 0x40 /* extra space */
#define _ACPI_BB 0x00 /* BEL, BS, etc. - not supported */
#define _ACPI_CN 0x20 /* CR, FF, HT, NL, VT */
#define _ACPI_DI 0x04 /* '0'-'9' */
#define _ACPI_LO 0x02 /* 'a'-'z' */
#define _ACPI_PU 0x10 /* punctuation */
#define _ACPI_SP 0x08 /* space */
#define _ACPI_UP 0x01 /* 'A'-'Z' */
#define _ACPI_XD 0x80 /* '0'-'9', 'A'-'F', 'a'-'f' */
static const u8 _acpi_ctype[257] = {
_ACPI_CN, /* 0x0 0. */
_ACPI_CN, /* 0x1 1. */
_ACPI_CN, /* 0x2 2. */
_ACPI_CN, /* 0x3 3. */
_ACPI_CN, /* 0x4 4. */
_ACPI_CN, /* 0x5 5. */
_ACPI_CN, /* 0x6 6. */
_ACPI_CN, /* 0x7 7. */
_ACPI_CN, /* 0x8 8. */
_ACPI_CN|_ACPI_SP, /* 0x9 9. */
_ACPI_CN|_ACPI_SP, /* 0xA 10. */
_ACPI_CN|_ACPI_SP, /* 0xB 11. */
_ACPI_CN|_ACPI_SP, /* 0xC 12. */
_ACPI_CN|_ACPI_SP, /* 0xD 13. */
_ACPI_CN, /* 0xE 14. */
_ACPI_CN, /* 0xF 15. */
_ACPI_CN, /* 0x10 16. */
_ACPI_CN, /* 0x11 17. */
_ACPI_CN, /* 0x12 18. */
_ACPI_CN, /* 0x13 19. */
_ACPI_CN, /* 0x14 20. */
_ACPI_CN, /* 0x15 21. */
_ACPI_CN, /* 0x16 22. */
_ACPI_CN, /* 0x17 23. */
_ACPI_CN, /* 0x18 24. */
_ACPI_CN, /* 0x19 25. */
_ACPI_CN, /* 0x1A 26. */
_ACPI_CN, /* 0x1B 27. */
_ACPI_CN, /* 0x1C 28. */
_ACPI_CN, /* 0x1D 29. */
_ACPI_CN, /* 0x1E 30. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -