7 |
* |
* |
8 |
* Licensed under the GPL v2 or later, see the file LICENSE in this tarball. |
* Licensed under the GPL v2 or later, see the file LICENSE in this tarball. |
9 |
*/ |
*/ |
|
|
|
10 |
#include "libbb.h" |
#include "libbb.h" |
|
|
|
|
/* For 2.6, use the cleaned up header to get the 64 bit API. */ |
|
11 |
#include <linux/version.h> |
#include <linux/version.h> |
12 |
|
|
13 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) |
14 |
#include <linux/loop.h> |
|
15 |
|
/* For 2.6, use the cleaned up header to get the 64 bit API. */ |
16 |
|
/* linux/loop.h relies on __u64. Make sure we have that as a proper type |
17 |
|
* until userspace is widely fixed. */ |
18 |
|
# if (defined __INTEL_COMPILER && !defined __GNUC__) \ |
19 |
|
|| (defined __GNUC__ && defined __STRICT_ANSI__) |
20 |
|
__extension__ typedef long long __s64; |
21 |
|
__extension__ typedef unsigned long long __u64; |
22 |
|
# endif |
23 |
|
# include <linux/loop.h> |
24 |
typedef struct loop_info64 bb_loop_info; |
typedef struct loop_info64 bb_loop_info; |
25 |
#define BB_LOOP_SET_STATUS LOOP_SET_STATUS64 |
# define BB_LOOP_SET_STATUS LOOP_SET_STATUS64 |
26 |
#define BB_LOOP_GET_STATUS LOOP_GET_STATUS64 |
# define BB_LOOP_GET_STATUS LOOP_GET_STATUS64 |
27 |
|
|
|
/* For 2.4 and earlier, use the 32 bit API (and don't trust the headers) */ |
|
28 |
#else |
#else |
29 |
/* Stuff stolen from linux/loop.h for 2.4 and earlier kernels*/ |
|
30 |
#include <linux/posix_types.h> |
/* For 2.4 and earlier, use the 32 bit API (and don't trust the headers) */ |
31 |
#define LO_NAME_SIZE 64 |
/* Stuff stolen from linux/loop.h for 2.4 and earlier kernels */ |
32 |
#define LO_KEY_SIZE 32 |
# include <linux/posix_types.h> |
33 |
#define LOOP_SET_FD 0x4C00 |
# define LO_NAME_SIZE 64 |
34 |
#define LOOP_CLR_FD 0x4C01 |
# define LO_KEY_SIZE 32 |
35 |
#define BB_LOOP_SET_STATUS 0x4C02 |
# define LOOP_SET_FD 0x4C00 |
36 |
#define BB_LOOP_GET_STATUS 0x4C03 |
# define LOOP_CLR_FD 0x4C01 |
37 |
|
# define BB_LOOP_SET_STATUS 0x4C02 |
38 |
|
# define BB_LOOP_GET_STATUS 0x4C03 |
39 |
typedef struct { |
typedef struct { |
40 |
int lo_number; |
int lo_number; |
41 |
__kernel_dev_t lo_device; |
__kernel_dev_t lo_device; |
68 |
return dev; |
return dev; |
69 |
} |
} |
70 |
|
|
|
|
|
71 |
int FAST_FUNC del_loop(const char *device) |
int FAST_FUNC del_loop(const char *device) |
72 |
{ |
{ |
73 |
int fd, rc; |
int fd, rc; |
105 |
} |
} |
106 |
|
|
107 |
/* Find a loop device. */ |
/* Find a loop device. */ |
108 |
try = *device ? : dev; |
try = *device ? *device : dev; |
109 |
for (i = 0; rc; i++) { |
for (i = 0; rc; i++) { |
110 |
sprintf(dev, LOOP_FORMAT, i); |
sprintf(dev, LOOP_FORMAT, i); |
111 |
|
|