PCI/sysfs: Rely on lengths from scnprintf(), dsm_label_utf16s_to_utf8s()
authorKrzysztof Wilczyński <kw@linux.com>
Thu, 3 Jun 2021 00:01:08 +0000 (00:01 +0000)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 3 Jun 2021 22:14:36 +0000 (17:14 -0500)
scnprintf() returns the number of bytes written into the buffer.  Change
dsm_label_utf16s_to_utf8s() to do the same.  Rely on those values instead
of using strlen() to compute the buffer length.

No functional change intended.

[bhelgaas: reorder patch in series, len++ to include newline added by
dsm_label_utf16s_to_utf8s(), commit log]
Link: https://lore.kernel.org/r/20210603000112.703037-3-kw@linux.com
Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
drivers/pci/pci-label.c

index 76b381c..94b59e3 100644 (file)
@@ -139,14 +139,17 @@ enum acpi_attr_enum {
        ACPI_ATTR_INDEX_SHOW,
 };
 
-static void dsm_label_utf16s_to_utf8s(union acpi_object *obj, char *buf)
+static int dsm_label_utf16s_to_utf8s(union acpi_object *obj, char *buf)
 {
        int len;
+
        len = utf16s_to_utf8s((const wchar_t *)obj->buffer.pointer,
                              obj->buffer.length,
                              UTF16_LITTLE_ENDIAN,
                              buf, PAGE_SIZE - 1);
-       buf[len] = '\n';
+       buf[len++] = '\n';
+
+       return len;
 }
 
 static int dsm_get_label(struct device *dev, char *buf,
@@ -154,7 +157,7 @@ static int dsm_get_label(struct device *dev, char *buf,
 {
        acpi_handle handle = ACPI_HANDLE(dev);
        union acpi_object *obj, *tmp;
-       int len = -1;
+       int len = 0;
 
        if (!handle)
                return -1;
@@ -175,20 +178,19 @@ static int dsm_get_label(struct device *dev, char *buf,
                 * this entry must return a null string.
                 */
                if (attr == ACPI_ATTR_INDEX_SHOW) {
-                       scnprintf(buf, PAGE_SIZE, "%llu\n", tmp->integer.value);
+                       len = scnprintf(buf, PAGE_SIZE, "%llu\n", tmp->integer.value);
                } else if (attr == ACPI_ATTR_LABEL_SHOW) {
                        if (tmp[1].type == ACPI_TYPE_STRING)
-                               scnprintf(buf, PAGE_SIZE, "%s\n",
+                               len = scnprintf(buf, PAGE_SIZE, "%s\n",
                                          tmp[1].string.pointer);
                        else if (tmp[1].type == ACPI_TYPE_BUFFER)
-                               dsm_label_utf16s_to_utf8s(tmp + 1, buf);
+                               len = dsm_label_utf16s_to_utf8s(tmp + 1, buf);
                }
-               len = strlen(buf) > 0 ? strlen(buf) : -1;
        }
 
        ACPI_FREE(obj);
 
-       return len;
+       return len > 0 ? len : -1;
 }
 
 static ssize_t label_show(struct device *dev, struct device_attribute *attr,