From 79e1fcbc0004df79d6d37b40e5dd23b74c1415a8 Mon Sep 17 00:00:00 2001 From: Nathan Whitehorn Date: Sun, 17 Apr 2005 02:40:11 +0000 Subject: [PATCH] Fixed get_device_hid() to actually work. I love it when Intel provides incorrect docs for their APIs... git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12425 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/bus_managers/acpi/acpi_busman.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c b/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c index 7b77368daa..3a29b99bc4 100644 --- a/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c +++ b/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c @@ -2,6 +2,7 @@ #include #include #include +#include #include "acpi.h" #include "acpixf.h" @@ -205,15 +206,22 @@ status_t get_device (const char *hid, uint32 index, char *result) { status_t get_device_hid (const char *path, char *hid) { ACPI_HANDLE handle; - ACPI_DEVICE_INFO info; + ACPI_DEVICE_INFO *info; + ACPI_BUFFER info_buffer; if (AcpiGetHandle(NULL,path,&handle) != AE_OK) return B_ENTRY_NOT_FOUND; - if (AcpiGetObjectInfo(handle,&info) != AE_OK) + info_buffer.Pointer = info = (ACPI_DEVICE_INFO *)malloc(sizeof(ACPI_DEVICE_INFO)); + info_buffer.Length = sizeof(ACPI_DEVICE_INFO); + + if (AcpiGetObjectInfo(handle,&info_buffer) != AE_OK) { + free(info_buffer.Pointer); return B_BAD_TYPE; + } - strcpy(hid,info.HardwareId.Value); + strncpy(hid,info->HardwareId.Value,ACPI_DEVICE_ID_LENGTH); + hid[8] = '\0'; return B_OK; }