summaryrefslogtreecommitdiff
path: root/isofs/iso9660.h
diff options
context:
space:
mode:
authorThomas Bushnell <thomas@gnu.org>1997-07-18 20:39:01 +0000
committerThomas Bushnell <thomas@gnu.org>1997-07-18 20:39:01 +0000
commit274eaee48a9dd0a3b5ad0bb1dc44e5ed02daf388 (patch)
tree39b54ed3227af1a431ca9c261feca3490b0a93e8 /isofs/iso9660.h
parentab9c836772ab3dfdd28e769dfd53d16999900b7a (diff)
Initial versions.
Diffstat (limited to 'isofs/iso9660.h')
-rw-r--r--isofs/iso9660.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/isofs/iso9660.h b/isofs/iso9660.h
new file mode 100644
index 00000000..2fd8cc2b
--- /dev/null
+++ b/isofs/iso9660.h
@@ -0,0 +1,125 @@
+/*
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ Written by Thomas Bushnell, n/BSG.
+
+ This file is part of the GNU Hurd.
+
+ The GNU Hurd is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2, or (at
+ your option) any later version.
+
+ The GNU Hurd is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
+
+/* Specification of ISO 9660 format */
+
+/* Volume descriptor */
+
+struct voldesc
+{
+ unsigned char type;
+ unsigned char id[5];
+ unsigned char version;
+ unsigned char data[0];
+};
+
+/* Volume descriptor types */
+#define VOLDESC_PRIMARY 1
+#define VOLDESC_END 255
+
+/* We don't support any other types */
+
+/* Expected ID */
+#define ISO_STANDARD_ID "CD001"
+
+/* Primary descriptor */
+struct sblock
+{
+ unsigned char type;
+ unsigned char id[5];
+ unsigned char version;
+ unsigned char skip1;
+ unsigned char sysid[32];
+ unsigned char volid[32];
+ unsigned char skip2[8];
+ unsigned char vol_sp_size[8]; /* total number of logical blocks */
+ unsigned char skip[32];
+ unsigned char vol_set_size[4];
+ unsigned char vol_seqno[4];
+ unsigned char blksize[4]; /* logical block size */
+ unsigned char ptsize[8];
+ unsigned char type_l_pt[4];
+ unsigned char opt_type_l_pt[4];
+ unsigned char type_m_pt[4];
+ unsigned char opt_type_m_pt[4];
+ unsigned char root[34];
+ unsigned char volset_id[128];
+ unsigned char pub_id[128];
+ unsigned char prep_id[128];
+ unsigned char app_id[128];
+ unsigned char copyr_id[37];
+ unsigned char abstr_id[37];
+ unsigned char biblio_id[37];
+ unsigned char creation_time[17];
+ unsigned char mod_time[17];
+ unsigned char expir_time[17];
+ unsigned char effect_time[17];
+ unsigned char file_structure;
+ unsigned char skip4;
+ unsigned char appl_data[512];
+ unsigned char skip5[652];
+};
+
+/* Directory record */
+struct dirrect
+{
+ unsigned char len;
+ unsigned char ext_attr_len;
+ unsigned char extent[8];
+ unsigned char size[8];
+ unsigned char date[7];
+ unsigned char flags;
+ unsigned char file_unit_size;
+ unsigned char ileave;
+ unsigned char vol_seqno[4];
+ unsigned char namelen;
+ unsigned char name[0];
+};
+
+
+
+/* Numeric conversions for these fields */
+
+#include <endian.h>
+
+static inline unsigned int
+isonum_733 (unsigned char *addr)
+{
+#if BYTE_ORDER == LITTLE_ENDIAN
+ return *(unsigned int *)addr;
+#elif BYTE_ORDER == BIG_ENDIAN
+ return *(unsigned int *)(addr + 4);
+#else
+ return
+ addr[0] | (addr[1] << 8) | (addr[2] << 16) | (addr[3] << 24);
+#endif
+}
+
+static inline unsigned int
+isonum_723 (unsigned char *addr)
+{
+#if BYTE_ORDER == LITTLE_ENDIAN
+ return *(unsigned short *)addr;
+#elif BYTE_ORDER == BIG_ENDIAN
+ return *(unsigned short *)addr + 2;
+#else
+ return addr[0] | (addr[1] << 8);
+#endif
+}