ACPICA from Bob Moore <robert.moore@intel.com>
[pandora-kernel.git] / drivers / acpi / utilities / utcopy.c
index 11e8849..31c30a3 100644 (file)
@@ -694,58 +694,50 @@ acpi_ut_copy_simple_object (
        dest_desc->common.reference_count = reference_count;
        dest_desc->common.next_object = next_object;
 
+       /* New object is not static, regardless of source */
+
+       dest_desc->common.flags &= ~AOPOBJ_STATIC_POINTER;
+
        /* Handle the objects with extra data */
 
        switch (ACPI_GET_OBJECT_TYPE (dest_desc)) {
        case ACPI_TYPE_BUFFER:
-
-               dest_desc->buffer.node = NULL;
-               dest_desc->common.flags = source_desc->common.flags;
-
                /*
                 * Allocate and copy the actual buffer if and only if:
                 * 1) There is a valid buffer pointer
-                * 2) The buffer is not static (not in an ACPI table) (in this case,
-                *    the actual pointer was already copied above)
+                * 2) The buffer has a length > 0
                 */
                if ((source_desc->buffer.pointer) &&
-                       (!(source_desc->common.flags & AOPOBJ_STATIC_POINTER))) {
-                       dest_desc->buffer.pointer = NULL;
-
-                       /* Create an actual buffer only if length > 0 */
-
-                       if (source_desc->buffer.length) {
-                               dest_desc->buffer.pointer =
-                                       ACPI_MEM_ALLOCATE (source_desc->buffer.length);
-                               if (!dest_desc->buffer.pointer) {
-                                       return (AE_NO_MEMORY);
-                               }
+                       (source_desc->buffer.length)) {
+                       dest_desc->buffer.pointer =
+                               ACPI_MEM_ALLOCATE (source_desc->buffer.length);
+                       if (!dest_desc->buffer.pointer) {
+                               return (AE_NO_MEMORY);
+                       }
 
-                               /* Copy the actual buffer data */
+                       /* Copy the actual buffer data */
 
-                               ACPI_MEMCPY (dest_desc->buffer.pointer,
-                                               source_desc->buffer.pointer,
-                                               source_desc->buffer.length);
-                       }
+                       ACPI_MEMCPY (dest_desc->buffer.pointer,
+                                       source_desc->buffer.pointer,
+                                       source_desc->buffer.length);
                }
                break;
 
        case ACPI_TYPE_STRING:
-
                /*
                 * Allocate and copy the actual string if and only if:
                 * 1) There is a valid string pointer
-                * 2) The string is not static (not in an ACPI table) (in this case,
-                *    the actual pointer was already copied above)
+                * (Pointer to a NULL string is allowed)
                 */
-               if ((source_desc->string.pointer) &&
-                       (!(source_desc->common.flags & AOPOBJ_STATIC_POINTER))) {
+               if (source_desc->string.pointer) {
                        dest_desc->string.pointer =
                                ACPI_MEM_ALLOCATE ((acpi_size) source_desc->string.length + 1);
                        if (!dest_desc->string.pointer) {
                                return (AE_NO_MEMORY);
                        }
 
+                       /* Copy the actual string data */
+
                        ACPI_MEMCPY (dest_desc->string.pointer, source_desc->string.pointer,
                                          (acpi_size) source_desc->string.length + 1);
                }