summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/lomount.c
diff options
context:
space:
mode:
authorGuillaume Cottenceau <gc@mandriva.com>2003-12-01 14:30:44 +0000
committerGuillaume Cottenceau <gc@mandriva.com>2003-12-01 14:30:44 +0000
commit47e5007b5b0ff70ff2397791613e461debe2548b (patch)
tree89a97ec24e4424f5fd81902d5c0a3046676c108c /mdk-stage1/lomount.c
parentaec152269c3f82497801d80de563b41f32c6b930 (diff)
downloaddrakx-47e5007b5b0ff70ff2397791613e461debe2548b.tar
drakx-47e5007b5b0ff70ff2397791613e461debe2548b.tar.gz
drakx-47e5007b5b0ff70ff2397791613e461debe2548b.tar.bz2
drakx-47e5007b5b0ff70ff2397791613e461debe2548b.tar.xz
drakx-47e5007b5b0ff70ff2397791613e461debe2548b.zip
we need loop-aes for mountloop, so we use change_loop with a special device number
Diffstat (limited to 'mdk-stage1/lomount.c')
-rw-r--r--mdk-stage1/lomount.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/mdk-stage1/lomount.c b/mdk-stage1/lomount.c
index 791db0d0f..25f72c345 100644
--- a/mdk-stage1/lomount.c
+++ b/mdk-stage1/lomount.c
@@ -115,24 +115,26 @@ set_loop (const char *device, const char *file, int gz)
}
-char* find_free_loop(void)
+char* find_free_loop(int chloop)
{
char loopdev[] = "/dev/loop0";
+ char chloopdev[] = "/dev/chloop0";
+ char * ldev = chloop ? chloopdev : loopdev;
struct loop_info loopinfo;
int i;
for (i=0; i<8; i++) {
int fd;
- loopdev[9] = '0' + i;
- ensure_dev_exists(loopdev);
- fd = open(loopdev, O_RDONLY);
+ ldev[strlen(ldev)-1] = '0' + i;
+ ensure_dev_exists(ldev);
+ fd = open(ldev, O_RDONLY);
if (!ioctl(fd, LOOP_GET_STATUS, &loopinfo)) {
close(fd);
continue;
}
if (errno == ENXIO) {
- log_message("%s is available", loopdev);
+ log_message("%s is available", ldev);
close(fd);
- return strdup(loopdev);
+ return strdup(ldev);
} else {
log_perror("LOOP_GET_STATUS(unexpected error)");
close(fd);
@@ -165,17 +167,19 @@ lomount(char *loopfile, char *where, char **dev, int gz)
long int flag;
char * loopdev;
+ int chloop = 0;
flag = MS_MGC_VAL;
flag |= MS_RDONLY;
#ifdef MANDRAKE_MOVE
my_insmod("change_loop", ANY_DRIVER_TYPE, NULL);
+ chloop = 1;
#else
my_insmod("loop", ANY_DRIVER_TYPE, NULL);
#endif
- if (!(loopdev = find_free_loop())) {
+ if (!(loopdev = find_free_loop(chloop))) {
log_message("could not find a free loop");
return 1;
}