Teach cramfs to handle byteswapping sanely. I want to specify

big endian or little endian, not whether to unconditionally do
byteswapping regardless of build system byte order.
This commit is contained in:
Eric Andersen 2005-05-06 00:17:04 +00:00
parent 42f7febfb8
commit 1515bfd3bb
2 changed files with 21 additions and 11 deletions

View File

@ -8,11 +8,12 @@
static int warn_dev, warn_gid, warn_namelen, warn_skip, warn_size, warn_uid; static int warn_dev, warn_gid, warn_namelen, warn_skip, warn_size, warn_uid;
static const char *const memory_exhausted = "memory exhausted"; static const char *const memory_exhausted = "memory exhausted";
@@ -155,6 +156,7 @@ @@ -155,6 +156,8 @@
" -i file insert a file image into the filesystem (requires >= 2.4.0)\n" " -i file insert a file image into the filesystem (requires >= 2.4.0)\n"
" -n name set name of cramfs filesystem\n" " -n name set name of cramfs filesystem\n"
" -p pad by %d bytes for boot code\n" " -p pad by %d bytes for boot code\n"
+ " -r reverse endian-ness of filesystem\n" + " -l litte endian filesystem\n"
+ " -b big endian filesystem\n"
" -s sort directory entries (old option, ignored)\n" " -s sort directory entries (old option, ignored)\n"
" -v be more verbose\n" " -v be more verbose\n"
" -z make explicit holes (requires >= 2.3.39)\n" " -z make explicit holes (requires >= 2.3.39)\n"
@ -108,17 +109,25 @@
/* command line options */ /* command line options */
- while ((c = getopt(argc, argv, "hEe:i:n:psvzD:q")) != EOF) { - while ((c = getopt(argc, argv, "hEe:i:n:psvzD:q")) != EOF) {
+ while ((c = getopt(argc, argv, "hEe:i:n:prsvzD:q")) != EOF) { + while ((c = getopt(argc, argv, "hEe:i:n:psvzD:qlb")) != EOF) {
switch (c) { switch (c) {
case 'h': case 'h':
usage(MKFS_OK); usage(MKFS_OK);
@@ -1174,6 +1226,10 @@ @@ -1174,6 +1227,18 @@
opt_pad = PAD_SIZE; opt_pad = PAD_SIZE;
fslen_ub += PAD_SIZE; fslen_ub += PAD_SIZE;
break; break;
+ case 'r': + case 'b':
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ swap_endian = 1; + swap_endian = 1;
+ printf("Swapping filesystem endian-ness\n"); + printf("Swapping filesystem endian-ness\n");
+#endif
+ break;
+ case 'l':
+#if __BYTE_ORDER == __BIG_ENDIAN
+ swap_endian = 1;
+ printf("Swapping filesystem endian-ness\n");
+#endif
+ break; + break;
case 's': case 's':
/* old option, ignored */ /* old option, ignored */

View File

@ -33,23 +33,24 @@ cramfs-dirclean:
# Build the cramfs root filesystem image # Build the cramfs root filesystem image
# #
############################################################# #############################################################
CRAMFS_ENDIANNESS=-l
ifeq ($(strip $(BR2_armeb)),y) ifeq ($(strip $(BR2_armeb)),y)
CRAMFS_ENDIANNESS=-r CRAMFS_ENDIANNESS=-b
endif endif
ifeq ($(strip $(BR2_mips)),y) ifeq ($(strip $(BR2_mips)),y)
CRAMFS_ENDIANNESS=-r CRAMFS_ENDIANNESS=-b
endif endif
ifeq ($(strip $(BR2_powerpc)),y) ifeq ($(strip $(BR2_powerpc)),y)
CRAMFS_ENDIANNESS=-r CRAMFS_ENDIANNESS=-b
endif endif
ifeq ($(strip $(BR2_sh3eb)),y) ifeq ($(strip $(BR2_sh3eb)),y)
CRAMFS_ENDIANNESS=-r CRAMFS_ENDIANNESS=-b
endif endif
ifeq ($(strip $(BR2_sh4eb)),y) ifeq ($(strip $(BR2_sh4eb)),y)
CRAMFS_ENDIANNESS=-r CRAMFS_ENDIANNESS=-b
endif endif
ifeq ($(strip $(BR2_sparc)),y) ifeq ($(strip $(BR2_sparc)),y)
CRAMFS_ENDIANNESS=-r CRAMFS_ENDIANNESS=-b
endif endif
cramfsroot: cramfs cramfsroot: cramfs