diff options
Diffstat (limited to 'arch/um/drivers/cow_user.c')
| -rw-r--r-- | arch/um/drivers/cow_user.c | 43 | 
1 files changed, 21 insertions, 22 deletions
diff --git a/arch/um/drivers/cow_user.c b/arch/um/drivers/cow_user.c index 9cbb426c0b9..0ee9cc6cc4c 100644 --- a/arch/um/drivers/cow_user.c +++ b/arch/um/drivers/cow_user.c @@ -8,11 +8,10 @@   * that.   */  #include <unistd.h> -#include <byteswap.h>  #include <errno.h>  #include <string.h>  #include <arpa/inet.h> -#include <asm/types.h> +#include <endian.h>  #include "cow.h"  #include "cow_sys.h" @@ -214,8 +213,8 @@ int write_cow_header(char *cow_file, int fd, char *backing_file,  			   "header\n");  		goto out;  	} -	header->magic = htonl(COW_MAGIC); -	header->version = htonl(COW_VERSION); +	header->magic = htobe32(COW_MAGIC); +	header->version = htobe32(COW_VERSION);  	err = -EINVAL;  	if (strlen(backing_file) > sizeof(header->backing_file) - 1) { @@ -246,10 +245,10 @@ int write_cow_header(char *cow_file, int fd, char *backing_file,  		goto out_free;  	} -	header->mtime = htonl(modtime); -	header->size = htonll(*size); -	header->sectorsize = htonl(sectorsize); -	header->alignment = htonl(alignment); +	header->mtime = htobe32(modtime); +	header->size = htobe64(*size); +	header->sectorsize = htobe32(sectorsize); +	header->alignment = htobe32(alignment);  	header->cow_format = COW_BITMAP;  	err = cow_write_file(fd, header, sizeof(*header)); @@ -301,8 +300,8 @@ int read_cow_header(int (*reader)(__u64, char *, int, void *), void *arg,  	magic = header->v1.magic;  	if (magic == COW_MAGIC)  		version = header->v1.version; -	else if (magic == ntohl(COW_MAGIC)) -		version = ntohl(header->v1.version); +	else if (magic == be32toh(COW_MAGIC)) +		version = be32toh(header->v1.version);  	/* No error printed because the non-COW case comes through here */  	else goto out; @@ -327,9 +326,9 @@ int read_cow_header(int (*reader)(__u64, char *, int, void *), void *arg,  				   "header\n");  			goto out;  		} -		*mtime_out = ntohl(header->v2.mtime); -		*size_out = ntohll(header->v2.size); -		*sectorsize_out = ntohl(header->v2.sectorsize); +		*mtime_out = be32toh(header->v2.mtime); +		*size_out = be64toh(header->v2.size); +		*sectorsize_out = be32toh(header->v2.sectorsize);  		*bitmap_offset_out = sizeof(header->v2);  		*align_out = *sectorsize_out;  		file = header->v2.backing_file; @@ -341,10 +340,10 @@ int read_cow_header(int (*reader)(__u64, char *, int, void *), void *arg,  				   "header\n");  			goto out;  		} -		*mtime_out = ntohl(header->v3.mtime); -		*size_out = ntohll(header->v3.size); -		*sectorsize_out = ntohl(header->v3.sectorsize); -		*align_out = ntohl(header->v3.alignment); +		*mtime_out = be32toh(header->v3.mtime); +		*size_out = be64toh(header->v3.size); +		*sectorsize_out = be32toh(header->v3.sectorsize); +		*align_out = be32toh(header->v3.alignment);  		if (*align_out == 0) {  			cow_printf("read_cow_header - invalid COW header, "  				   "align == 0\n"); @@ -366,16 +365,16 @@ int read_cow_header(int (*reader)(__u64, char *, int, void *), void *arg,  		 * this was used until Dec2005 - 64bits are needed to represent  		 * 2038+. I.e. we can safely do this truncating cast.  		 * -		 * Additionally, we must use ntohl() instead of ntohll(), since +		 * Additionally, we must use be32toh() instead of be64toh(), since  		 * the program used to use the former (tested - I got mtime  		 * mismatch "0 vs whatever").  		 *  		 * Ever heard about bug-to-bug-compatibility ? ;-) */ -		*mtime_out = (time32_t) ntohl(header->v3_b.mtime); +		*mtime_out = (time32_t) be32toh(header->v3_b.mtime); -		*size_out = ntohll(header->v3_b.size); -		*sectorsize_out = ntohl(header->v3_b.sectorsize); -		*align_out = ntohl(header->v3_b.alignment); +		*size_out = be64toh(header->v3_b.size); +		*sectorsize_out = be32toh(header->v3_b.sectorsize); +		*align_out = be32toh(header->v3_b.alignment);  		if (*align_out == 0) {  			cow_printf("read_cow_header - invalid COW header, "  				   "align == 0\n");  |