ACPI: improve acpi_extract_package() utility

The current version requires one to know the size of the package
a priori; this is almost impossible if the package is composed of
strings of variable length.  This change allows the utility to
allocate a buffer of the proper size if asked.

Signed-off-by: Al Stone <al.stone@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
Al Stone 2013-10-09 14:21:10 -06:00 committed by Rafael J. Wysocki
parent 088f1fd267
commit e83dda0624
1 changed files with 13 additions and 4 deletions

View File

@ -169,11 +169,20 @@ acpi_extract_package(union acpi_object *package,
/*
* Validate output buffer.
*/
if (buffer->length < size_required) {
if (buffer->length == ACPI_ALLOCATE_BUFFER) {
buffer->pointer = ACPI_ALLOCATE(size_required);
if (!buffer->pointer)
return AE_NO_MEMORY;
buffer->length = size_required;
return AE_BUFFER_OVERFLOW;
} else if (buffer->length != size_required || !buffer->pointer) {
return AE_BAD_PARAMETER;
memset(buffer->pointer, 0, size_required);
} else {
if (buffer->length < size_required) {
buffer->length = size_required;
return AE_BUFFER_OVERFLOW;
} else if (buffer->length != size_required ||
!buffer->pointer) {
return AE_BAD_PARAMETER;
}
}
head = buffer->pointer;