📄 exstorob.c
字号:
/****************************************************************************** * * Module Name: exstorob - AML Interpreter object store support, store to object * $Revision: 37 $ * *****************************************************************************//* * 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"#include "acparser.h"#include "acdispat.h"#include "acinterp.h"#include "amlcode.h"#include "acnamesp.h"#include "actables.h"#define _COMPONENT ACPI_EXECUTER MODULE_NAME ("exstorob")/******************************************************************************* * * FUNCTION: Acpi_ex_copy_buffer_to_buffer * * PARAMETERS: Source_desc - Source object to copy * Target_desc - Destination object of the copy * * RETURN: Status * * DESCRIPTION: Copy a buffer object to another buffer object. * ******************************************************************************/acpi_statusacpi_ex_copy_buffer_to_buffer ( acpi_operand_object *source_desc, acpi_operand_object *target_desc){ u32 length; u8 *buffer; PROC_NAME ("Ex_copy_buffer_to_buffer"); /* * We know that Source_desc is a buffer by now */ buffer = (u8 *) source_desc->buffer.pointer; length = source_desc->buffer.length; /* * If target is a buffer of length zero, allocate a new * buffer of the proper length */ if (target_desc->buffer.length == 0) { target_desc->buffer.pointer = ACPI_MEM_ALLOCATE (length); if (!target_desc->buffer.pointer) { return (AE_NO_MEMORY); } target_desc->buffer.length = length; } /* * Buffer is a static allocation, * only place what will fit in the buffer. */ if (length <= target_desc->buffer.length) { /* Clear existing buffer and copy in the new one */ MEMSET (target_desc->buffer.pointer, 0, target_desc->buffer.length); MEMCPY (target_desc->buffer.pointer, buffer, length); } else { /* * Truncate the source, copy only what will fit */ MEMCPY (target_desc->buffer.pointer, buffer, target_desc->buffer.length); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Truncating src buffer from %X to %X\n", length, target_desc->buffer.length)); } return (AE_OK);}/******************************************************************************* * * FUNCTION: Acpi_ex_copy_string_to_string * * PARAMETERS: Source_desc - Source object to copy * Target_desc - Destination object of the copy * * RETURN: Status * * DESCRIPTION: Copy a String object to another String object * ******************************************************************************/acpi_statusacpi_ex_copy_string_to_string ( acpi_operand_object *source_desc, acpi_operand_object *target_desc){ u32 length; u8 *buffer; FUNCTION_ENTRY (); /* * We know that Source_desc is a string by now. */ buffer = (u8 *) source_desc->string.pointer; length = source_desc->string.length; /* * Setting a string value replaces the old string */ if (length < target_desc->string.length) { /* Clear old string and copy in the new one */ MEMSET (target_desc->string.pointer, 0, target_desc->string.length); MEMCPY (target_desc->string.pointer, buffer, length); } else { /* * Free the current buffer, then allocate a buffer * large enough to hold the value */ if (target_desc->string.pointer && (!(target_desc->common.flags & AOPOBJ_STATIC_POINTER))) { /* * Only free if not a pointer into the DSDT */ ACPI_MEM_FREE (target_desc->string.pointer); } target_desc->string.pointer = ACPI_MEM_ALLOCATE (length + 1); if (!target_desc->string.pointer) { return (AE_NO_MEMORY); } target_desc->string.length = length; MEMCPY (target_desc->string.pointer, buffer, length); } return (AE_OK);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -