Просмотр исходного кода

libdpkg: Properly reset filetriggers_edited in trig_file_interests_save

The function was not resetting filetriggers_edited when no triggers were
left, and duplicated part of the existing functionality.

Refactor into trig_file_interests_remove() and
trig_file_interests_update() to make them use the same main code path.

Regression introduced in commit 83b591340ec92cf0e9814e8403da7711cbbc6b46.
Guillem Jover лет назад: 15
Родитель
Сommit
b8038ef472
1 измененных файлов с 21 добавлено и 13 удалено
  1. 21 13
      lib/dpkg/triglib.c

+ 21 - 13
lib/dpkg/triglib.c

@@ -550,23 +550,19 @@ edited:
 	filetriggers_edited = 1;
 }
 
-void
-trig_file_interests_save(void)
+static void
+trig_file_interests_remove(void)
+{
+	if (unlink(triggersfilefile) && errno != ENOENT)
+		ohshite(_("cannot remove `%.250s'"), triggersfilefile);
+}
+
+static void
+trig_file_interests_update(void)
 {
 	struct trigfileint *tfi;
 	FILE *nf;
 
-	if (filetriggers_edited <= 0)
-		return;
-
-	if (!filetriggers.head) {
-		/* No file trigger left, drop the file */
-		if (unlink(triggersfilefile) && errno != ENOENT)
-			ohshite(_("cannot remove `%.250s'"), triggersfilefile);
-		dir_sync_path(triggersdir);
-		return;
-	}
-
 	nf = fopen(triggersnewfilefile, "w");
 	if (!nf)
 		ohshite(_("unable to create new file triggers file `%.250s'"),
@@ -594,6 +590,18 @@ trig_file_interests_save(void)
 	if (rename(triggersnewfilefile, triggersfilefile))
 		ohshite(_("unable to install new file triggers file as `%.250s'"),
 		        triggersfilefile);
+}
+
+void
+trig_file_interests_save(void)
+{
+	if (filetriggers_edited <= 0)
+		return;
+
+	if (!filetriggers.head)
+		trig_file_interests_remove();
+	else
+		trig_file_interests_update();
 
 	dir_sync_path(triggersdir);