Clean up + clarify popMacro() a bit
authorPanu Matilainen <pmatilai@redhat.com>
Tue, 31 May 2011 08:38:38 +0000 (11:38 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Tue, 31 May 2011 08:38:38 +0000 (11:38 +0300)
- Actually protect against NULL mep (shouldn't happen but...)
- Remove bogus comment + add actually relevant comments
- Make the *mep reassignment more obvious by taking it out of
  the if where its easily missed
- Replace dead NULL-assignments with a trash-n-burn memset()
- Fixup indentation to match general rpm style

rpmio/macro.c

index f5488a6..9667d71 100644 (file)
@@ -691,16 +691,21 @@ pushMacro(rpmMacroEntry * mep,
 static void
 popMacro(rpmMacroEntry * mep)
 {
-       rpmMacroEntry me = (*mep ? *mep : NULL);
-
-       if (me) {
-               /* XXX cast to workaround const */
-               if ((*mep = me->prev) == NULL)
-                       me->name = _free(me->name);
-               me->opts = _free(me->opts);
-               me->body = _free(me->body);
-               me = _free(me);
-       }
+    if (mep && *mep) {
+       rpmMacroEntry me = *mep;
+
+       /* restore previous definition of the macro */
+       *mep = me->prev;
+
+       /* name is shared between entries, only free if last of its kind */
+       if (me->prev == NULL)
+           free(me->name);
+       free(me->opts);
+       free(me->body);
+
+       memset(me, 0, sizeof(*me)); /* trash and burn */
+       free(me);
+    }
 }
 
 /**