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:
parent
088f1fd267
commit
e83dda0624
|
@ -169,11 +169,20 @@ acpi_extract_package(union acpi_object *package,
|
||||||
/*
|
/*
|
||||||
* Validate output buffer.
|
* 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;
|
buffer->length = size_required;
|
||||||
return AE_BUFFER_OVERFLOW;
|
memset(buffer->pointer, 0, size_required);
|
||||||
} else if (buffer->length != size_required || !buffer->pointer) {
|
} else {
|
||||||
return AE_BAD_PARAMETER;
|
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;
|
head = buffer->pointer;
|
||||||
|
|
Loading…
Reference in New Issue