home *** CD-ROM | disk | FTP | other *** search
- /*
- * Header file mkisofs.h - assorted structure definitions and typecasts.
-
- Written by Eric Youngdale (1993).
-
- Copyright 1993 Yggdrasil Computing, Incorporated
-
- This program 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.
-
- This program 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
- #include <stdio.h>
-
- #if defined(AMIGA) && !defined(__GNUC__)
- #include "unix/unixlib.h"
- #include <string.h>
-
- #define malloc xmalloc
- #define strdup xstrdup
- extern void* xmalloc (size_t);
- extern char* xstrdup (char*);
-
- #else
-
- #include <string.h>
- #include <sys/types.h>
- #include <sys/stat.h>
-
- #ifdef VMS
- #include <sys/dir.h>
- #define dirent direct
- #else
- #include <dirent.h>
- #endif
-
- #ifdef linux
- #include <sys/dir.h>
- #endif
-
- #endif
-
- #ifdef __STDC__
- #define DECL(NAME,ARGS) NAME ARGS
- #define FDECL1(NAME,TYPE0, ARG0) \
- NAME(TYPE0 ARG0)
- #define FDECL2(NAME,TYPE0, ARG0,TYPE1, ARG1) \
- NAME(TYPE0 ARG0, TYPE1 ARG1)
- #define FDECL3(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2) \
- NAME(TYPE0 ARG0, TYPE1 ARG1, TYPE2 ARG2)
- #define FDECL4(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2, TYPE3, ARG3) \
- NAME(TYPE0 ARG0, TYPE1 ARG1, TYPE2 ARG2, TYPE3 ARG3)
- #define FDECL5(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2, TYPE3, ARG3, TYPE4, ARG4) \
- NAME(TYPE0 ARG0, TYPE1 ARG1, TYPE2 ARG2, TYPE3 ARG3, TYPE4 ARG4)
- #define FDECL6(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2, TYPE3, ARG3, TYPE4, ARG4, TYPE5, ARG5) \
- NAME(TYPE0 ARG0, TYPE1 ARG1, TYPE2 ARG2, TYPE3 ARG3, TYPE4 ARG4, TYPE5 ARG5)
- #else
- #define DECL(NAME,ARGS) NAME()
- #define FDECL1(NAME,TYPE0, ARG0) NAME(ARG0) TYPE0 ARG0;
- #define FDECL2(NAME,TYPE0, ARG0,TYPE1, ARG1) NAME(ARG0, ARG1) TYPE0 ARG0; TYPE1 ARG1;
- #define FDECL3(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2) \
- NAME(ARG0, ARG1, ARG2) TYPE0 ARG0; TYPE1 ARG1; TYPE2 ARG2;
- #define FDECL4(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2, TYPE3, ARG3) \
- NAME(ARG0, ARG1, ARG2, ARG3, ARG4) TYPE0 ARG0; TYPE1 ARG1; TYPE2 ARG2; TYPE3 ARG3;
- #define FDECL5(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2, TYPE3, ARG3, TYPE4, ARG4) \
- NAME(ARG0, ARG1, ARG2, ARG3, ARG4) TYPE0 ARG0; TYPE1 ARG1; TYPE2 ARG2; TYPE3 ARG3; TYPE4 ARG4;
- #define FDECL6(NAME,TYPE0, ARG0,TYPE1, ARG1, TYPE2, ARG2, TYPE3, ARG3, TYPE4, ARG4, TYPE5, ARG5) \
- NAME(ARG0, ARG1, ARG2, ARG3, ARG4, ARG5) TYPE0 ARG0; TYPE1 ARG1; TYPE2 ARG2; TYPE3 ARG3; TYPE4 ARG4; TYPE5 ARG5;
- #define const
- #endif
-
-
- #ifdef __svr4__
- #include <stdlib.h>
- #else
- extern int optind;
- extern char *optarg;
- /* extern int getopt (int __argc, char **__argv, char *__optstring); */
- #endif
-
- #include "iso9660.h"
-
- struct directory_entry{
- struct directory_entry * next;
- struct iso_directory_record isorec;
- #ifndef AMIGA
- unsigned int starting_block;
- #endif
- unsigned int size;
- unsigned short priority;
- char * name;
- char * table;
- struct directory * filedir;
- struct directory_entry * parent_rec;
- #ifdef AMIGA
- short is_a_table;
- #else
- ino_t inode; /* Used in the hash table */
- dev_t dev; /* Used in the hash table */
- #endif
- char * rr_attributes;
- unsigned short rr_attr_size;
- };
-
- struct file_hash{
- struct file_hash * next;
- ino_t inode; /* Used in the hash table */
- dev_t dev; /* Used in the hash table */
- unsigned int starting_block;
- unsigned int size;
- };
-
- struct directory{
- struct directory * next; /* Next directory at same level as this one */
- struct directory * subdir; /* First subdirectory in this directory */
- struct directory * parent;
- struct directory_entry * contents;
- struct directory_entry * self;
- char * whole_name; /* Entire path */
- char * de_name; /* Entire path */
- unsigned short depth;
- unsigned int size;
- unsigned int extent;
- unsigned short path_index;
- };
-
- /*
- struct deferred{
- struct deferred * next;
- unsigned int starting_block;
- char * name;
- struct directory * filedir;
- unsigned int flags;
- };
- */
-
- extern void DECL(sort_n_finish,(struct directory *));
- extern int goof;
- extern struct directory * root;
- extern struct directory * reloc_dir;
- extern unsigned int next_extent;
- extern unsigned int last_extent;
- extern unsigned int path_table_size;
- extern unsigned int path_table[4];
- extern unsigned int path_blocks;
- extern char * path_table_l;
- extern char * path_table_m;
- extern struct iso_directory_record root_record;
- extern int use_RockRidge;
- extern int follow_links;
- extern int verbose;
- extern int all_files;
- extern int generate_tables;
-
- extern int DECL(scan_directory_tree,(char * path, struct directory_entry * self));
- extern void DECL(dump_tree,(struct directory * node));
- extern void DECL(assign_directory_addresses,(struct directory * root));
-
- extern int DECL(iso9660_file_length,(const char* name,
- struct directory_entry * sresult, int flag));
- extern int DECL(iso_write,(FILE * outfile, char * volid));
- extern void generate_path_tables(void);
- extern void DECL(generate_iso9660_directories,(struct directory *, FILE*));
- extern void DECL(generate_one_directory,(struct directory *, FILE*));
- extern void generate_root_record(void);
- extern int DECL(iso9660_date,(char *, time_t));
- extern void DECL(add_hash,(struct directory_entry *));
- extern struct file_hash * DECL(find_hash,(dev_t, ino_t));
- extern void DECL(add_directory_hash,(dev_t, ino_t));
- extern struct file_hash * DECL(find_directory_hash,(dev_t, ino_t));
- extern void flush_file_hash(void);
- extern int DECL(delete_file_hash,(struct directory_entry *));
- extern struct directory_entry * DECL(find_file_hash,(char *));
- extern void DECL(add_file_hash,(struct directory_entry *));
- extern void finish_cl_pl_entries(void);
- extern int DECL(get_733,(char *));
-
- extern void DECL(set_723,(char *, unsigned int));
- extern void DECL(set_733,(char *, unsigned int));
- extern void DECL(sort_directory,(struct directory_entry **));
- extern int DECL(generate_rock_ridge_attributes,(char *, char *,
- struct directory_entry *,
- struct stat *, struct stat *,
- int deep_flag));
- extern char * DECL(generate_rr_extension_record,(char * id, char * descriptor,
- char * source, int * size));
-
- extern char * extension_record;
- extern int extension_record_extent;
- extern int n_data_extents;
-
- /* These are a few goodies that can be specified on the command line, and are
- filled into the root record */
-
- extern char * preparer;
- extern char * publisher;
- extern char * system_identifier;
- extern char * copyright;
- extern char * biblio;
- extern char * abstract;
-
- #define SECTOR_SIZE (2048)
- #define ROUND_UP(X) ((X + (SECTOR_SIZE - 1)) & ~(SECTOR_SIZE - 1))
-
- #define NEED_RE 1
- #define NEED_PL 2
- #define NEED_CL 4
- #define NEED_CE 8
- #define NEED_SP 16
-
- #define TABLE_INODE (sizeof(ino_t) >= 4 ? 0x7ffffffe : 0x7ffe)
- #define UNCACHED_INODE (sizeof(ino_t) >= 4 ? 0x7fffffff : 0x7fff)
- #define UNCACHED_DEVICE (sizeof(dev_t) >= 4 ? 0x7fffffff : 0x7fff)
-
- extern int convert_filenames;
- extern int inhibit_relocation;
- extern int cdtv_trademark_file;
- extern int sort_extents;
- extern int progress_indicator;
- extern unsigned long pr_dir_count;
- extern unsigned long pr_file_count;
- extern int short_filenames;
- extern int map_filenames;
- extern int preallocate;
-
- /* size of ISO directory record: */
- #define ISO_REC_SIZE 33
-
- #ifdef AMIGA
- void* malloc_forever (size_t);
- char* strdup_forever (char*);
- #else
- #define malloc_forever malloc
- #define strdup_forever strdup
- #endif
-
- char* convert_filename (const char*);
- char* convert_dirname (const char*);
-
-