diff options
author | Guillaume Cottenceau <gc@mandriva.com> | 2003-12-01 14:30:44 +0000 |
---|---|---|
committer | Guillaume Cottenceau <gc@mandriva.com> | 2003-12-01 14:30:44 +0000 |
commit | 47e5007b5b0ff70ff2397791613e461debe2548b (patch) | |
tree | 89a97ec24e4424f5fd81902d5c0a3046676c108c /mdk-stage1/lomount.c | |
parent | aec152269c3f82497801d80de563b41f32c6b930 (diff) | |
download | drakx-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.c | 18 |
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; } |