]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virpcivpd: Bring variables into loops
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 2 Nov 2021 16:23:41 +0000 (17:23 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 3 Nov 2021 13:46:54 +0000 (14:46 +0100)
I've noticed one function inside virpcivpd.c, namely
virPCIVPDParseVPDLargeResourceFields() that declares some
variables at the top level even though they are used only inside
a loop in which they have to be freed explicitly.

Bringing variable declarations into the loop allows us to make
the code nicer.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
src/util/virpcivpd.c

index d8f2a43cde45929be233f7db138c2cd11466f375..9af0566d19c6fa0eb2ec6776f11c59f9701cdfb6 100644 (file)
@@ -456,10 +456,6 @@ bool
 virPCIVPDParseVPDLargeResourceFields(int vpdFileFd, uint16_t resPos, uint16_t resDataLen,
                                      bool readOnly, uint8_t *csum, virPCIVPDResource *res)
 {
-    g_autofree char *fieldKeyword = NULL;
-    g_autofree char *fieldValue = NULL;
-    virPCIVPDResourceFieldValueFormat fieldFormat = VIR_PCI_VPD_RESOURCE_FIELD_VALUE_FORMAT_LAST;
-
     /* A buffer of up to one resource record field size (plus a zero byte) is needed. */
     g_autofree uint8_t *buf = g_malloc0(PCI_VPD_MAX_FIELD_SIZE + 1);
     uint16_t fieldDataLen = 0, bytesToRead = 0;
@@ -473,6 +469,10 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd, uint16_t resPos, uint16_t re
      * just occupy 3 header bytes. In the in case of the RW field this may mean that
      * no more space is left in the section. */
     while (fieldPos + 3 <= resPos + resDataLen) {
+        virPCIVPDResourceFieldValueFormat fieldFormat = VIR_PCI_VPD_RESOURCE_FIELD_VALUE_FORMAT_LAST;
+        g_autofree char *fieldKeyword = NULL;
+        g_autofree char *fieldValue = NULL;
+
         /* Keyword resources consist of keywords (2 ASCII bytes per the spec) and 1-byte length. */
         if (virPCIVPDReadVPDBytes(vpdFileFd, buf, 3, fieldPos, csum) != 3) {
             /* Invalid field encountered which means the resource itself is invalid too. Report
@@ -548,8 +548,6 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd, uint16_t resPos, uint16_t re
                 /* Skip fields with invalid values - this is safe assuming field length is
                  * correctly specified. */
                 VIR_DEBUG("A value for field %s contains invalid characters", fieldKeyword);
-                g_free(g_steal_pointer(&fieldKeyword));
-                g_free(g_steal_pointer(&fieldValue));
                 continue;
             }
         } else if (fieldFormat == VIR_PCI_VPD_RESOURCE_FIELD_VALUE_FORMAT_RESVD) {
@@ -559,19 +557,13 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd, uint16_t resPos, uint16_t re
                 return false;
             }
             hasChecksum = true;
-            g_free(g_steal_pointer(&fieldKeyword));
-            g_free(g_steal_pointer(&fieldValue));
             break;
         } else if (fieldFormat == VIR_PCI_VPD_RESOURCE_FIELD_VALUE_FORMAT_RDWR) {
             /* Skip the read-write space since it is used for indication only. */
             hasRW = true;
-            g_free(g_steal_pointer(&fieldKeyword));
-            g_free(g_steal_pointer(&fieldValue));
             break;
         } else if (fieldFormat == VIR_PCI_VPD_RESOURCE_FIELD_VALUE_FORMAT_LAST) {
             /* Skip unknown fields */
-            g_free(g_steal_pointer(&fieldKeyword));
-            g_free(g_steal_pointer(&fieldValue));
             continue;
         } else {
             fieldValue = g_malloc(fieldDataLen);
@@ -591,9 +583,6 @@ virPCIVPDParseVPDLargeResourceFields(int vpdFileFd, uint16_t resPos, uint16_t re
                            _("Could not update the VPD resource keyword: %s"), fieldKeyword);
             return false;
         }
-        /* No longer need those since copies were made during the keyword update. */
-        g_free(g_steal_pointer(&fieldKeyword));
-        g_free(g_steal_pointer(&fieldValue));
     }
 
     /* May have exited the loop prematurely in case RV or RW were encountered and