summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/lomount.c
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1/lomount.c')
-rw-r--r--mdk-stage1/lomount.c39
1 files changed, 15 insertions, 24 deletions
diff --git a/mdk-stage1/lomount.c b/mdk-stage1/lomount.c
index 25f72c345..caca48ea1 100644
--- a/mdk-stage1/lomount.c
+++ b/mdk-stage1/lomount.c
@@ -1,7 +1,7 @@
/*
- * Guillaume Cottenceau (gc@mandrakesoft.com)
+ * Guillaume Cottenceau (gc)
*
- * Copyright 2000 MandrakeSoft
+ * Copyright 2000 Mandriva
*
* This software may be freely redistributed under the terms of the GNU
* public license.
@@ -60,7 +60,7 @@ struct loop_info
#define LOOP_GET_STATUS 0x4C03
int
-set_loop (const char *device, const char *file, int gz)
+set_loop (const char *device, const char *file)
{
struct loop_info loopinfo;
int fd, ffd, mode;
@@ -79,10 +79,6 @@ set_loop (const char *device, const char *file, int gz)
strncpy(loopinfo.lo_name, file, LO_NAME_SIZE);
loopinfo.lo_name[LO_NAME_SIZE - 1] = 0;
loopinfo.lo_offset = 0;
- if (gz) {
- my_insmod("gzloop", ANY_DRIVER_TYPE, NULL);
- loopinfo.lo_encrypt_type = 13; /* LO_CRYPT_GZ */
- }
#ifdef MCL_FUTURE
/*
@@ -115,16 +111,14 @@ set_loop (const char *device, const char *file, int gz)
}
-char* find_free_loop(int chloop)
+char* find_free_loop()
{
- 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++) {
+ for (i=0; i<256; i++) {
int fd;
- ldev[strlen(ldev)-1] = '0' + 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)) {
@@ -162,36 +156,33 @@ del_loop(char * loopdev)
}
int
-lomount(char *loopfile, char *where, char **dev, int gz)
+lomount(char *loopfile, char *where, char **dev, int compressed)
{
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
+ my_modprobe("loop", ANY_DRIVER_TYPE, "max_loop=256");
+ if (compressed) {
+ my_modprobe("squashfs", ANY_DRIVER_TYPE, NULL);
+ }
- if (!(loopdev = find_free_loop(chloop))) {
+ if (!(loopdev = find_free_loop())) {
log_message("could not find a free loop");
return 1;
}
if (dev)
*dev = loopdev;
- if (set_loop(loopdev, loopfile, gz)) {
+ if (set_loop(loopdev, loopfile)) {
log_message("set_loop failed on %s (%s)", loopdev, strerror(errno));
return 1;
}
- if (my_mount(loopdev, where, "iso9660", 0)) {
+ if (my_mount(loopdev, where, compressed ? "squashfs" : "iso9660", 0)) {
del_loop(loopdev);
return 1;
}