aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii2019-03-17 17:49:37 +0200
committerEli Zaretskii2019-03-17 17:49:37 +0200
commit03a9a75c5b8bfb5187bffdcca2d52419ef5f950a (patch)
treeccc06fa4e20656fc119b59e215052894e5ea4a3d /src
parent3320fe2deeba6dcc40e934e8a03bef4945c86aff (diff)
downloademacs-03a9a75c5b8bfb5187bffdcca2d52419ef5f950a.tar.gz
emacs-03a9a75c5b8bfb5187bffdcca2d52419ef5f950a.zip
Fix 'define-charset' after dumping with pdumper
* src/charset.h: * src/charset.c (charset_table_used): Now static. (charset_table_size): Now extern. * src/pdumper.c (dump_charset_table): Dump the entire charset_table, not just its used slots. (Bug#34826)
Diffstat (limited to 'src')
-rw-r--r--src/charset.c4
-rw-r--r--src/charset.h2
-rw-r--r--src/pdumper.c6
3 files changed, 8 insertions, 4 deletions
diff --git a/src/charset.c b/src/charset.c
index 56ab8d70181..c0700f972ee 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -62,8 +62,8 @@ Lisp_Object Vcharset_hash_table;
62 62
63/* Table of struct charset. */ 63/* Table of struct charset. */
64struct charset *charset_table; 64struct charset *charset_table;
65static int charset_table_size; 65int charset_table_size;
66int charset_table_used; 66static int charset_table_used;
67 67
68/* Special charsets corresponding to symbols. */ 68/* Special charsets corresponding to symbols. */
69int charset_ascii; 69int charset_ascii;
diff --git a/src/charset.h b/src/charset.h
index ee697b8d3ef..7042a71a469 100644
--- a/src/charset.h
+++ b/src/charset.h
@@ -248,7 +248,7 @@ extern Lisp_Object Vcharset_hash_table;
248 248
249/* Table of struct charset. */ 249/* Table of struct charset. */
250extern struct charset *charset_table; 250extern struct charset *charset_table;
251extern int charset_table_used; 251extern int charset_table_size;
252 252
253#define CHARSET_FROM_ID(id) (charset_table + (id)) 253#define CHARSET_FROM_ID(id) (charset_table + (id))
254 254
diff --git a/src/pdumper.c b/src/pdumper.c
index 56ac531363d..92e19497e59 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -3212,7 +3212,11 @@ dump_charset_table (struct dump_context *ctx)
3212 ctx->flags.pack_objects = true; 3212 ctx->flags.pack_objects = true;
3213 dump_align_output (ctx, DUMP_ALIGNMENT); 3213 dump_align_output (ctx, DUMP_ALIGNMENT);
3214 dump_off offset = ctx->offset; 3214 dump_off offset = ctx->offset;
3215 for (int i = 0; i < charset_table_used; ++i) 3215 /* We are dumping the entire table, not just the used slots, because
3216 otherwise when we restore from the pdump file, the actual size of
3217 the table will be smaller than charset_table_size, and we will
3218 crash if/when a new charset is defined. */
3219 for (int i = 0; i < charset_table_size; ++i)
3216 dump_charset (ctx, i); 3220 dump_charset (ctx, i);
3217 dump_emacs_reloc_to_dump_ptr_raw (ctx, &charset_table, offset); 3221 dump_emacs_reloc_to_dump_ptr_raw (ctx, &charset_table, offset);
3218 ctx->flags = old_flags; 3222 ctx->flags = old_flags;