summaryrefslogtreecommitdiff
path: root/locale/programs/locfile.c
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2013-09-24 22:07:47 +0000
committerJoseph Myers <joseph@codesourcery.com>2013-09-24 22:07:47 +0000
commit6055173a0f2733ea4fc2825afd295156143fca79 (patch)
tree11dac563ce23c6e0e95d2146dfaef2a1a7faa459 /locale/programs/locfile.c
parent39bf0bb44c07ab2cae5b813fc7c196abfdf411b3 (diff)
Add localedef --big-endian and --little-endian options.
Diffstat (limited to 'locale/programs/locfile.c')
-rw-r--r--locale/programs/locfile.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/locale/programs/locfile.c b/locale/programs/locfile.c
index cb53bbc406..4969391bf5 100644
--- a/locale/programs/locfile.c
+++ b/locale/programs/locfile.c
@@ -22,6 +22,7 @@
#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
+#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
@@ -538,6 +539,10 @@ compare_files (const char *filename1, const char *filename2, size_t size,
return ret;
}
+/* True if the locale files use the opposite endianness to the
+ machine running localedef. */
+bool swap_endianness_p;
+
/* When called outside a start_locale_structure/end_locale_structure
or start_locale_prelude/end_locale_prelude block, record that the
next byte in FILE's obstack will be the first byte of a new element.
@@ -624,6 +629,7 @@ add_locale_uint32 (struct locale_file *file, uint32_t value)
{
align_locale_data (file, sizeof (uint32_t));
record_offset (file);
+ value = maybe_swap_uint32 (value);
obstack_grow (&file->data, &value, sizeof (value));
}
@@ -636,6 +642,7 @@ add_locale_uint32_array (struct locale_file *file,
align_locale_data (file, sizeof (uint32_t));
record_offset (file);
obstack_grow (&file->data, data, n_elems * sizeof (uint32_t));
+ maybe_swap_uint32_obstack (&file->data, n_elems);
}
/* Record that FILE's next element is the single byte given by VALUE. */
@@ -708,6 +715,8 @@ write_locale_data (const char *output_path, int catidx, const char *category,
vec[1].iov_base = file->offsets;
vec[2].iov_len = obstack_object_size (&file->data);
vec[2].iov_base = obstack_finish (&file->data);
+ maybe_swap_uint32_array (vec[0].iov_base, 2);
+ maybe_swap_uint32_array (vec[1].iov_base, file->n_elements);
n_elem = 3;
if (! no_archive)
{