]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix crash in charset detection after pdumper load
authorDaniel Colascione <dancol@dancol.org>
Wed, 16 Jan 2019 19:37:21 +0000 (14:37 -0500)
committerDaniel Colascione <dancol@dancol.org>
Wed, 16 Jan 2019 19:37:28 +0000 (14:37 -0500)
* src/coding.c:
(reset_coding_after_pdumper_load): new function re-init character
classes after pdumper load.
(syms_of_coding): Call it.

src/coding.c

index 665aefa34c82ef7554e7c5ea62eea5ca6ebad6a2..441c85f81a3759a1dc63301b13f830343c1c6f84 100644 (file)
@@ -10774,6 +10774,8 @@ init_coding_once (void)
   PDUMPER_REMEMBER_SCALAR (emacs_mule_bytes);
 }
 
+static void reset_coding_after_pdumper_load (void);
+
 void
 syms_of_coding (void)
 {
@@ -11316,4 +11318,27 @@ internal character representation.  */);
   system_eol_type = Qunix;
 #endif
   staticpro (&system_eol_type);
+
+  pdumper_do_now_and_after_load_impl (reset_coding_after_pdumper_load);
+}
+
+static void
+reset_coding_after_pdumper_load (void)
+{
+  if (!dumped_with_pdumper_p ())
+    return;
+  for (struct coding_system *this = &coding_categories[0];
+       this < &coding_categories[coding_category_max];
+       ++this)
+    {
+      int id = this->id;
+      if (id >= 0)
+        {
+          /* Need to rebuild the coding system object because we
+             persisted it as a scalar and it's full of gunk that's now
+             invalid.  */
+          memset (this, 0, sizeof (*this));
+          setup_coding_system (CODING_ID_NAME (id), this);
+        }
+    }
 }