--- trunk/mkinitrd-magellan/busybox/libbb/loop.c 2010/04/29 20:38:48 983 +++ trunk/mkinitrd-magellan/busybox/libbb/loop.c 2010/05/30 11:32:42 984 @@ -7,27 +7,35 @@ * * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. */ - #include "libbb.h" - -/* For 2.6, use the cleaned up header to get the 64 bit API. */ #include + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) -#include + +/* For 2.6, use the cleaned up header to get the 64 bit API. */ +/* linux/loop.h relies on __u64. Make sure we have that as a proper type + * until userspace is widely fixed. */ +# if (defined __INTEL_COMPILER && !defined __GNUC__) \ + || (defined __GNUC__ && defined __STRICT_ANSI__) +__extension__ typedef long long __s64; +__extension__ typedef unsigned long long __u64; +# endif +# include typedef struct loop_info64 bb_loop_info; -#define BB_LOOP_SET_STATUS LOOP_SET_STATUS64 -#define BB_LOOP_GET_STATUS LOOP_GET_STATUS64 +# define BB_LOOP_SET_STATUS LOOP_SET_STATUS64 +# define BB_LOOP_GET_STATUS LOOP_GET_STATUS64 -/* For 2.4 and earlier, use the 32 bit API (and don't trust the headers) */ #else -/* Stuff stolen from linux/loop.h for 2.4 and earlier kernels*/ -#include -#define LO_NAME_SIZE 64 -#define LO_KEY_SIZE 32 -#define LOOP_SET_FD 0x4C00 -#define LOOP_CLR_FD 0x4C01 -#define BB_LOOP_SET_STATUS 0x4C02 -#define BB_LOOP_GET_STATUS 0x4C03 + +/* For 2.4 and earlier, use the 32 bit API (and don't trust the headers) */ +/* Stuff stolen from linux/loop.h for 2.4 and earlier kernels */ +# include +# define LO_NAME_SIZE 64 +# define LO_KEY_SIZE 32 +# define LOOP_SET_FD 0x4C00 +# define LOOP_CLR_FD 0x4C01 +# define BB_LOOP_SET_STATUS 0x4C02 +# define BB_LOOP_GET_STATUS 0x4C03 typedef struct { int lo_number; __kernel_dev_t lo_device; @@ -60,7 +68,6 @@ return dev; } - int FAST_FUNC del_loop(const char *device) { int fd, rc; @@ -98,7 +105,7 @@ } /* Find a loop device. */ - try = *device ? : dev; + try = *device ? *device : dev; for (i = 0; rc; i++) { sprintf(dev, LOOP_FORMAT, i);