diff options
author | jianchunfu <jianchunfu@cmss.chinamobile.com> | 2022-03-29 10:49:54 +0800 |
---|---|---|
committer | Gabriel Krisman Bertazi <krisman@collabora.com> | 2022-04-28 18:19:09 -0400 |
commit | b500d6d7243d2e0807a39a09c52fbe668b59b2c1 (patch) | |
tree | 4f5c86c633e1344b534d2d2e3aa16f49afd2c2e6 | |
parent | af2d861d4cd2a4da5137f795ee3509e6f944a25b (diff) | |
download | linux-next-b500d6d7243d2e0807a39a09c52fbe668b59b2c1.tar.gz |
unicode: Handle memory allocation failures in mkutf8data
Adding and using a helper function "xmalloc()"
to handle memory allocation failures.
Signed-off-by: jianchunfu <jianchunfu@cmss.chinamobile.com>
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
-rw-r--r-- | fs/unicode/mkutf8data.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/fs/unicode/mkutf8data.c b/fs/unicode/mkutf8data.c index bc1a7c8b5c8d..baf1d7eda0a5 100644 --- a/fs/unicode/mkutf8data.c +++ b/fs/unicode/mkutf8data.c @@ -486,6 +486,16 @@ static void tree_walk(struct tree *tree) nodes, leaves, singletons); } +static void *xmalloc(size_t size) +{ + void *p = malloc(size); + + if (p) + return p; + fprintf(stderr, "Out of memory.\n"); + exit(1); +} + /* * Allocate an initialize a new internal node. */ @@ -494,7 +504,7 @@ static struct node *alloc_node(struct node *parent) struct node *node; int bitnum; - node = malloc(sizeof(*node)); + node = xmalloc(sizeof(*node)); node->left = node->right = NULL; node->parent = parent; node->leftnode = NODE; @@ -2159,7 +2169,7 @@ static void nfdi_init(void) } mapping[i++] = 0; - um = malloc(i * sizeof(unsigned int)); + um = xmalloc(i * sizeof(unsigned int)); memcpy(um, mapping, i * sizeof(unsigned int)); unicode_data[unichar].utf32nfdi = um; @@ -2215,7 +2225,7 @@ static void nfdicf_init(void) } mapping[i++] = 0; - um = malloc(i * sizeof(unsigned int)); + um = xmalloc(i * sizeof(unsigned int)); memcpy(um, mapping, i * sizeof(unsigned int)); unicode_data[unichar].utf32nfdicf = um; @@ -2256,11 +2266,11 @@ static void ignore_init(void) line_fail(prop_name, line); for (unichar = first; unichar <= last; unichar++) { free(unicode_data[unichar].utf32nfdi); - um = malloc(sizeof(unsigned int)); + um = xmalloc(sizeof(unsigned int)); *um = 0; unicode_data[unichar].utf32nfdi = um; free(unicode_data[unichar].utf32nfdicf); - um = malloc(sizeof(unsigned int)); + um = xmalloc(sizeof(unsigned int)); *um = 0; unicode_data[unichar].utf32nfdicf = um; count++; @@ -2277,11 +2287,11 @@ static void ignore_init(void) if (!utf32valid(unichar)) line_fail(prop_name, line); free(unicode_data[unichar].utf32nfdi); - um = malloc(sizeof(unsigned int)); + um = xmalloc(sizeof(unsigned int)); *um = 0; unicode_data[unichar].utf32nfdi = um; free(unicode_data[unichar].utf32nfdicf); - um = malloc(sizeof(unsigned int)); + um = xmalloc(sizeof(unsigned int)); *um = 0; unicode_data[unichar].utf32nfdicf = um; if (verbose > 1) @@ -2359,7 +2369,7 @@ static void corrections_init(void) } mapping[i++] = 0; - um = malloc(i * sizeof(unsigned int)); + um = xmalloc(i * sizeof(unsigned int)); memcpy(um, mapping, i * sizeof(unsigned int)); corrections[count].utf32nfdi = um; @@ -2459,12 +2469,12 @@ static void hangul_decompose(void) mapping[i++] = 0; assert(!unicode_data[unichar].utf32nfdi); - um = malloc(i * sizeof(unsigned int)); + um = xmalloc(i * sizeof(unsigned int)); memcpy(um, mapping, i * sizeof(unsigned int)); unicode_data[unichar].utf32nfdi = um; assert(!unicode_data[unichar].utf32nfdicf); - um = malloc(i * sizeof(unsigned int)); + um = xmalloc(i * sizeof(unsigned int)); memcpy(um, mapping, i * sizeof(unsigned int)); unicode_data[unichar].utf32nfdicf = um; @@ -2473,7 +2483,7 @@ static void hangul_decompose(void) * decompositions must not be stored in the generated * trie. */ - unicode_data[unichar].utf8nfdi = malloc(2); + unicode_data[unichar].utf8nfdi = xmalloc(2); unicode_data[unichar].utf8nfdi[0] = HANGUL; unicode_data[unichar].utf8nfdi[1] = '\0'; @@ -2523,13 +2533,13 @@ static void nfdi_decompose(void) if (ret) break; free(unicode_data[unichar].utf32nfdi); - um = malloc(i * sizeof(unsigned int)); + um = xmalloc(i * sizeof(unsigned int)); memcpy(um, mapping, i * sizeof(unsigned int)); unicode_data[unichar].utf32nfdi = um; } /* Add this decomposition to nfdicf if there is no entry. */ if (!unicode_data[unichar].utf32nfdicf) { - um = malloc(i * sizeof(unsigned int)); + um = xmalloc(i * sizeof(unsigned int)); memcpy(um, mapping, i * sizeof(unsigned int)); unicode_data[unichar].utf32nfdicf = um; } @@ -2577,7 +2587,7 @@ static void nfdicf_decompose(void) if (ret) break; free(unicode_data[unichar].utf32nfdicf); - um = malloc(i * sizeof(unsigned int)); + um = xmalloc(i * sizeof(unsigned int)); memcpy(um, mapping, i * sizeof(unsigned int)); unicode_data[unichar].utf32nfdicf = um; } |