diff options
author | Daniel Colascione <dancol@dancol.org> | 2019-01-16 14:37:21 -0500 |
---|---|---|
committer | Daniel Colascione <dancol@dancol.org> | 2019-01-16 14:37:28 -0500 |
commit | ece563e8eda4aac77923df13c5e8e8032c69b9b3 (patch) | |
tree | c596f0ea3097defa9c812d63e8d448d61954b0d2 /src/coding.c | |
parent | 8bf51c380acc04f25fba8f8aa3d1cc08b45f3e69 (diff) | |
download | emacs-ece563e8eda4aac77923df13c5e8e8032c69b9b3.tar.gz |
Fix crash in charset detection after pdumper load
* src/coding.c:
(reset_coding_after_pdumper_load): new function re-init character
classes after pdumper load.
(syms_of_coding): Call it.
Diffstat (limited to 'src/coding.c')
-rw-r--r-- | src/coding.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/coding.c b/src/coding.c index 665aefa34c8..441c85f81a3 100644 --- a/src/coding.c +++ b/src/coding.c @@ -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); + } + } } |