diff options
Diffstat (limited to 'mdk-stage1/lomount.c')
-rw-r--r-- | mdk-stage1/lomount.c | 166 |
1 files changed, 83 insertions, 83 deletions
diff --git a/mdk-stage1/lomount.c b/mdk-stage1/lomount.c index 74a409e0b..b7d61f24b 100644 --- a/mdk-stage1/lomount.c +++ b/mdk-stage1/lomount.c @@ -35,90 +35,90 @@ #include "lomount.h" -#define LO_NAME_SIZE 64 -#define LO_KEY_SIZE 32 +#define LO_NAME_SIZE 64 +#define LO_KEY_SIZE 32 struct loop_info { - int lo_number; /* ioctl r/o */ - dev_t lo_device; /* ioctl r/o */ - unsigned long lo_inode; /* ioctl r/o */ - dev_t lo_rdevice; /* ioctl r/o */ - int lo_offset; - int lo_encrypt_type; - int lo_encrypt_key_size; /* ioctl w/o */ - int lo_flags; /* ioctl r/o */ - char lo_name[LO_NAME_SIZE]; - unsigned char lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */ - unsigned long lo_init[2]; - char reserved[4]; + int lo_number; /* ioctl r/o */ + dev_t lo_device; /* ioctl r/o */ + unsigned long lo_inode; /* ioctl r/o */ + dev_t lo_rdevice; /* ioctl r/o */ + int lo_offset; + int lo_encrypt_type; + int lo_encrypt_key_size; /* ioctl w/o */ + int lo_flags; /* ioctl r/o */ + char lo_name[LO_NAME_SIZE]; + unsigned char lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */ + unsigned long lo_init[2]; + char reserved[4]; }; -#define LOOP_SET_FD 0x4C00 -#define LOOP_CLR_FD 0x4C01 -#define LOOP_SET_STATUS 0x4C02 -#define LOOP_GET_STATUS 0x4C03 +#define LOOP_SET_FD 0x4C00 +#define LOOP_CLR_FD 0x4C01 +#define LOOP_SET_STATUS 0x4C02 +#define LOOP_GET_STATUS 0x4C03 int set_loop (const char *device, const char *file) { - struct loop_info loopinfo; - int fd, ffd, mode; + struct loop_info loopinfo; + int fd, ffd, mode; - mode = O_RDONLY; + mode = O_RDONLY; - if ((ffd = open (file, mode)) < 0) - return 1; + if ((ffd = open (file, mode)) < 0) + return 1; - if ((fd = open (device, mode)) < 0) { - close(ffd); - return 1; - } + if ((fd = open (device, mode)) < 0) { + close(ffd); + return 1; + } - memset(&loopinfo, 0, sizeof (loopinfo)); - strncpy(loopinfo.lo_name, file, LO_NAME_SIZE); - loopinfo.lo_name[LO_NAME_SIZE - 1] = 0; - loopinfo.lo_offset = 0; + memset(&loopinfo, 0, sizeof (loopinfo)); + strncpy(loopinfo.lo_name, file, LO_NAME_SIZE); + loopinfo.lo_name[LO_NAME_SIZE - 1] = 0; + loopinfo.lo_offset = 0; #ifdef MCL_FUTURE - /* - * Oh-oh, sensitive data coming up. Better lock into memory to prevent - * passwd etc being swapped out and left somewhere on disk. - */ + /* + * Oh-oh, sensitive data coming up. Better lock into memory to prevent + * passwd etc being swapped out and left somewhere on disk. + */ - if(mlockall(MCL_CURRENT|MCL_FUTURE)) { - log_message("CRITICAL Couldn't lock into memory! %s (memlock)", strerror(errno)); - return 1; - } + if(mlockall(MCL_CURRENT|MCL_FUTURE)) { + log_message("CRITICAL Couldn't lock into memory! %s (memlock)", strerror(errno)); + return 1; + } #endif - if (ioctl(fd, LOOP_SET_FD, ffd) < 0) { - close(fd); - close(ffd); - return 1; - } - - if (ioctl(fd, LOOP_SET_STATUS, &loopinfo) < 0) { - (void) ioctl (fd, LOOP_CLR_FD, 0); - close(fd); - close(ffd); - return 1; - } - - close(fd); - close(ffd); - return 0; + if (ioctl(fd, LOOP_SET_FD, ffd) < 0) { + close(fd); + close(ffd); + return 1; + } + + if (ioctl(fd, LOOP_SET_STATUS, &loopinfo) < 0) { + (void) ioctl (fd, LOOP_CLR_FD, 0); + close(fd); + close(ffd); + return 1; + } + + close(fd); + close(ffd); + return 0; } char* find_free_loop() { - struct loop_info loopinfo; + struct loop_info loopinfo; int i; for (i=0; i<256; i++) { int fd; - char ldev[100]; - sprintf(ldev, "/dev/loop%d", i); + char ldev[100]; + sprintf(ldev, "/dev/loop%d", i); ensure_dev_exists(ldev); fd = open(ldev, O_RDONLY); if (!ioctl(fd, LOOP_GET_STATUS, &loopinfo)) { @@ -141,54 +141,54 @@ char* find_free_loop() void del_loop(char * loopdev) { - int fd; + int fd; if (!loopdev) return; - if ((fd = open (loopdev, O_RDONLY)) < 0) - return; + if ((fd = open (loopdev, O_RDONLY)) < 0) + return; - if (ioctl (fd, LOOP_CLR_FD, 0) < 0) - return; + if (ioctl (fd, LOOP_CLR_FD, 0) < 0) + return; - close (fd); + close (fd); } int lomount(char *loopfile, char *where, char **dev, int compressed) { - long int flag; + long int flag; char * loopdev; - flag = MS_MGC_VAL; - flag |= MS_RDONLY; + flag = MS_MGC_VAL; + flag |= MS_RDONLY; - my_insmod("loop", ANY_DRIVER_TYPE, "max_loop=256", 1); - if (compressed) { - my_insmod("squashfs", ANY_DRIVER_TYPE, NULL, 1); - } + my_insmod("loop", ANY_DRIVER_TYPE, "max_loop=256", 1); + if (compressed) { + my_insmod("squashfs", ANY_DRIVER_TYPE, NULL, 1); + } if (!(loopdev = find_free_loop())) { - log_message("could not find a free loop"); - return 1; + log_message("could not find a free loop"); + return 1; } if (dev) *dev = loopdev; - if (set_loop(loopdev, loopfile)) { - log_message("set_loop failed on %s (%s)", loopdev, strerror(errno)); - return 1; - } + if (set_loop(loopdev, loopfile)) { + log_message("set_loop failed on %s (%s)", loopdev, strerror(errno)); + return 1; + } - if (my_mount(loopdev, where, compressed ? "squashfs" : "iso9660", 0)) { - del_loop(loopdev); - return 1; - } + if (my_mount(loopdev, where, compressed ? "squashfs" : "iso9660", 0)) { + del_loop(loopdev); + return 1; + } - log_message("lomount succeeded for %s on %s", loopfile, where); - return 0; + log_message("lomount succeeded for %s on %s", loopfile, where); + return 0; } |