diff -ruN util-linux-2.12.orig/mount/lomount.c util-linux-2.12/mount/lomount.c --- util-linux-2.12.orig/mount/lomount.c 2004-02-17 02:08:05.341716624 +0100 +++ util-linux-2.12/mount/lomount.c 2004-02-17 02:12:10.653423576 +0100 @@ -60,7 +60,8 @@ info->lo_flags = info64->lo_flags; info->lo_init[0] = info64->lo_init[0]; info->lo_init[1] = info64->lo_init[1]; - if (info->lo_encrypt_type == LO_CRYPT_CRYPTOAPI) + if ((info->lo_encrypt_type == LO_CRYPT_CRYPTOAPI) || + (info->lo_encrypt_type == LO_CRYPT_COMPRESS)) memcpy(info->lo_name, info64->lo_crypt_name, LO_NAME_SIZE); else memcpy(info->lo_name, info64->lo_file_name, LO_NAME_SIZE); @@ -321,7 +322,8 @@ int set_loop(const char *device, const char *file, int offset, - const char *encryption, int pfd, int *loopro) { + const char *encnumber,const char *encryption, + int pfd, int *loopro) { struct loop_info64 loopinfo64; int fd, ffd, mode; char *pass; @@ -344,8 +346,9 @@ memset(&loopinfo64, 0, sizeof(loopinfo64)); xstrncpy(loopinfo64.lo_file_name, file, LO_NAME_SIZE); - + if (encryption && *encryption) { + if (digits_only(encryption)) { loopinfo64.lo_encrypt_type = atoi(encryption); } else { @@ -386,6 +389,12 @@ } } + if (encnumber && *encnumber) { + + if (digits_only(encnumber)) + loopinfo64.lo_encrypt_type = atoi(encnumber); + } + loopinfo64.lo_offset = offset; #ifdef MCL_FUTURE @@ -601,7 +610,7 @@ int main(int argc, char **argv) { - char *offset, *encryption, *passfd; + char *offset, *encryption, *encnumber, *passfd; int delete, off, c; int res = 0; int ro = 0; @@ -612,7 +621,7 @@ textdomain(PACKAGE); delete = off = 0; - offset = encryption = passfd = NULL; + offset = encryption = encnumber = passfd = NULL; progname = argv[0]; while ((c = getopt(argc,argv,"de:E:o:p:v")) != -1) { switch (c) { @@ -620,6 +629,7 @@ delete = 1; break; case 'E': + encnumber = optarg; case 'e': encryption = optarg; break; @@ -651,7 +661,7 @@ if (passfd && sscanf(passfd,"%d",&pfd) != 1) usage(); res = set_loop(argv[optind], argv[optind+1], off, - encryption, pfd, &ro); + encnumber, encryption, pfd, &ro); } return res; } diff -ruN util-linux-2.12.orig/mount/lomount.h util-linux-2.12/mount/lomount.h --- util-linux-2.12.orig/mount/lomount.h 2004-02-17 02:08:05.339716928 +0100 +++ util-linux-2.12/mount/lomount.h 2004-02-17 02:08:14.921260312 +0100 @@ -1,6 +1,6 @@ extern int verbose; extern int set_loop(const char *, const char *, int, const char *, - int, int *); + const char *, int, int *); extern int del_loop(const char *); extern int is_loop_device(const char *); extern char * find_unused_loop_device(void); diff -ruN util-linux-2.12.orig/mount/loop.h util-linux-2.12/mount/loop.h --- util-linux-2.12.orig/mount/loop.h 2004-02-17 02:08:05.341716624 +0100 +++ util-linux-2.12/mount/loop.h 2004-02-17 02:08:14.922260160 +0100 @@ -2,6 +2,7 @@ #define LO_CRYPT_XOR 1 #define LO_CRYPT_DES 2 #define LO_CRYPT_CRYPTOAPI 18 +#define LO_CRYPT_COMPRESS 19 #define LOOP_SET_FD 0x4C00 #define LOOP_CLR_FD 0x4C01 diff -ruN util-linux-2.12.orig/mount/mount.c util-linux-2.12/mount/mount.c --- util-linux-2.12.orig/mount/mount.c 2004-02-17 02:08:05.281725744 +0100 +++ util-linux-2.12/mount/mount.c 2004-02-17 02:08:14.924259856 +0100 @@ -612,7 +612,7 @@ offset = opt_offset ? strtoul(opt_offset, NULL, 0) : 0; if (opt_keygen) pfd = use_keygen_prog(opt_keygen, keygen_args, _n_keygen_args); - if (set_loop(*loopdev, *loopfile, offset, + if (set_loop(*loopdev, *loopfile, offset, NULL, opt_encryption, pfd, &loopro)) { if (verbose) printf(_("mount: failed setting up loop device\n"));