]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/acpi/namespace/nsnames.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
[linux-2.6-omap-h63xx.git] / drivers / acpi / namespace / nsnames.c
index 549db42f16cf5b8d4354db7c9ba386f466ff1c36..42a39a7c96e913a519e6b1bf7b5a79d152dd4a4d 100644 (file)
@@ -56,13 +56,14 @@ ACPI_MODULE_NAME("nsnames")
  *              Size            - Size of the pathname
  *              *name_buffer    - Where to return the pathname
  *
- * RETURN:      Places the pathname into the name_buffer, in external format
+ * RETURN:      Status
+ *              Places the pathname into the name_buffer, in external format
  *              (name segments separated by path separators)
  *
  * DESCRIPTION: Generate a full pathaname
  *
  ******************************************************************************/
-void
+acpi_status
 acpi_ns_build_external_path(struct acpi_namespace_node *node,
                            acpi_size size, char *name_buffer)
 {
@@ -77,7 +78,7 @@ acpi_ns_build_external_path(struct acpi_namespace_node *node,
        if (index < ACPI_NAME_SIZE) {
                name_buffer[0] = AML_ROOT_PREFIX;
                name_buffer[1] = 0;
-               return;
+               return (AE_OK);
        }
 
        /* Store terminator byte, then build name backwards */
@@ -105,14 +106,15 @@ acpi_ns_build_external_path(struct acpi_namespace_node *node,
 
        if (index != 0) {
                ACPI_ERROR((AE_INFO,
-                           "Could not construct pathname; index=%X, size=%X, Path=%s",
+                           "Could not construct external pathname; index=%X, size=%X, Path=%s",
                            (u32) index, (u32) size, &name_buffer[size]));
+
+               return (AE_BAD_PARAMETER);
        }
 
-       return;
+       return (AE_OK);
 }
 
-#ifdef ACPI_DEBUG_OUTPUT
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_get_external_pathname
@@ -129,6 +131,7 @@ acpi_ns_build_external_path(struct acpi_namespace_node *node,
 
 char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node)
 {
+       acpi_status status;
        char *name_buffer;
        acpi_size size;
 
@@ -138,7 +141,6 @@ char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node)
 
        size = acpi_ns_get_pathname_length(node);
        if (!size) {
-               ACPI_ERROR((AE_INFO, "Invalid node failure"));
                return_PTR(NULL);
        }
 
@@ -152,10 +154,14 @@ char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node)
 
        /* Build the path in the allocated buffer */
 
-       acpi_ns_build_external_path(node, size, name_buffer);
+       status = acpi_ns_build_external_path(node, size, name_buffer);
+       if (ACPI_FAILURE(status)) {
+               ACPI_FREE(name_buffer);
+               return_PTR(NULL);
+       }
+
        return_PTR(name_buffer);
 }
-#endif
 
 /*******************************************************************************
  *
@@ -186,7 +192,7 @@ acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node)
        while (next_node && (next_node != acpi_gbl_root_node)) {
                if (ACPI_GET_DESCRIPTOR_TYPE(next_node) != ACPI_DESC_TYPE_NAMED) {
                        ACPI_ERROR((AE_INFO,
-                                   "Invalid NS Node (%p) while traversing path",
+                                   "Invalid Namespace Node (%p) while traversing namespace",
                                    next_node));
                        return 0;
                }
@@ -234,8 +240,7 @@ acpi_ns_handle_to_pathname(acpi_handle target_handle,
 
        required_size = acpi_ns_get_pathname_length(node);
        if (!required_size) {
-               ACPI_ERROR((AE_INFO, "Invalid node failure"));
-               return_ACPI_STATUS(AE_ERROR);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Validate/Allocate/Clear caller buffer */
@@ -247,7 +252,11 @@ acpi_ns_handle_to_pathname(acpi_handle target_handle,
 
        /* Build the path in the caller buffer */
 
-       acpi_ns_build_external_path(node, required_size, buffer->pointer);
+       status =
+           acpi_ns_build_external_path(node, required_size, buffer->pointer);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
+       }
 
        ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%s [%X]\n",
                          (char *)buffer->pointer, (u32) required_size));