Applied.

Andrey, Frans,
thanks for helping with Alexey's patch this weekend.

-Len

On Monday 29 October 2007 16:29, Alexey Starikovskiy wrote:
> Some machines return integer instead of expected string.
> 
> Signed-off-by: Alexey Starikovskiy <[EMAIL PROTECTED]>
> ---
> 
>  drivers/acpi/battery.c |   25 +++++++++++++++----------
>  1 files changed, 15 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
> index 02a396d..6c06879 100644
> --- a/drivers/acpi/battery.c
> +++ b/drivers/acpi/battery.c
> @@ -260,7 +260,7 @@ static int extract_package(struct acpi_battery *battery,
>                          union acpi_object *package,
>                          struct acpi_offsets *offsets, int num)
>  {
> -     int i, *x;
> +     int i;
>       union acpi_object *element;
>       if (package->type != ACPI_TYPE_PACKAGE)
>               return -EFAULT;
> @@ -269,16 +269,21 @@ static int extract_package(struct acpi_battery *battery,
>                       return -EFAULT;
>               element = &package->package.elements[i];
>               if (offsets[i].mode) {
> -                     if (element->type != ACPI_TYPE_STRING &&
> -                         element->type != ACPI_TYPE_BUFFER)
> -                             return -EFAULT;
> -                     strncpy((u8 *)battery + offsets[i].offset,
> -                             element->string.pointer, 32);
> +                     u8 *ptr = (u8 *)battery + offsets[i].offset;
> +                     if (element->type == ACPI_TYPE_STRING ||
> +                         element->type == ACPI_TYPE_BUFFER)
> +                             strncpy(ptr, element->string.pointer, 32);
> +                     else if (element->type == ACPI_TYPE_INTEGER) {
> +                             strncpy(ptr, (u8 *)&element->integer.value,
> +                                     sizeof(acpi_integer));
> +                             ptr[sizeof(acpi_integer)] = 0;
> +                     } else return -EFAULT;
>               } else {
> -                     if (element->type != ACPI_TYPE_INTEGER)
> -                             return -EFAULT;
> -                     x = (int *)((u8 *)battery + offsets[i].offset);
> -                     *x = element->integer.value;
> +                     if (element->type == ACPI_TYPE_INTEGER) {
> +                             int *x = (int *)((u8 *)battery +
> +                                             offsets[i].offset);
> +                             *x = element->integer.value;
> +                     } else return -EFAULT;
>               }
>       }
>       return 0;
> 
> -
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to [EMAIL PROTECTED]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to