* [PATCH] ACPI: improve acpi_extract_package() utility
@ 2013-10-09 20:21 al.stone
0 siblings, 0 replies; only message in thread
From: al.stone @ 2013-10-09 20:21 UTC (permalink / raw)
To: linux-acpi; +Cc: linaro-acpi, Al Stone, Al Stone
From: Al Stone <ahs3@redhat.com>
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>
---
drivers/acpi/utils.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
index 552248b..fc2cd32 100644
--- a/drivers/acpi/utils.c
+++ b/drivers/acpi/utils.c
@@ -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;
--
1.8.3.1
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2013-10-09 20:21 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-09 20:21 [PATCH] ACPI: improve acpi_extract_package() utility al.stone
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).