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

libdpkg: Add new trigdef_set_methods to avoid exposing trigdef

Make trigdef static and create a setter function for it.
Guillem Jover лет назад: 16
Родитель
Сommit
239b48d8a9
4 измененных файлов с 12 добавлено и 4 удалено
  1. 1 1
      lib/dpkg/dpkg-db.h
  2. 8 1
      lib/dpkg/trigdeferred.l
  3. 1 1
      lib/dpkg/triglib.c
  4. 2 1
      src/trigcmd.c

+ 1 - 1
lib/dpkg/dpkg-db.h

@@ -231,7 +231,7 @@ struct trigdefmeths {
   void (*trig_end)(void);
 };
 
-extern const struct trigdefmeths *trigdef;
+void trigdef_set_methods(const struct trigdefmeths *methods);
 extern FILE *trig_new_deferred;
 
 /* Return values:

+ 8 - 1
lib/dpkg/trigdeferred.l

@@ -48,6 +48,8 @@
 
 static struct varbuf fn, newfn;
 
+static const struct trigdefmeths *trigdef;
+
 %}
 
 %%
@@ -88,7 +90,6 @@ static int lock_fd = -1;
 static FILE *old_deferred;
 
 FILE *trig_new_deferred;
-const struct trigdefmeths *trigdef;
 
 static void
 constructfn(struct varbuf *vb, const char *admindir, const char *tail)
@@ -171,6 +172,12 @@ trigdef_update_start(enum trigdef_updateflags uf, const char *admindir)
 	return 2;
 }
 
+void
+trigdef_set_methods(const struct trigdefmeths *methods)
+{
+	trigdef = methods;
+}
+
 void
 trigdef_process_done(void)
 {

+ 1 - 1
lib/dpkg/triglib.c

@@ -721,7 +721,7 @@ trig_incorporate(enum modstatdb_rw cstatus, const char *admindir)
 	int ur;
 	enum trigdef_updateflags tduf;
 
-	trigdef = &tdm_incorp;
+	trigdef_set_methods(&tdm_incorp);
 	trig_file_interests_ensure();
 
 	tduf = tduf_nolockok;

+ 2 - 1
src/trigcmd.c

@@ -218,7 +218,8 @@ main(int argc, const char *const *argv)
 		badusage(_("invalid trigger name `%.250s': %.250s"),
 		         activate, badname);
 
-	trigdef = &tdm_add;
+	trigdef_set_methods(&tdm_add);
+
 	tduf = tduf_nolockok;
 	if (!f_noact)
 		tduf |= tduf_write | tduf_writeifempty;