patch generated by mg on Tue Apr 17 00:58:18 EET 2001

diff -u ./fs/isofs/inode.c.orig ./fs/isofs/inode.c
--- ./fs/isofs/inode.c.orig	Sun Mar 25 18:37:38 2001
+++ ./fs/isofs/inode.c	Tue Apr 17 00:57:39 2001
@@ -7,6 +7,12 @@
  *      1995  Mark Dobie - allow mounting of some weird VideoCDs and PhotoCDs.
  *	1997  Gordon Chaffee - Joliet CDs
  *	1998  Eric Lammerts - ISO 9660 Level 3
+ *      1999  Marius Gedminas - `noexec' and `lowercase' mount flags
+ *
+ *  1999-06-14   Hack by Marius Gedminas <mgedmin@delfi.lt>:
+ *  If `noexec' was given to mount, remove execute permissions from files.
+ *  New mount flag `lowercase' converts all-uppercase Joliet file names to 
+ *  lower case.
  */
 
 #include <linux/config.h>
@@ -129,6 +135,7 @@
 	uid_t uid;
 	char *iocharset;
 	unsigned char utf8;
+	unsigned char lowercase;
 };
 
 /*
@@ -297,6 +304,7 @@
 	popt->uid = 0;
 	popt->iocharset = NULL;
 	popt->utf8 = 0;
+	popt->lowercase = 0;
 	if (!options) return 1;
 	for (this_char = strtok(options,","); this_char; this_char = strtok(NULL,",")) {
 	        if (strncmp(this_char,"norock",6) == 0) {
@@ -323,6 +331,10 @@
 			*value++ = 0;
 
 #ifdef CONFIG_JOLIET
+	        if (strncmp(this_char,"lowercase",9) == 0) {
+		  popt->lowercase = 1;
+		  continue;
+		}
 		if (!strcmp(this_char,"iocharset") && value) {
 			popt->iocharset = value;
 			while (*value && *value != ',')
@@ -775,6 +787,7 @@
 	s->u.isofs_sb.s_uid = opt.uid;
 	s->u.isofs_sb.s_gid = opt.gid;
 	s->u.isofs_sb.s_utf8 = opt.utf8;
+	s->u.isofs_sb.s_lowercase = opt.lowercase;
 	/*
 	 * It would be incredibly stupid to allow people to mark every file
 	 * on the disk as suid, so we merely allow them to set the default
@@ -1142,14 +1155,21 @@
 		inode->i_mode = inode->i_sb->u.isofs_sb.s_mode;
 		inode->i_nlink = 1;
 	        inode->i_mode |= S_IFREG;
-		/* If there are no periods in the name,
-		 * then set the execute permission bit
-		 */
-		for(i=0; i< de->name_len[0]; i++)
-			if(de->name[i]=='.' || de->name[i]==';')
-				break;
-		if(i == de->name_len[0] || de->name[i] == ';')
-			inode->i_mode |= S_IXUGO; /* execute permission */
+		if (IS_NOEXEC(inode)) {
+			/* If "noexec" was given to mount, remove
+			 * execute permission bit (for regular files).
+			 */
+			inode->i_mode &= ~S_IXUGO; /* execute permission */
+		} else {
+			/* If there are no periods in the name,
+			 * then set the execute permission bit
+			 */
+			for(i=0; i< de->name_len[0]; i++)
+				if(de->name[i]=='.' || de->name[i]==';')
+					break;
+			if(i == de->name_len[0] || de->name[i] == ';')
+				inode->i_mode |= S_IXUGO; /* execute permission */
+		}
 	}
 	inode->i_uid = inode->i_sb->u.isofs_sb.s_uid;
 	inode->i_gid = inode->i_sb->u.isofs_sb.s_gid;

diff -u ./fs/isofs/joliet.c.orig ./fs/isofs/joliet.c
--- ./fs/isofs/joliet.c.orig	Sun Mar 25 18:37:38 2001
+++ ./fs/isofs/joliet.c	Tue Apr 17 00:51:05 2001
@@ -4,6 +4,10 @@
  *  (C) 1996 Gordon Chaffee
  *
  *  Joliet: Microsoft's Unicode extensions to iso9660
+ *
+ *  1999-06-14   Hack by Marius Gedminas <mgedmin@delfi.lt>:
+ *  New mount flag `lowercase' converts all-uppercase Joliet file names to 
+ *  lower case.
  */
 
 #include <linux/string.h>
@@ -70,10 +74,12 @@
 		    struct inode * inode)
 {
 	unsigned char utf8;
+	unsigned char lowercase;
 	struct nls_table *nls;
-	unsigned char len = 0;
+	unsigned char len = 0, tmp;
 
 	utf8 = inode->i_sb->u.isofs_sb.s_utf8;
+	lowercase = inode->i_sb->u.isofs_sb.s_lowercase;
 	nls = inode->i_sb->u.isofs_sb.s_nls_iocharset;
 
 	if (utf8) {
@@ -93,6 +99,26 @@
 	 */
 	while (len >= 2 && (outname[len-1] == '.')) {
 		len--;
+	}
+	
+	/*
+	 * Hack by Marius Gedminas <mgedmin@delfi.lt>:
+	 * Convert all-uppercase file names to lowercase
+	 */
+	if (lowercase) {
+		tmp = len; 
+		while (tmp && !(outname[tmp-1] >= 'a' && outname[tmp-1] <= 'z')) {
+			tmp--;
+		}
+	
+		if (tmp == 0) {
+			/* No lowercase letters are present */
+    			for (tmp = len; tmp--; ) {
+				if (outname[tmp] >= 'A' && outname[tmp] <= 'Z') {
+					outname[tmp] |= 0x20;	/* lower case */
+				}
+			}
+		}
 	}
 
 	return len;

diff -u ./include/linux/iso_fs_sb.h.orig ./include/linux/iso_fs_sb.h
--- ./include/linux/iso_fs_sb.h.orig	Tue Apr 17 00:49:54 2001
+++ ./include/linux/iso_fs_sb.h	Tue Apr 17 00:49:56 2001
@@ -16,6 +16,7 @@
 	unsigned char s_rock;
 	unsigned char s_joliet_level;
 	unsigned char s_utf8;
+	unsigned char s_lowercase;
 	unsigned char s_cruft; /* Broken disks with high
 				  byte of length containing
 				  junk */

