public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "H. Peter Anvin" <hpa@transmeta.com>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>,
	Linus Torvalds <torvalds@transmeta.com>,
	Andries Brouwer <Andries.Brouwer@cwi.nl>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: iso9660 endianness cleanup patch
Date: Mon, 30 Apr 2001 22:30:47 -0700	[thread overview]
Message-ID: <3AEE4A06.3666F4BE@transmeta.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 391 bytes --]

Hi guys,

I was looking over the iso9660 code, and noticed that it was doing
endianness conversion via ad hoc *functions*, not even inlines; nor did
it take any advantage of the fact that iso9660 is bi-endian (has "all"
data in both bigendian and littleendian format.)

The attached patch fixes both.  It is against 2.4.4, but from the looks
of it it should patch against -ac as well.

	-hpa

[-- Attachment #2: isofs-2.4.4-1.diff --]
[-- Type: text/plain, Size: 3152 bytes --]

--- linux-2.4.4/include/linux/iso_fs.h	Fri Apr 27 15:48:20 2001
+++ linux-2.4.4-ciso/include/linux/iso_fs.h	Mon Apr 30 20:09:31 2001
@@ -165,14 +165,51 @@
 #define ISOFS_SUPER_MAGIC 0x9660
 
 #ifdef __KERNEL__
-extern int isonum_711(char *);
-extern int isonum_712(char *);
-extern int isonum_721(char *);
-extern int isonum_722(char *);
-extern int isonum_723(char *);
-extern int isonum_731(char *);
-extern int isonum_732(char *);
-extern int isonum_733(char *);
+/* Number conversion inlines, named after the section in ISO 9660
+   they correspond to. */
+
+#include <asm/byteorder.h>
+
+extern inline int isonum_711(char *p)
+{
+	return *(u8 *)p;
+}
+extern inline int isonum_712(char *p)
+{
+	return *(s8 *)p;
+}
+extern inline int isonum_721(char *p)
+{
+	return le16_to_cpu(*(u16 *)p);
+}
+extern inline int isonum_722(char *p)
+{
+	return be16_to_cpu(*(u16 *)p);
+}
+extern inline int isonum_723(char *p)
+{
+#ifdef __BIG_ENDIAN
+	return be16_to_cpu(*(u16 *)(p+2));
+#else
+	return le16_to_cpu(*(u16 *)p);
+#endif
+}
+extern inline int isonum_731(char *p)
+{
+	return le32_to_cpu(*(u32 *)p);
+}
+extern inline int isonum_732(char *p)
+{
+	return be32_to_cpu(*(u32 *)p);
+}
+extern inline int isonum_733(char *p)
+{
+#ifdef __BIG_ENDIAN
+	return be32_to_cpu(*(u32 *)(p+4));
+#else
+	return le32_to_cpu(*(u32 *)p);
+#endif
+}
 extern int iso_date(char *, int);
 
 extern int parse_rock_ridge_inode(struct iso_directory_record *, struct inode *);
--- linux-2.4.4/fs/isofs/util.c	Wed Nov 29 10:11:38 2000
+++ linux-2.4.4-ciso/fs/isofs/util.c	Mon Apr 30 20:04:24 2001
@@ -1,90 +1,9 @@
 /*
  *  linux/fs/isofs/util.c
- *
- *  The special functions in the file are numbered according to the section
- *  of the iso 9660 standard in which they are described.  isonum_733 will
- *  convert numbers according to section 7.3.3, etc.
- *
- *  isofs special functions.  This file was lifted in its entirety from
- *  the 386BSD iso9660 filesystem, by Pace Willisson <pace@blitz.com>.
  */
 
 #include <linux/time.h>
-
-int
-isonum_711 (char * p)
-{
-	return (*p & 0xff);
-}
-
-int
-isonum_712 (char * p)
-{
-	int val;
-	
-	val = *p;
-	if (val & 0x80)
-		val |= 0xffffff00;
-	return (val);
-}
-
-int
-isonum_721 (char * p)
-{
-	return ((p[0] & 0xff) | ((p[1] & 0xff) << 8));
-}
-
-int
-isonum_722 (char * p)
-{
-	return (((p[0] & 0xff) << 8) | (p[1] & 0xff));
-}
-
-int
-isonum_723 (char * p)
-{
-#if 0
-	if (p[0] != p[3] || p[1] != p[2]) {
-		fprintf (stderr, "invalid format 7.2.3 number\n");
-		exit (1);
-	}
-#endif
-	return (isonum_721 (p));
-}
-
-int
-isonum_731 (char * p)
-{
-	return ((p[0] & 0xff)
-		| ((p[1] & 0xff) << 8)
-		| ((p[2] & 0xff) << 16)
-		| ((p[3] & 0xff) << 24));
-}
-
-int
-isonum_732 (char * p)
-{
-	return (((p[0] & 0xff) << 24)
-		| ((p[1] & 0xff) << 16)
-		| ((p[2] & 0xff) << 8)
-		| (p[3] & 0xff));
-}
-
-int
-isonum_733 (char * p)
-{
-#if 0
-	int i;
-
-	for (i = 0; i < 4; i++) {
-		if (p[i] != p[7-i]) {
-			fprintf (stderr, "bad format 7.3.3 number\n");
-			exit (1);
-		}
-	}
-#endif
-	return (isonum_731 (p));
-}
+#include <linux/iso_fs.h>
 
 /* 
  * We have to convert from a MM/DD/YY format to the Unix ctime format.

             reply	other threads:[~2001-05-01  5:31 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-05-01  5:30 H. Peter Anvin [this message]
2001-05-01  6:14 ` iso9660 endianness cleanup patch Linus Torvalds
2001-05-01  6:18   ` H. Peter Anvin
2001-05-01 20:21     ` Pavel Machek
2001-05-04  1:51       ` Albert D. Cahalan
2001-05-04  4:59         ` Mike Galbraith
2001-05-01  6:37   ` Albert D. Cahalan
2001-05-01  9:52 ` Tim Riker
2001-05-02  8:52 ` Martin Dalecki
2001-05-02 16:03   ` H. Peter Anvin
2001-05-03 21:59   ` Pavel Machek
  -- strict thread matches above, loose matches on Subject: below --
2001-05-01 14:40 Andrzej Krzysztofowicz
2001-05-01 18:16 ` H. Peter Anvin
2001-05-01 18:43   ` H. Peter Anvin
2001-05-01 20:44   ` Alan Cox
2001-05-01 20:59   ` Linus Torvalds
2001-05-01 21:06     ` H. Peter Anvin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3AEE4A06.3666F4BE@transmeta.com \
    --to=hpa@transmeta.com \
    --cc=Andries.Brouwer@cwi.nl \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@transmeta.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox