ReactOS  r76032
mkisofs.c File Reference
#include <schily/mconfig.h>
#include "mkisofs.h"
#include "rock.h"
#include <schily/errno.h>
#include <schily/time.h>
#include <schily/fcntl.h>
#include <schily/ctype.h>
#include "match.h"
#include <schily/schily.h>
#include <schily/nlsdefs.h>
#include <schily/checkerr.h>
#include <schily/io.h>
#include <schily/getargs.h>
#include "../cdrecord/version.h"
Include dependency graph for mkisofs.c:

Go to the source code of this file.

Classes

struct  rcopts
 
struct  mki_option
 

Macros

#define dysize(A)   (((A)%4)? 365 : (((A)%100) == 0 && ((A)%400)) ? 365 : 366)
 
#define OPTION_COUNT   (sizeof mki_options / sizeof (mki_options[0]))
 
#define TRUE   1
 
#define FALSE   0
 

Functions

LOCAL int getH __PR ((const char *arg, void *valp, int *pac, char *const **pav, const char *opt))
 
LOCAL int get_boot_image __PR ((char *opt_arg))
 
LOCAL void ldate_error __PR ((char *arg))
 
LOCAL char *strntoi __PR ((char *p, int n, int *ip))
 
LOCAL int mosize __PR ((int y, int m))
 
LOCAL char *parse_date __PR ((char *arg, struct tm *tp))
 
LOCAL int get_ldate __PR ((char *opt_arg, void *valp))
 
LOCAL int get_boot_image (char *opt_arg)
 
LOCAL int get_hd_boot (char *opt_arg)
 
LOCAL int get_ne_boot (char *opt_arg)
 
LOCAL int get_no_boot (char *opt_arg)
 
LOCAL int get_boot_addr (char *opt_arg)
 
LOCAL int get_boot_size (char *opt_arg)
 
LOCAL int get_boot_platid (char *opt_arg)
 
LOCAL int get_boot_table (char *opt_arg)
 
LOCAL void ldate_error (char *arg)
 
LOCAL charstrntoi (char *p, int n, int *ip)
 
LOCAL int mosize (int y, int m)
 
LOCAL charparse_date (char *arg, struct tm *tp)
 
LOCAL int get_ldate (char *opt_arg, void *valp)
 
LOCAL int getH (char *arg, void *valp, int *pac, char *const **pav, const char *opt) const
 
LOCAL int getL (char *arg, void *valp, int *pac, char *const **pav, const char *opt) const
 
LOCAL int getP (char *arg, void *valp, int *pac, char *const **pav, const char *opt) const
 
LOCAL int dolegacy (char *arg, void *valp, int *pac, char *const **pav, const char *opt) const
 
LOCAL void read_rcfile __PR ((char *appname))
 
LOCAL void susage __PR ((int excode))
 
EXPORT int iso9660_date __PR ((char *result, time_t crtime))
 
LOCAL void hide_reloc_dir __PR ((void))
 
LOCAL char *get_pnames __PR ((int argc, char *const *argv, int opt, char *pname, int pnsize, FILE *fp))
 
EXPORT int main __PR ((int argc, char *argv[]))
 
EXPORT char *findgequal __PR ((char *s))
 
LOCAL char *escstrcpy __PR ((char *to, size_t tolen, char *from))
 
struct directory *get_graft __PR ((char *arg, char *graft_point, size_t glen, char *nodename, size_t nlen, char **short_namep, BOOL do_insert))
 
EXPORT void *e_malloc __PR ((size_t size))
 
EXPORT char *e_strdup __PR ((const char *s))
 
LOCAL void ovstrcpy __PR ((char *p2, char *p1))
 
LOCAL void checkarch __PR ((char *name))
 
LOCAL void read_rcfile (char *appname)
 
LOCAL void susage (int excode)
 
const char *optend __PR ((const char *fmt))
 
const charoptend (char *fmt) const
 
int printopts __PR ((FILE *f, const char *fmt, const char *arg, int twod))
 
int printopts (FILE *f, const char *fmt, const char *arg, int twod)
 
const char *docstr __PR ((const char *str, int *no_help))
 
const chardocstr (char *str, int *no_help) const
 
LOCAL void usage (int excode)
 
EXPORT int iso9660_date (char *result, time_t crtime)
 
EXPORT int iso9660_ldate (char *result, time_t crtime, int nsec, int gmtoff)
 
LOCAL void hide_reloc_dir ()
 
LOCAL charget_pnames (int argc, char *const *argv, int opt, char *pname, int pnsize, FILE *fp)
 
EXPORT int main (int argc, argv)
 
LOCAL void list_locales ()
 
EXPORT charfindgequal (char *s)
 
LOCAL charescstrcpy (char *to, size_t tolen, char *from)
 
struct directoryget_graft (char *arg, char *graft_point, size_t glen, char *nodename, size_t nlen, char **short_namep, BOOL do_insert)
 
EXPORT voide_malloc (size_t size)
 
EXPORT chare_strdup (char *s) const
 
LOCAL void ovstrcpy (char *p2, char *p1)
 
LOCAL void checkarch (char *name)
 

Variables

static UConst char sccsid []
 
struct directoryroot = NULL
 
int path_ind
 
char version_string [] = VERSION
 
charoutfile
 
FILEdiscimage
 
UInt32_t next_extent = 0
 
UInt32_t last_extent = 0
 
UInt32_t session_start = 0
 
unsigned int path_table_size = 0
 
unsigned int path_table [4] = {0, }
 
unsigned int path_blocks = 0
 
unsigned int jpath_table_size = 0
 
unsigned int jpath_table [4] = {0, }
 
unsigned int jpath_blocks = 0
 
struct iso_directory_record root_record
 
struct iso_directory_record jroot_record
 
charextension_record = NULL
 
UInt32_t extension_record_extent = 0
 
int extension_record_size = 0
 
BOOL archive_isreg
 
dev_t archive_dev
 
ino_t archive_ino
 
int check_oldnames = 0
 
int check_session = 0
 
int use_eltorito = 0
 
int hard_disk_boot = 0
 
int not_bootable = 0
 
int no_emul_boot = 0
 
int load_addr = 0
 
int load_size = 0
 
int boot_info_table = 0
 
int use_sparcboot = 0
 
int use_sunx86boot = 0
 
int use_genboot = 0
 
int use_RockRidge = 0
 
int use_XA = 0
 
int osecsize = 0
 
int use_Joliet = 0
 
int jlen = JMAX
 
int verbose = 1
 
int debug = 0
 
int gui = 0
 
BOOL legacy = FALSE
 
int all_files = 1
 
BOOL Hflag = FALSE
 
BOOL follow_links = FALSE
 
int cache_inodes = -1
 
int rationalize = 0
 
int rationalize_uid = 0
 
int rationalize_gid = 0
 
int rationalize_filemode = 0
 
int rationalize_dirmode = 0
 
uid_t uid_to_use = 0
 
gid_t gid_to_use = 0
 
int filemode_to_use = 0
 
int dirmode_to_use = 0
 
int new_dir_mode = 0555
 
int generate_tables = 0
 
int dopad = 1
 
int print_size = 0
 
int split_output = 0
 
charicharset = NULL
 
charocharset = NULL
 
charpreparer = PREPARER_DEFAULT
 
charpublisher = PUBLISHER_DEFAULT
 
charappid = APPID_DEFAULT
 
charcopyright = COPYRIGHT_DEFAULT
 
charbiblio = BIBLIO_DEFAULT
 
char *abstract charvolset_id = VOLSET_ID_DEFAULT
 
charvolume_id = VOLUME_ID_DEFAULT
 
charsystem_id = SYSTEM_ID_DEFAULT
 
charboot_catalog
 
charboot_image = BOOT_IMAGE_DEFAULT
 
chargenboot_image = BOOT_IMAGE_DEFAULT
 
int ucs_level = 3
 
int volume_set_size = 1
 
int volume_sequence_number = 1
 
charmerge_image
 
charcheck_image
 
charreloc_root = NULL
 
charreloc_old_root = NULL
 
charcdrecord_data
 
int disable_deep_reloc
 
chardirmode_str
 
charfilemode_str
 
chargid_str
 
int help
 
int joliet_long
 
charjcharset
 
int max_filenames
 
charlog_file
 
charnew_dirmode_str
 
charpathnames
 
int rationalize_rr
 
charsectype
 
charuid_str
 
int untranslated_filenames
 
int pversion
 
int rationalize_xa
 
ldate modification_date
 
BOOL nodesc = FALSE
 
LOCAL int walkflags = 0
 
time_t begun
 
struct timeval tv_begun
 
LOCAL BOOL data_change_warn
 
struct eltorito_boot_entry_infofirst_boot_entry = NULL
 
struct eltorito_boot_entry_infolast_boot_entry = NULL
 
struct eltorito_boot_entry_infocurrent_boot_entry = NULL
 
int use_graft_ptrs
 
int match_igncase
 
int jhide_trans_tbl
 
int hide_rr_moved
 
int omit_period = 0
 
int transparent_compression = 0
 
int omit_version_number = 0
 
int no_rr = 0
 
int force_rr = 0
 
Uint RR_relocation_depth = 6
 
int do_largefiles = 0
 
off_t maxnonlarge = (off_t)0xFFFFFFFF
 
int iso9660_level = 1
 
int iso9660_namelen = LEN_ISONAME
 
int full_iso9660_filenames = 0
 
int nolimitpathtables = 0
 
int relaxed_filenames = 0
 
int allow_lowercase = 0
 
int no_allow_lowercase = 0
 
int allow_multidot = 0
 
int iso_translate = 1
 
int allow_leading_dots = 0
 
int use_fileversion = 0
 
int split_SL_component = 1
 
int split_SL_field = 1
 
chartrans_tbl
 
int stream_media_size = 0
 
charstream_filename
 
int donotwrite_macpart = 1
 
UInt32_t null_inodes = NULL_INO_MAX
 
BOOL correct_inodes = TRUE
 
BOOL rrip112 = TRUE
 
BOOL long_rr_time = FALSE
 
siconvt_tin_nls = NULL
 
siconvt_tout_nls = NULL
 
struct rcopts rcopt []
 
static int dmsize [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
 
LOCAL struct ga_flagsgl_flags
 
LOCAL int save_pname = 0
 
LOCAL const struct mki_option mki_options []
 
charpath_table_l = NULL
 
charpath_table_m = NULL
 
charjpath_table_l = NULL
 
charjpath_table_m = NULL
 
int goof = 0
 

Macro Definition Documentation

#define dysize (   A)    (((A)%4)? 365 : (((A)%100) == 0 && ((A)%400)) ? 365 : 366)

Definition at line 723 of file mkisofs.c.

Referenced by mosize().

#define FALSE   0

Definition at line 1644 of file mkisofs.c.

Referenced by checkarch(), getH(), getL(), getP(), and main().

#define OPTION_COUNT   (sizeof mki_options / sizeof (mki_options[0]))

Definition at line 1467 of file mkisofs.c.

Referenced by usage().

#define TRUE   1

Definition at line 1640 of file mkisofs.c.

Referenced by checkarch(), dolegacy(), get_graft(), getH(), getL(), and main().

Function Documentation

LOCAL int getH __PR ( (const char *arg, void *valp, int *pac, char *const **pav, const char *opt)  )

Referenced by main().

LOCAL int get_boot_image __PR ( (char *opt_arg)  )
LOCAL void ldate_error __PR ( (char *arg )
LOCAL char* strntoi __PR ( (char *p, int n, int *ip )
LOCAL int mosize __PR ( (int y, int m )
LOCAL char* parse_date __PR ( (char *arg, struct tm *tp )
LOCAL int get_ldate __PR ( (char *opt_arg, void *valp)  )
LOCAL void read_rcfile __PR ( (char *appname)  )
LOCAL void susage __PR ( (int excode)  )
EXPORT int iso9660_date __PR ( (char *result, time_t crtime)  )
LOCAL void hide_reloc_dir __PR ( (void )
LOCAL char* get_pnames __PR ( (int argc, char *const *argv, int opt, char *pname, int pnsize, FILE *fp)  )
EXPORT int main __PR ( (int argc, char *argv[])  )
EXPORT char* findgequal __PR ( (char *s )
LOCAL char* escstrcpy __PR ( (char *to, size_t tolen, char *from )
struct directory* get_graft __PR ( (char *arg, char *graft_point, size_t glen, char *nodename, size_t nlen, char **short_namep, BOOL do_insert)  )
EXPORT void* e_malloc __PR ( (size_t size )
EXPORT char* e_strdup __PR ( (const char *s )
LOCAL void ovstrcpy __PR ( (char *p2, char *p1 )
LOCAL void checkarch __PR ( (char *name )
const char* optend __PR ( (const char *fmt )
int printopts __PR ( (FILE *f, const char *fmt, const char *arg, int twod)  )
const char* docstr __PR ( (const char *str, int *no_help)  )
LOCAL void checkarch ( char name)

Definition at line 3964 of file mkisofs.c.

Referenced by main().

3966 {
3967  struct stat stbuf;
3968 
3969  archive_isreg = FALSE;
3970  archive_dev = (dev_t)0;
3971  archive_ino = (ino_t)0;
3972 
3973  if (name == NULL)
3974  return;
3975  if (stat(name, &stbuf) < 0)
3976  return;
3977 
3978  if (S_ISREG(stbuf.st_mode)) {
3979  archive_dev = stbuf.st_dev;
3980  archive_ino = stbuf.st_ino;
3981  archive_isreg = TRUE;
3982  } else if (((stbuf.st_mode & S_IFMT) == 0) ||
3983  S_ISFIFO(stbuf.st_mode) ||
3984  S_ISSOCK(stbuf.st_mode)) {
3985  /*
3986  * This is a pipe or similar on different UNIX implementations.
3987  * (stbuf.st_mode & S_IFMT) == 0 may happen in stange cases.
3988  */
3989  archive_dev = NODEV;
3990  archive_ino = (ino_t)-1;
3991  }
3992 }
#define S_ISFIFO(m)
Definition: ext2fs.h:372
#define FALSE
Definition: mkisofs.c:1644
ino_t archive_ino
Definition: mkisofs.c:95
#define S_ISSOCK(m)
Definition: ext2fs.h:366
#define S_IFMT
Definition: ext2fs.h:352
#define NODEV
Definition: fs.h:27
smooth NULL
Definition: ftsmooth.c:557
BOOL archive_isreg
Definition: mkisofs.c:93
dev_t archive_dev
Definition: mkisofs.c:94
Definition: stat.h:55
_CRTIMP int __cdecl stat(const char *_Filename, struct stat *_Stat)
Definition: stat.h:345
__u32 ino_t
Definition: types.h:27
__kernel_dev_t dev_t
Definition: linux.h:197
Definition: name.c:23
#define TRUE
Definition: mkisofs.c:1640
#define S_ISREG(mode)
Definition: various.h:17
const char* docstr ( char str,
int no_help 
) const

Definition at line 1763 of file mkisofs.c.

Referenced by test_SetDocString(), and usage().

1766 {
1767  if (no_help)
1768  *no_help = 0;
1769  if (str == NULL)
1770  return (str);
1771 
1772  if (*str == '-' || *str == '\\')
1773  str++;
1774 
1775  if (*str == '\1') {
1776  str++;
1777  while (*str != '\0' && *str != '\1' && *str != '\2')
1778  str++;
1779  }
1780  if (*str == '\1') {
1781  str++;
1782  } else if (*str == '\2') {
1783  str++;
1784  if (no_help)
1785  *no_help = 1;
1786  }
1787 
1788  if (*str == '\0')
1789  return (NULL);
1790  return (str);
1791 }
const WCHAR * str
smooth NULL
Definition: ftsmooth.c:557
LOCAL int dolegacy ( char arg,
void valp,
int pac,
char *const **  pav,
const char opt 
) const

Definition at line 1002 of file mkisofs.c.

1008 {
1009  legacy = TRUE;
1010 #ifdef APPLE_HYB
1011  gl_flags[2].ga_format = "H&"; /* Apple Hybrid "-map" */
1012 #endif
1013 #ifdef OPT_L_HAS_ARG /* never ;-) */
1014  gl_flags[4].ga_format = "L&"; /* -allow-leading-dots */
1015 #endif
1016  gl_flags[6].ga_format = "P&"; /* -publisher */
1017  return (1);
1018 }
LOCAL struct ga_flags * gl_flags
Definition: mkisofs.c:999
#define TRUE
Definition: mkisofs.c:1640
BOOL legacy
Definition: mkisofs.c:131
EXPORT void* e_malloc ( size_t  size)

Definition at line 3921 of file mkisofs.c.

Referenced by add_directory_hash(), add_file_hash(), add_hash(), assign_file_addresses(), attach_dot_entries(), check_rr_relocation(), convert_to_unicode(), dup_directory_entry(), dup_relocated_dir(), find_or_create_directory(), gen_str_path(), generate_joliet_path_tables(), generate_one_directory(), generate_one_joliet_directory(), generate_path_tables(), generate_reloc_directory(), generate_rr_extension_record(), generate_xa_rr_attributes(), get_boot_entry(), init_boot_catalog(), insert_boot_cat(), insert_file_entry(), joliet_sort_directory(), merge_isofs(), merge_old_directory_into_tree(), outputlist_insert(), read_merging_directory(), set_de_path(), sort_directory(), sort_n_finish(), write_str_dir(), and write_str_file().

3923 {
3924  void *pt = 0;
3925 
3926  if (size == 0)
3927  size = 1;
3928  if ((pt = malloc(size)) == NULL) {
3929  comerr(_("Not enough memory\n"));
3930  }
3931  /*
3932  * Not all code is clean yet.
3933  * Filling all allocated data with zeroes will help
3934  * to avoid core dumps.
3935  */
3936  memset(pt, 0, size);
3937  return (pt);
3938 }
EXPORT void comerr(char *msg, va_alist)
Definition: comerr.c:84
#define pt(x, y)
Definition: drawing.c:79
#define _(X)
Definition: i386-dis.c:36
smooth NULL
Definition: ftsmooth.c:557
GLsizeiptr size
Definition: glext.h:5919
#define malloc
Definition: debug_ros.c:4
#define memset(x, y, z)
Definition: compat.h:39
EXPORT char* e_strdup ( char s) const

Definition at line 3941 of file mkisofs.c.

Referenced by assign_file_addresses(), attach_dot_entries(), dup_directory_entry(), dup_relocated_dir(), find_or_create_directory(), generate_reloc_directory(), insert_boot_cat(), insert_file_entry(), main(), merge_old_directory_into_tree(), merge_remaining_entries(), parse_rr(), read_merging_directory(), read_rcfile(), search_tree_file(), and sort_n_finish().

3943 {
3944  char *ret = strdup(s);
3945 
3946  if (s == NULL)
3947  comerr(_("Not enough memory for strdup(%s)\n"), s);
3948  return (ret);
3949 }
EXPORT void comerr(char *msg, va_alist)
Definition: comerr.c:84
#define _(X)
Definition: i386-dis.c:36
_Check_return_ _CRTIMP char *__cdecl strdup(_In_opt_z_ const char *_Src)
smooth NULL
Definition: ftsmooth.c:557
int ret
GLdouble s
Definition: gl.h:2039
LOCAL char* escstrcpy ( char to,
size_t  tolen,
char from 
)

Definition at line 3659 of file mkisofs.c.

Referenced by get_graft(), and main().

3663 {
3664  char *p = to;
3665 
3666  if (debug)
3667  error("FROM: '%s'\n", from);
3668 
3669  to[0] = '\0';
3670  if (tolen > 0) {
3671  to[--tolen] = '\0'; /* Fill in last nul char */
3672  }
3673  while ((*p = *from++) != '\0' && tolen-- > 0) {
3674  if (*p == '\\') {
3675  if ((*p = *from++) == '\0')
3676  break;
3677  if (*p != '\\' && *p != '=') {
3678  p[1] = p[0];
3679  *p++ = '\\';
3680  }
3681  }
3682  p++;
3683  }
3684  if (debug)
3685  error("ESC: '%s'\n", to);
3686  return (to);
3687 }
#define error(str)
Definition: mkdosfs.c:1605
int debug
Definition: mkisofs.c:129
GLfloat GLfloat p
Definition: glext.h:8902
CardRegion * from
Definition: spigame.cpp:19
EXPORT char* findgequal ( char s)

Definition at line 3642 of file mkisofs.c.

Referenced by get_graft(), graftcp(), and main().

3644 {
3645  char *p = s;
3646 
3647  while ((p = strchr(p, '=')) != NULL) {
3648  if (p > s && p[-1] != '\\')
3649  return (p);
3650  p++;
3651  }
3652  return (NULL);
3653 }
smooth NULL
Definition: ftsmooth.c:557
GLdouble s
Definition: gl.h:2039
char * strchr(const char *String, int ch)
Definition: utclib.c:501
GLfloat GLfloat p
Definition: glext.h:8902
LOCAL int get_boot_addr ( char opt_arg)

Definition at line 458 of file mkisofs.c.

460 {
461  long val;
462  char *ptr;
463 
464  use_eltorito++;
465  val = strtol(opt_arg, &ptr, 0);
466  if (*ptr || val < 0 || val >= 0x10000) {
467  comerrno(EX_BAD, _("Boot image load address invalid.\n"));
468  }
469  load_addr = val;
470  get_boot_entry();
471  current_boot_entry->load_addr = load_addr;
472  return (1);
473 }
EXPORT void get_boot_entry()
Definition: eltorito.c:629
int load_addr
Definition: mkisofs.c:104
#define _(X)
Definition: i386-dis.c:36
static PVOID ptr
Definition: dispmode.c:30
GLuint GLfloat * val
Definition: glext.h:7180
struct eltorito_boot_entry_info * current_boot_entry
Definition: mkisofs.c:228
EXPORT void comerrno(int err, char *msg, va_alist)
Definition: comerr.c:137
int use_eltorito
Definition: mkisofs.c:100
_Check_return_ long __cdecl strtol(_In_z_ const char *_Str, _Out_opt_ _Deref_post_z_ char **_EndPtr, _In_ int _Radix)
#define EX_BAD
Definition: standard.h:62
LOCAL int get_boot_image ( char opt_arg)

Definition at line 408 of file mkisofs.c.

410 {
411  do_sort++; /* We sort bootcat/botimage */
412  use_eltorito++;
413  boot_image = opt_arg; /* pathname of the boot image */
414  /* on disk */
415  if (boot_image == NULL || *boot_image == '\0') {
417  _("Required Eltorito boot image pathname missing\n"));
418  }
419  get_boot_entry();
420  current_boot_entry->boot_image = boot_image;
421  return (1);
422 }
char * boot_image
Definition: mkisofs.c:169
EXPORT void get_boot_entry()
Definition: eltorito.c:629
#define _(X)
Definition: i386-dis.c:36
smooth NULL
Definition: ftsmooth.c:557
struct eltorito_boot_entry_info * current_boot_entry
Definition: mkisofs.c:228
EXPORT void comerrno(int err, char *msg, va_alist)
Definition: comerr.c:137
int use_eltorito
Definition: mkisofs.c:100
#define EX_BAD
Definition: standard.h:62
LOCAL int get_boot_platid ( char opt_arg)

Definition at line 495 of file mkisofs.c.

497 {
498  long val;
499  char *ptr;
500 
501  use_eltorito++;
502  if (streql(opt_arg, "x86")) {
503  val = EL_TORITO_ARCH_x86;
504  } else if (streql(opt_arg, "PPC")) {
505  val = EL_TORITO_ARCH_PPC;
506  } else if (streql(opt_arg, "Mac")) {
507  val = EL_TORITO_ARCH_MAC;
508  } else if (streql(opt_arg, "efi")) {
509  val = EL_TORITO_ARCH_EFI;
510  } else {
511  val = strtol(opt_arg, &ptr, 0);
512  if (*ptr || val < 0 || val >= 0x100) {
513  comerrno(EX_BAD, _("Bad boot system ID.\n"));
514  }
515  }
516 
517  /*
518  * If there is already a boot entry and the boot file name has been set
519  * for this boot entry and the new platform id differs from the
520  * previous value, we start a new boot section.
521  */
522  if (current_boot_entry &&
523  current_boot_entry->boot_image != NULL &&
524  current_boot_entry->boot_platform != val) {
525  new_boot_entry();
526  }
527  get_boot_entry();
529  current_boot_entry->boot_platform = val;
530  return (1);
531 }
EXPORT void get_boot_entry()
Definition: eltorito.c:629
#define ELTORITO_BOOT_ID
Definition: mkisofs.h:321
#define EL_TORITO_ARCH_EFI
Definition: iso9660.h:53
#define EL_TORITO_ARCH_x86
Definition: iso9660.h:50
EXPORT int streql(char *a, const char *b) const
Definition: streql.c:23
#define _(X)
Definition: i386-dis.c:36
static PVOID ptr
Definition: dispmode.c:30
smooth NULL
Definition: ftsmooth.c:557
GLuint GLfloat * val
Definition: glext.h:7180
struct eltorito_boot_entry_info * current_boot_entry
Definition: mkisofs.c:228
#define EL_TORITO_ARCH_PPC
Definition: iso9660.h:51
EXPORT void comerrno(int err, char *msg, va_alist)
Definition: comerr.c:137
int use_eltorito
Definition: mkisofs.c:100
_Check_return_ long __cdecl strtol(_In_z_ const char *_Str, _Out_opt_ _Deref_post_z_ char **_EndPtr, _In_ int _Radix)
EXPORT int new_boot_entry()
Definition: eltorito.c:650
#define EL_TORITO_ARCH_MAC
Definition: iso9660.h:52
#define EX_BAD
Definition: standard.h:62
LOCAL int get_boot_size ( char opt_arg)

Definition at line 476 of file mkisofs.c.

478 {
479  long val;
480  char *ptr;
481 
482  use_eltorito++;
483  val = strtol(opt_arg, &ptr, 0);
484  if (*ptr || val < 0 || val >= 0x10000) {
486  _("Boot image load size invalid.\n"));
487  }
488  load_size = val;
489  get_boot_entry();
490  current_boot_entry->load_size = load_size;
491  return (1);
492 }
EXPORT void get_boot_entry()
Definition: eltorito.c:629
#define _(X)
Definition: i386-dis.c:36
static PVOID ptr
Definition: dispmode.c:30
GLuint GLfloat * val
Definition: glext.h:7180
int load_size
Definition: mkisofs.c:105
struct eltorito_boot_entry_info * current_boot_entry
Definition: mkisofs.c:228
EXPORT void comerrno(int err, char *msg, va_alist)
Definition: comerr.c:137
int use_eltorito
Definition: mkisofs.c:100
_Check_return_ long __cdecl strtol(_In_z_ const char *_Str, _Out_opt_ _Deref_post_z_ char **_EndPtr, _In_ int _Radix)
#define EX_BAD
Definition: standard.h:62
LOCAL int get_boot_table ( char opt_arg)

Definition at line 534 of file mkisofs.c.

536 {
537  use_eltorito++;
538  boot_info_table++;
539  get_boot_entry();
540  current_boot_entry->boot_info_table = 1;
541  return (1);
542 }
EXPORT void get_boot_entry()
Definition: eltorito.c:629
int boot_info_table
Definition: mkisofs.c:106
struct eltorito_boot_entry_info * current_boot_entry
Definition: mkisofs.c:228
int use_eltorito
Definition: mkisofs.c:100
struct directory* get_graft ( char arg,
char graft_point,
size_t  glen,
char nodename,
size_t  nlen,
char **  short_namep,
BOOL  do_insert 
)

Definition at line 3690 of file mkisofs.c.

Referenced by main().

3698 {
3699  char *node = NULL;
3700  struct directory_entry de;
3701  struct directory *graft_dir = root;
3702  struct stat st;
3703  char *short_name;
3704  int status;
3705 
3706  fillbytes(&de, sizeof (de), '\0');
3707  /*
3708  * We would like a syntax like:
3709  *
3710  * /tmp=/usr/tmp/xxx
3711  *
3712  * where the user can specify a place to graft each component
3713  * of the tree. To do this, we may have to create directories
3714  * along the way, of course. Secondly, I would like to allow
3715  * the user to do something like:
3716  *
3717  * /home/baz/RMAIL=/u3/users/baz/RMAIL
3718  *
3719  * so that normal files could also be injected into the tree
3720  * at an arbitrary point.
3721  *
3722  * The idea is that the last component of whatever is being
3723  * entered would take the name from the last component of
3724  * whatever the user specifies.
3725  *
3726  * The default will be that the file is injected at the root of
3727  * the image tree.
3728  */
3729  node = findgequal(arg);
3730  if (!use_graft_ptrs)
3731  node = NULL;
3732  /*
3733  * Remove '\\' escape chars which are located
3734  * before '\\' and '=' chars ---> below in escstrcpy()
3735  */
3736 
3737  short_name = NULL;
3738 
3739  if (node != NULL || reloc_root) {
3740  char *pnt;
3741  char *xpnt;
3742  size_t len;
3743 
3744  /* insert -root prefix */
3745  if (reloc_root != NULL) {
3746  strlcpy(graft_point, reloc_root, glen);
3747  len = strlen(graft_point);
3748 
3749  if ((len < (glen -1)) &&
3750  (len == 0 || graft_point[len-1] != '/')) {
3751  graft_point[len++] = '/';
3752  graft_point[len] = '\0';
3753  }
3754  } else {
3755  len = 0;
3756  }
3757 
3758  if (node) {
3759  *node = '\0';
3760  escstrcpy(&graft_point[len], glen - len, arg);
3761  *node = '=';
3762  }
3763 
3764  /*
3765  * Remove unwanted "./" & "/" sequences from start...
3766  */
3767  do {
3768  xpnt = graft_point;
3769  while (xpnt[0] == '.' && xpnt[1] == '/')
3770  xpnt += 2;
3771  while (*xpnt == PATH_SEPARATOR) {
3772  xpnt++;
3773  }
3774  /*
3775  * The string becomes shorter, there is no need to check
3776  * the length. Make sure to support overlapping strings.
3777  */
3778  ovstrcpy(graft_point, xpnt);
3779  } while (xpnt > graft_point);
3780 
3781  if (node) {
3782  node = escstrcpy(nodename, nlen, ++node);
3783  } else {
3784  node = arg;
3785  }
3786 
3787  graft_dir = root;
3788  xpnt = graft_point;
3789 
3790  /*
3791  * If "node" points to a directory, then graft_point
3792  * needs to point to a directory too.
3793  */
3794  if (follow_links)
3795  status = stat_filter(node, &st);
3796  else
3797  status = lstat_filter(node, &st);
3798  if (status == 0 && S_ISDIR(st.st_mode)) {
3799  len = strlen(graft_point);
3800 
3801  if ((len < (glen -1)) &&
3802  (len == 0 || graft_point[len-1] != '/')) {
3803  graft_point[len++] = '/';
3804  graft_point[len] = '\0';
3805  }
3806  }
3807  if (debug)
3808  error("GRAFT:'%s'\n", xpnt);
3809  /*
3810  * Loop down deeper and deeper until we find the
3811  * correct insertion spot.
3812  * Canonicalize the filename while parsing it.
3813  */
3814  for (;;) {
3815  do {
3816  while (xpnt[0] == '.' && xpnt[1] == '/')
3817  xpnt += 2;
3818  while (xpnt[0] == '/')
3819  xpnt += 1;
3820  if (xpnt[0] == '.' && xpnt[1] == '.' && xpnt[2] == '/') {
3821  if (graft_dir && graft_dir != root) {
3822  graft_dir = graft_dir->parent;
3823  xpnt += 2;
3824  }
3825  }
3826  } while ((xpnt[0] == '/') || (xpnt[0] == '.' && xpnt[1] == '/'));
3827  pnt = strchr(xpnt, PATH_SEPARATOR);
3828  if (pnt == NULL) {
3829  if (*xpnt != '\0') {
3830  short_name = xpnt;
3831  if (short_namep)
3832  *short_namep = xpnt;
3833  }
3834  break;
3835  }
3836  *pnt = '\0';
3837  if (debug) {
3838  error("GRAFT Point:'%s' in '%s : %s' (%s)\n",
3839  xpnt,
3840  graft_dir->whole_name,
3841  graft_dir->de_name,
3842  graft_point);
3843  }
3844  graft_dir = find_or_create_directory(graft_dir,
3845  graft_point,
3846  NULL, TRUE);
3847  *pnt = PATH_SEPARATOR;
3848  xpnt = pnt + 1;
3849  }
3850  } else {
3851  graft_dir = root;
3852  if (use_graft_ptrs)
3853  node = escstrcpy(nodename, nlen, arg);
3854  else
3855  node = arg;
3856  }
3857 
3858  /*
3859  * Now see whether the user wants to add a regular file, or a
3860  * directory at this point.
3861  */
3862  if (follow_links || Hflag)
3863  status = stat_filter(node, &st);
3864  else
3865  status = lstat_filter(node, &st);
3866  if (status != 0) {
3867  /*
3868  * This is a fatal error - the user won't be getting
3869  * what they want if we were to proceed.
3870  */
3871  comerr(_("Invalid node - '%s'.\n"), node);
3872  } else {
3873  if (S_ISDIR(st.st_mode)) {
3874  if (debug) {
3875  error(_("graft_dir: '%s : %s', node: '%s', (scan)\n"),
3876  graft_dir->whole_name,
3877  graft_dir->de_name, node);
3878  }
3879  if (!do_insert)
3880  return (graft_dir);
3881  if (!scan_directory_tree(graft_dir,
3882  node, &de)) {
3883  exit(1);
3884  }
3885  if (debug) {
3886  error(_("scan done\n"));
3887  }
3888  } else {
3889  if (short_name == NULL) {
3890  short_name = strrchr(node,
3891  PATH_SEPARATOR);
3892  if (short_name == NULL ||
3893  short_name < node) {
3894  short_name = node;
3895  } else {
3896  short_name++;
3897  }
3898  }
3899  if (debug) {
3900  error(_("graft_dir: '%s : %s', node: '%s', short_name: '%s'\n"),
3901  graft_dir->whole_name,
3902  graft_dir->de_name, node,
3903  short_name);
3904  }
3905  if (!do_insert)
3906  return (graft_dir);
3907  if (!insert_file_entry(graft_dir, node,
3908  short_name, NULL, 0)) {
3909  /*
3910  * Should we ignore this?
3911  */
3912 /* exit(1);*/
3913  /* EMPTY */
3914  }
3915  }
3916  }
3917  return (graft_dir);
3918 }
char * whole_name
Definition: mkisofs.h:273
Definition: graphics.c:176
BOOL follow_links
Definition: mkisofs.c:134
EXPORT void comerr(char *msg, va_alist)
Definition: comerr.c:84
#define error(str)
Definition: mkdosfs.c:1605
Definition: mkisofs.h:107
int debug
Definition: mkisofs.c:129
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
LOCAL void ovstrcpy(char *p2, char *p1)
Definition: mkisofs.c:3955
EXPORT char * fillbytes(void *tov, ssize_t cnt, char val)
Definition: fillbytes.c:36
char * reloc_root
Definition: mkisofs.c:177
size_t strlcpy(char *d, const char *s, size_t bufsize)
Definition: compat.c:3
LOCAL char * escstrcpy(char *to, size_t tolen, char *from)
Definition: mkisofs.c:3659
#define PATH_SEPARATOR
Definition: xmllint.c:226
void * arg
Definition: msvc.h:12
EXPORT int stat_filter(char *path, struct stat *st)
Definition: tree.c:232
_Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
struct node node
struct directory * parent
Definition: mkisofs.h:269
#define _(X)
Definition: i386-dis.c:36
BOOL Hflag
Definition: mkisofs.c:133
smooth NULL
Definition: ftsmooth.c:557
char * de_name
Definition: mkisofs.h:275
#define S_ISDIR(mode)
Definition: various.h:18
const WCHAR * short_name
Definition: reg.c:46
EXPORT int lstat_filter(char *path, struct stat *st)
Definition: tree.c:244
#define exit(n)
Definition: config.h:202
Definition: stat.h:55
GLenum GLsizei len
Definition: glext.h:6722
EXPORT int insert_file_entry(struct directory *this_dir, char *whole_path, char *short_name, struct stat *statp, int have_rsrc)
Definition: tree.c:1444
struct directory * root
Definition: mkisofs.c:68
EXPORT char * findgequal(char *s)
Definition: mkisofs.c:3642
char * strchr(const char *String, int ch)
Definition: utclib.c:501
EXPORT struct directory * find_or_create_directory(struct directory *parent, char *path, struct directory_entry *de, int flag)
Definition: tree.c:2508
#define TRUE
Definition: mkisofs.c:1640
EXPORT int scan_directory_tree(struct directory *this_dir, char *path, struct directory_entry *de)
Definition: tree.c:1147
static SERVICE_STATUS status
Definition: service.c:26
int use_graft_ptrs
Definition: mkisofs.c:230
LOCAL int get_hd_boot ( char opt_arg)

Definition at line 425 of file mkisofs.c.

427 {
428  use_eltorito++;
429  hard_disk_boot++;
430  get_boot_entry();
431  current_boot_entry->hard_disk_boot = 1;
432  return (1);
433 }
EXPORT void get_boot_entry()
Definition: eltorito.c:629
int hard_disk_boot
Definition: mkisofs.c:101
struct eltorito_boot_entry_info * current_boot_entry
Definition: mkisofs.c:228
int use_eltorito
Definition: mkisofs.c:100
LOCAL int get_ldate ( char opt_arg,
void valp 
)

Definition at line 832 of file mkisofs.c.

835 {
836  time_t t;
837  int usec = 0;
838  int gmtoff = -100;
839  struct tm tm;
840  char *p;
841  char *arg;
842 
843  p = parse_date(opt_arg, &tm);
844  if (*p == '.') {
845  p++;
846  arg = p;
847  p = strntoi(arg, 2, &usec);
848  if ((p - arg) != 2)
849  ldate_error(opt_arg);
850  if (usec > 99)
851  ldate_error(opt_arg);
852  usec *= 10000;
853  }
854  if (*p == ' ')
855  p++;
856  if (*p == '+' || *p == '-') {
857  int i;
858  char *s = p++;
859 
860  arg = p;
861  p = strntoi(arg, 2, &gmtoff);
862  if ((p - arg) != 2)
863  ldate_error(opt_arg);
864  arg = p;
865  p = strntoi(arg, 2, &i);
866  if ((p - arg) != 2)
867  ldate_error(opt_arg);
868  if (i > 59)
869  ldate_error(opt_arg);
870  gmtoff *= 60;
871  gmtoff += i;
872  if (gmtoff % 15)
873  ldate_error(opt_arg);
874  if (*s == '-')
875  gmtoff *= -1;
876  gmtoff /= 15;
877  if (gmtoff < -48 || gmtoff > 52)
878  ldate_error(opt_arg);
879  }
880  if (*p != '\0')
881  ldate_error(opt_arg);
882 
883  seterrno(0);
884  t = mktime(&tm);
885  if (t == -1 && geterrno() != 0)
886  comerr(_("Date '%s' is out of range.\n"), opt_arg);
887 
888  ((ldate *)valp)->l_sec = t;
889  ((ldate *)valp)->l_usec = usec;
890  ((ldate *)valp)->l_gmtoff = gmtoff;
891 
892  return (1);
893 }
EXPORT void comerr(char *msg, va_alist)
Definition: comerr.c:84
GLdouble GLdouble t
Definition: gl.h:2047
void * arg
Definition: msvc.h:12
GLenum GLclampf GLint i
Definition: glfuncs.h:14
#define _(X)
Definition: i386-dis.c:36
EXPORT int seterrno(int err)
Definition: seterrno.c:34
EXPORT int geterrno()
Definition: geterrno.c:34
Definition: mkisofs.h:331
GLdouble s
Definition: gl.h:2039
Definition: time.h:76
LOCAL void ldate_error(char *arg)
Definition: mkisofs.c:691
LOCAL char * strntoi(char *p, int n, int *ip)
Definition: mkisofs.c:698
__kernel_time_t time_t
Definition: linux.h:252
_CRTIMP time_t __cdecl mktime(struct tm *_Tm)
Definition: time.h:428
LOCAL char * parse_date(char *arg, struct tm *tp)
Definition: mkisofs.c:739
GLfloat GLfloat p
Definition: glext.h:8902
LOCAL int get_ne_boot ( char opt_arg)

Definition at line 436 of file mkisofs.c.

438 {
439  use_eltorito++;
440  no_emul_boot++;
441  get_boot_entry();
442  current_boot_entry->no_emul_boot = 1;
443  return (1);
444 }
EXPORT void get_boot_entry()
Definition: eltorito.c:629
int no_emul_boot
Definition: mkisofs.c:103
struct eltorito_boot_entry_info * current_boot_entry
Definition: mkisofs.c:228
int use_eltorito
Definition: mkisofs.c:100
LOCAL int get_no_boot ( char opt_arg)

Definition at line 447 of file mkisofs.c.

449 {
450  use_eltorito++;
451  not_bootable++;
452  get_boot_entry();
453  current_boot_entry->not_bootable = 1;
454  return (1);
455 }
EXPORT void get_boot_entry()
Definition: eltorito.c:629
int not_bootable
Definition: mkisofs.c:102
struct eltorito_boot_entry_info * current_boot_entry
Definition: mkisofs.c:228
int use_eltorito
Definition: mkisofs.c:100
LOCAL char* get_pnames ( int  argc,
char * const argv,
int  opt,
char pname,
int  pnsize,
FILE fp 
)

Definition at line 1969 of file mkisofs.c.

Referenced by main().

1976 {
1977  int len;
1978 
1979  /* we may of already read the first line from the pathnames file */
1980  if (save_pname) {
1981  save_pname = 0;
1982  return (pname);
1983  }
1984 
1985 #ifdef USE_FIND
1986  if (dofind && opt < (find_pav - argv))
1987  return (argv[opt]);
1988  else if (!dofind && opt < argc)
1989  return (argv[opt]);
1990 #else
1991  if (opt < argc)
1992  return (argv[opt]);
1993 #endif
1994 
1995  if (fp == NULL)
1996  return ((char *)0);
1997 
1998  if (fgets(pname, pnsize, fp)) {
1999  /* Discard newline */
2000  len = strlen(pname);
2001  if (pname[len - 1] == '\n') {
2002  pname[len - 1] = '\0';
2003  }
2004  return (pname);
2005  }
2006  return ((char *)0);
2007 }
static int argc
Definition: ServiceArgs.c:15
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
LOCAL int save_pname
Definition: mkisofs.c:1043
static char ** argv
Definition: ServiceArgs.c:14
smooth NULL
Definition: ftsmooth.c:557
GLenum GLsizei len
Definition: glext.h:6722
_Check_return_opt_ _CRTIMP char *__cdecl fgets(_Out_writes_z_(_MaxCount) char *_Buf, _In_ int _MaxCount, _Inout_ FILE *_File)
LOCAL int getH ( char arg,
void valp,
int pac,
char *const **  pav,
const char opt 
) const

Definition at line 914 of file mkisofs.c.

920 {
921 /*error("getH\n");*/
922  if (opt[0] == '-' && opt[1] == 'H' && opt[2] == '\0') {
923 #ifdef APPLE_HYB
924  if (legacy) {
925  errmsgno(EX_BAD, _("The option '-H' is deprecated since 2002.\n"));
926  errmsgno(EX_BAD, _("The option '-H' was disabled in 2006.\n"));
927  errmsgno(EX_BAD, _("Use '-map' instead of '-H' as documented instead of using the legacy mode.\n"));
928  afpfile = (char *)arg;
929  return (1);
930  }
931 #endif
932  return (BADFLAG); /* POSIX -H is not yet active */
933  }
935  Hflag = TRUE;
936 #ifdef USE_FIND
937  *(int *)valp |= WALK_ARGFOLLOW;
938 #endif
939  return (1);
940 }
#define FALSE
Definition: mkisofs.c:1644
BOOL follow_links
Definition: mkisofs.c:134
#define _(X)
Definition: i386-dis.c:36
BOOL Hflag
Definition: mkisofs.c:133
#define BADFLAG
Definition: getargs.h:58
#define TRUE
Definition: mkisofs.c:1640
BOOL legacy
Definition: mkisofs.c:131
EXPORT int errmsgno(int err, char *msg, va_alist)
Definition: comerr.c:219
#define EX_BAD
Definition: standard.h:62
LOCAL int getL ( char arg,
void valp,
int pac,
char *const **  pav,
const char opt 
) const

Definition at line 944 of file mkisofs.c.

950 {
951 /*error("getL\n");*/
952  if (opt[0] == '-' && opt[1] == 'L' && opt[2] == '\0') {
953  if (legacy) {
954  errmsgno(EX_BAD, _("The option '-L' is deprecated since 2002.\n"));
955  errmsgno(EX_BAD, _("The option '-L' was disabled in 2006.\n"));
957  _("Use '-allow-leading-dots' instead of '-L' as documented instead of using the legacy mode.\n"));
959  return (1);
960  }
961  return (BADFLAG); /* POSIX -L is not yet active */
962  }
963  follow_links = TRUE;
964  Hflag = FALSE;
965 #ifdef USE_FIND
966  *(int *)valp |= WALK_ALLFOLLOW;
967 #endif
968  return (1);
969 }
#define FALSE
Definition: mkisofs.c:1644
int allow_leading_dots
Definition: mkisofs.c:251
BOOL follow_links
Definition: mkisofs.c:134
#define _(X)
Definition: i386-dis.c:36
BOOL Hflag
Definition: mkisofs.c:133
#define BADFLAG
Definition: getargs.h:58
#define TRUE
Definition: mkisofs.c:1640
BOOL legacy
Definition: mkisofs.c:131
EXPORT int errmsgno(int err, char *msg, va_alist)
Definition: comerr.c:219
#define EX_BAD
Definition: standard.h:62
LOCAL int getP ( char arg,
void valp,
int pac,
char *const **  pav,
const char opt 
) const

Definition at line 973 of file mkisofs.c.

979 {
980 /*error("getP\n");*/
981  if (opt[0] == '-' && opt[1] == 'P' && opt[2] == '\0') {
982  if (legacy) {
983  errmsgno(EX_BAD, _("The option '-P' is deprecated since 2002.\n"));
984  errmsgno(EX_BAD, _("The option '-P' was disabled in 2006.\n"));
985  errmsgno(EX_BAD, _("Use '-publisher' instead of '-P' as documented instead of using the legacy mode.\n"));
986  publisher = (char *)arg;
987  return (1);
988  }
989  return (BADFLAG); /* POSIX -P is not yet active */
990  }
992  Hflag = FALSE;
993 #ifdef USE_FIND
994  *(int *)valp &= ~(WALK_ARGFOLLOW | WALK_ALLFOLLOW);
995 #endif
996  return (1);
997 }
#define FALSE
Definition: mkisofs.c:1644
BOOL follow_links
Definition: mkisofs.c:134
char * publisher
Definition: mkisofs.c:160
#define _(X)
Definition: i386-dis.c:36
BOOL Hflag
Definition: mkisofs.c:133
#define BADFLAG
Definition: getargs.h:58
BOOL legacy
Definition: mkisofs.c:131
EXPORT int errmsgno(int err, char *msg, va_alist)
Definition: comerr.c:219
#define EX_BAD
Definition: standard.h:62
LOCAL void hide_reloc_dir ( )

Definition at line 1947 of file mkisofs.c.

Referenced by main().

1948 {
1949  struct directory_entry *s_entry;
1950 
1951  for (s_entry = reloc_dir->contents; s_entry; s_entry = s_entry->next) {
1952  if (strcmp(s_entry->name, ".") == 0 ||
1953  strcmp(s_entry->name, "..") == 0)
1954  continue;
1955 
1956  if ((s_entry->de_flags & INHIBIT_ISO9660_ENTRY) == 0)
1957  return;
1958  }
1959 
1960  /* all entries are hidden, so hide this directory */
1961  reloc_dir->dir_flags |= INHIBIT_ISO9660_ENTRY;
1962  reloc_dir->self->de_flags |= INHIBIT_ISO9660_ENTRY;
1963 }
unsigned int de_flags
Definition: mkisofs.h:122
Definition: mkisofs.h:107
char * name
Definition: mkisofs.h:116
#define INHIBIT_ISO9660_ENTRY
Definition: mkisofs.h:802
struct directory * reloc_dir
Definition: tree.c:111
struct directory_entry * next
Definition: mkisofs.h:108
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
EXPORT int iso9660_date ( char result,
time_t  crtime 
)

Definition at line 1868 of file mkisofs.c.

Referenced by attach_dot_entries(), check_rr_dates(), dup_relocated_dir(), find_or_create_directory(), generate_reloc_directory(), generate_xa_rr_attributes(), insert_boot_cat(), insert_file_entry(), jroot_gen(), root_gen(), sort_n_finish(), and write_str_dir().

1871 {
1872  struct tm local;
1873  struct tm gmt;
1874 
1875  local = *localtime(&crtime);
1876  gmt = *gmtime(&crtime);
1877 
1878  result[0] = local.tm_year;
1879  result[1] = local.tm_mon + 1;
1880  result[2] = local.tm_mday;
1881  result[3] = local.tm_hour;
1882  result[4] = local.tm_min;
1883  result[5] = local.tm_sec;
1884 
1885  local.tm_min -= gmt.tm_min;
1886  local.tm_hour -= gmt.tm_hour;
1887  local.tm_yday -= gmt.tm_yday;
1888  local.tm_year -= gmt.tm_year;
1889  if (local.tm_year) /* Hit new-year limit */
1890  local.tm_yday = local.tm_year; /* yday = +-1 */
1891 
1892  result[6] = (local.tm_min + 60 *
1893  (local.tm_hour + 24 * local.tm_yday)) / 15;
1894 
1895  return (0);
1896 }
Definition: time.h:76
_CRTIMP struct tm *__cdecl localtime(const time_t *_Time)
Definition: time.h:426
#define local
Definition: zutil.h:30
_CRTIMP struct tm *__cdecl gmtime(const time_t *_Time)
Definition: time.h:425
GLuint64EXT * result
Definition: glext.h:11304
EXPORT int iso9660_ldate ( char result,
time_t  crtime,
int  nsec,
int  gmtoff 
)

Definition at line 1907 of file mkisofs.c.

Referenced by generate_xa_rr_attributes(), and pvd_write().

1912 {
1913  struct tm local;
1914  struct tm gmt;
1915 
1916  local = *localtime(&crtime);
1917  gmt = *gmtime(&crtime);
1918 
1919  /*
1920  * There was a comment here about breaking in the year 2000.
1921  * That's not true, in 2000 tm_year == 100, so 1900+tm_year == 2000.
1922  */
1923  sprintf(result, "%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d%2.2d",
1924  1900 + local.tm_year,
1925  local.tm_mon + 1, local.tm_mday,
1926  local.tm_hour, local.tm_min, local.tm_sec,
1927  nsec / 10000000);
1928 
1929  if (gmtoff == -100) {
1930  local.tm_min -= gmt.tm_min;
1931  local.tm_hour -= gmt.tm_hour;
1932  local.tm_yday -= gmt.tm_yday;
1933  local.tm_year -= gmt.tm_year;
1934  if (local.tm_year) /* Hit new-year limit */
1935  local.tm_yday = local.tm_year; /* yday = +-1 */
1936 
1937  result[16] = (local.tm_min + 60 *
1938  (local.tm_hour + 24 * local.tm_yday)) / 15;
1939  } else {
1940  result[16] = gmtoff;
1941  }
1942  return (0);
1943 }
#define sprintf(buf, format,...)
Definition: sprintf.c:55
Definition: time.h:76
_CRTIMP struct tm *__cdecl localtime(const time_t *_Time)
Definition: time.h:426
#define local
Definition: zutil.h:30
_CRTIMP struct tm *__cdecl gmtime(const time_t *_Time)
Definition: time.h:425
GLuint64EXT * result
Definition: glext.h:11304
LOCAL void ldate_error ( char arg)

Definition at line 691 of file mkisofs.c.

Referenced by get_ldate(), and parse_date().

693 {
694  comerrno(EX_BAD, _("Ilegal date specification '%s'.\n"), arg);
695 }
#define _(X)
Definition: i386-dis.c:36
EXPORT void comerrno(int err, char *msg, va_alist)
Definition: comerr.c:137
#define EX_BAD
Definition: standard.h:62
LOCAL void list_locales ( )

Definition at line 3612 of file mkisofs.c.

Referenced by main().

3613 {
3614  int n;
3615 
3616  n = sic_list(stdout);
3617  if (n <= 0) {
3618  const char *ins_base = sic_base();
3619 
3620  if (ins_base == NULL)
3621  ins_base = "$INS_BASE/lib/siconv/";
3622  errmsgno(EX_BAD, _("Installation problem: '%s' %s.\n"),
3623  ins_base, n < 0 ? _("missing"):_("incomplete"));
3624  if (n == 0) {
3625  errmsgno(EX_BAD,
3626  _("Check '%s' for missing translation tables.\n"),
3627  ins_base);
3628  }
3629  }
3630 #ifdef USE_ICONV
3631  if (n > 0) {
3632  errmsgno(EX_BAD,
3633  _("'iconv -l' lists more available names.\n"));
3634  }
3635 #endif
3636 }
FILE * stdout
GLuint n
Definition: s_context.h:57
#define _(X)
Definition: i386-dis.c:36
smooth NULL
Definition: ftsmooth.c:557
EXPORT const char * sic_base()
Definition: sic_nls.c:186
LOCAL char * ins_base
Definition: sic_nls.c:73
EXPORT int sic_list(FILE *f)
Definition: sic_nls.c:233
EXPORT int errmsgno(int err, char *msg, va_alist)
Definition: comerr.c:219
#define EX_BAD
Definition: standard.h:62
EXPORT int main ( int argc  ,
argv   
)

Definition at line 2010 of file mkisofs.c.

2013 {
2014  int cac = argc;
2015  char * const *cav = argv;
2016 
2017  struct directory_entry de;
2018 
2019 #ifdef HAVE_SBRK
2020  unsigned long mem_start;
2021 #endif
2022  struct stat statbuf;
2023  struct iso_directory_record *mrootp = NULL;
2024  struct output_fragment *opnt;
2025  struct ga_flags flags[OPTION_COUNT + 1];
2026  int c;
2027  int n;
2028  char *node = NULL;
2029  FILE *pfp = NULL;
2030  char pname[2*PATH_MAX + 1 + 1]; /* may be too short */
2031  char *arg; /* if '\\' present */
2032  char nodename[PATH_MAX + 1];
2033  int no_path_names = 1;
2034  int warn_violate = 0;
2035  int have_cmd_line_pathspec = 0;
2036  int rationalize_all = 0;
2037  int argind = 0;
2038 #ifdef APPLE_HYB
2039  int hfs_ct = 0;
2040 #endif /* APPLE_HYB */
2041 
2042 
2043 #ifdef __EMX__
2044  /* This gives wildcard expansion with Non-Posix shells with EMX */
2045  _wildcard(&argc, &argv);
2046 #endif
2047  save_args(argc, argv);
2048 
2049 #if defined(USE_NLS)
2050  setlocale(LC_ALL, "");
2051 #if !defined(TEXT_DOMAIN) /* Should be defined by cc -D */
2052 #define TEXT_DOMAIN "mkisofs" /* Use this only if it weren't */
2053 #endif
2054  arg = searchfileinpath("share/locale", F_OK,
2056  if (arg)
2057  (void) bindtextdomain(TEXT_DOMAIN, arg);
2058  else
2059 #ifdef PROTOTYPES
2060  (void) bindtextdomain(TEXT_DOMAIN, INS_BASE "/share/locale");
2061 #else
2062  (void) bindtextdomain(TEXT_DOMAIN, "/usr/share/locale");
2063 #endif
2064  (void) textdomain(TEXT_DOMAIN);
2065 #endif
2066 
2067 
2068  if (argc < 2) {
2069  errmsgno(EX_BAD, _("Missing pathspec.\n"));
2070  susage(1);
2071  }
2072  /* Get the defaults from the .mkisofsrc file */
2073  read_rcfile(argv[0]);
2074 
2075  {
2076  int i;
2077 
2078  for (i = 0; i < (int)OPTION_COUNT; i++) {
2079  flags[i] = mki_options[i].opt;
2080  }
2081  flags[i].ga_format = NULL;
2082  gl_flags = flags;
2083  }
2084  time(&begun);
2086  modification_date.l_sec = tv_begun.tv_sec;
2087  modification_date.l_usec = tv_begun.tv_usec;
2088  modification_date.l_gmtoff = -100;
2089 
2090  cac--;
2091  cav++;
2092  c = getvargs(&cac, &cav, GA_NO_PROPS, flags);
2093  if (c < 0) {
2094  if (c == BADFLAG && strchr(cav[0], '=')) {
2095  argind = argc - cac;
2096  goto args_ok;
2097  }
2098  error(_("Bad Option '%s' (error %d %s).\n"),
2099  cav[0], c, getargerror(c));
2100  susage(EX_BAD);
2101  }
2102 args_ok:
2103  if (argind == 0)
2104  argind = argc - cac;
2105  path_ind = argind;
2106  if (cac > 0)
2107  have_cmd_line_pathspec = 1;
2108  if (help)
2109  usage(0);
2110  if (pversion) {
2111  printf(_("mkisofs %s (%s-%s-%s)\n\n\
2112 Copyright (C) 1993-1997 %s\n\
2113 Copyright (C) 1997-2017 %s\n"),
2116  _("Eric Youngdale"),
2117  _("Joerg Schilling"));
2118 #ifdef APPLE_HYB
2119  printf(_("Copyright (C) 1997-2001 James Pearson\n"));
2120 #endif
2121 #ifdef UDF
2122  printf(_("Copyright (C) 2006 HELIOS Software GmbH\n"));
2123 #endif
2124 #ifdef OPTION_SILO_BOOT
2125  printf(_("Warning: this is unofficial (modified) version of mkisofs that incorporates\n"));
2126  printf(_(" support for a non Sparc compliant boot method called SILO.\n"));
2127  printf(_(" The official method to create Sparc boot CDs is to use -sparc-boot\n"));
2128  printf(_(" In case of problems first test with an official version of mkisofs.\n"));
2129 #endif
2130  exit(0);
2131  }
2132 #ifdef USE_FIND
2133  if (dofind) {
2134  finda_t fa;
2135 
2136  cac = find_ac;
2137  cav = find_av;
2138  find_firstprim(&cac, &cav);
2139  find_pac = cac;
2140  find_pav = cav;
2141  argind = argc - find_ac;
2142 
2143  if (cac > 0) {
2144  find_argsinit(&fa);
2145  fa.walkflags = walkflags;
2146  fa.Argc = cac;
2147  fa.Argv = (char **)cav;
2148  find_node = find_parse(&fa);
2149  if (fa.primtype == FIND_ERRARG)
2150  comexit(fa.error);
2151  if (fa.primtype != FIND_ENDARGS)
2152  comerrno(EX_BAD, _("Incomplete expression.\n"));
2153  plusp = fa.plusp;
2154  find_patlen = fa.patlen;
2155  walkflags = fa.walkflags;
2156  maxdepth = fa.maxdepth;
2157  mindepth = fa.mindepth;
2158 
2159  if (find_node &&
2160  !(check_image || print_size) &&
2161  (outfile == NULL ||
2162  (outfile[0] == '-' && outfile[1] == '\0'))) {
2163  if (find_pname(find_node, "-exec") ||
2164  find_pname(find_node, "-exec+") ||
2165  find_pname(find_node, "-ok"))
2166  comerrno(EX_BAD,
2167  _("Cannot -exec with '-o -'.\n"));
2168  }
2169  }
2170 
2171  if (find_ac <= 0 || find_ac == find_pac) {
2172  errmsgno(EX_BAD, _("Missing pathspec for -find.\n"));
2173  susage(EX_BAD);
2174  }
2175  }
2176 #endif
2177 #ifdef DVD_AUD_VID
2178 
2179  dvd_aud_vid_flag = (dvd_audio ? DVD_SPEC_AUDIO : 0)
2180  | (dvd_hybrid ? DVD_SPEC_HYBRD : 0)
2181  | (dvd_video ? DVD_SPEC_VIDEO : 0);
2182 
2183 #endif
2184 
2185  if (abstract) {
2186  if (strlen(abstract) > 37) {
2187  comerrno(EX_BAD,
2188  _("Abstract filename string too long (cur. %lld max. 37 chars).\n"),
2189  (Llong)strlen(abstract));
2190  }
2191  }
2192  if (appid) {
2193  if (strlen(appid) > 128) {
2194  comerrno(EX_BAD,
2195  _("Application-id string too long (cur. %lld max. 128 chars).\n"),
2196  (Llong)strlen(appid));
2197  }
2198  }
2199  if (biblio) {
2200  if (strlen(biblio) > 37) {
2201  comerrno(EX_BAD,
2202  _("Bibliographic filename string too long (cur. %lld max. 37 chars).\n"),
2203  (Llong)strlen(biblio));
2204  }
2205  }
2206 #ifdef DUPLICATES_ONCE
2207  /*
2208  * If -duplicates-once was specified, do not implicitly enable
2209  * -cache-inodes.
2210  */
2211  if (cache_inodes < 0 && duplicates_once)
2212  cache_inodes = 0;
2213 #endif
2214 #if defined(IS_CYGWIN)
2215  /*
2216  * If we have 64 bit inode numbers, Cygwin should be able to work
2217  * correctly on NTFS, otherwise disable caching unless it has
2218  * been enforced via -cache-inodes.
2219  */
2220  if (cache_inodes < 0 && sizeof (ino_t) < 8)
2221  cache_inodes = 0;
2222 #endif
2223  if (cache_inodes < 0)
2224  cache_inodes = 1;
2225 #ifdef DUPLICATES_ONCE
2226  if (!cache_inodes && !duplicates_once) {
2227 #else
2228  if (!cache_inodes) {
2229 #endif
2231  if (use_RockRidge) {
2232  errmsgno(EX_BAD,
2233  _("Warning: Cannot write inode/link information with -no-cache-inodes.\n"));
2234  } else {
2235  errmsgno(EX_BAD,
2236  _("Warning: Cannot add inode hints with -no-cache-inodes.\n"));
2237  }
2238  }
2239 #if defined(__MINGW32__)
2240  if (cache_inodes) {
2241  cache_inodes = 0;
2243  errmsgno(EX_BAD,
2244  _("Warning: cannot -cache-inodes on this platform - ignoring.\n"));
2245  }
2246 #endif
2247  if (!correct_inodes)
2248  rrip112 = FALSE;
2249  if (check_image) {
2250  check_session++;
2251  check_oldnames++;
2253  outfile = DEV_NULL;
2254  /*
2255  * cdrecord_data is handled specially in multi.c
2256  * as we cannot write to all strings.
2257  * If mkisofs is called with -C xx,yy
2258  * our default is overwritten.
2259  */
2260 /* cdrecord_data = "0,0";*/
2261  }
2262  if (copyright) {
2263  if (strlen(copyright) > 37) {
2264  comerrno(EX_BAD,
2265  _("Copyright filename string too long (cur. %lld max. 37 chars).\n"),
2266  (Llong)strlen(copyright));
2267  }
2268  }
2269  if (genboot_image)
2270  use_genboot++;
2271  if (boot_catalog)
2272  use_eltorito++;
2273  else
2275  if (omit_period && iso9660_level < 4)
2276  warn_violate++;
2277  if (data_change_warn)
2278  errconfig("WARN|GROW|SHRINK *");
2279  if (dirmode_str) {
2280  char *end = 0;
2281 
2282  rationalize++;
2283  use_RockRidge++;
2285 
2286  /*
2287  * If -new-dir-mode was specified, new_dir_mode is set
2288  * up later with a value that matches the -new-dir-mode arg.
2289  */
2291  if (!end || *end != 0 ||
2292  dirmode_to_use < 0 || dirmode_to_use > 07777) {
2293  comerrno(EX_BAD, _("Bad mode for -dir-mode\n"));
2294  }
2295  }
2296  if (disable_deep_reloc)
2297  RR_relocation_depth = 0xFFFFFFFF;
2298  if (filemode_str) {
2299  char *end = 0;
2300 
2301  rationalize++;
2302  use_RockRidge++;
2304 
2305  filemode_to_use = strtol(filemode_str, &end, 8);
2306  if (!end || *end != 0 ||
2307  filemode_to_use < 0 || filemode_to_use > 07777) {
2308  comerrno(EX_BAD, _("Bad mode for -file-mode\n"));
2309  }
2310  }
2311 #ifdef __warn_follow__
2312  if (follow_links) {
2313  errmsgno(EX_BAD,
2314  _("Warning: -follow-links does not always work correctly; be careful.\n"));
2315  }
2316 #endif
2317  if (gid_str) {
2318  char *end = 0;
2319 
2320  rationalize++;
2321  use_RockRidge++;
2322  rationalize_gid++;
2323 
2324  gid_to_use = strtol(gid_str, &end, 0);
2325  if (!end || *end != 0) {
2326  comerrno(EX_BAD, _("Bad value for -gid\n"));
2327  }
2328  }
2329  switch (iso9660_level) {
2330 
2331  case 1:
2332  /*
2333  * Only on file section
2334  * 8.3 d or d1 characters for files
2335  * 8 d or d1 characters for directories
2336  */
2337  break;
2338  case 2:
2339  /*
2340  * Only on file section
2341  */
2342  break;
2343  case 3:
2344  /*
2345  * No restrictions
2346  */
2347  do_largefiles++;
2348  break;
2349  case 4:
2350  /*
2351  * This is ISO-9660:1988 (ISO-9660 version 2)
2352  */
2353  do_largefiles++;
2354  iso9660_namelen = MAX_ISONAME_V2; /* allow 207 chars */
2355  full_iso9660_filenames++; /* 31+ chars */
2357  RR_relocation_depth = 0xFFFFFFFF;
2358 
2359  /*
2360  * From -U ...
2361  */
2362  omit_period++; /* trailing dot */
2364  relaxed_filenames++; /* all chars */
2365  allow_lowercase++; /* even lowcase */
2366  allow_multidot++; /* > 1 dots */
2367  break;
2368 
2369  default:
2370  comerrno(EX_BAD, _("Illegal iso9660 Level %d, use 1..3 or 4.\n"),
2371  iso9660_level);
2372  }
2373 
2374  if (joliet_long) {
2375  use_Joliet++;
2376  jlen = JLONGMAX;
2377  }
2378  if (jcharset) {
2379  use_Joliet++;
2380  icharset = jcharset;
2381  }
2382  if (max_filenames && iso9660_level < 4) {
2383  iso9660_namelen = MAX_ISONAME_V1; /* allow 37 chars */
2386  warn_violate++;
2387  }
2388  if (allow_leading_dots && iso9660_level < 4)
2389  warn_violate++;
2391  warn_violate++;
2392  if (new_dirmode_str) {
2393  char *end = 0;
2394 
2395  rationalize++;
2396 
2397  new_dir_mode = strtol(new_dirmode_str, &end, 8);
2398  if (!end || *end != 0 ||
2399  new_dir_mode < 0 || new_dir_mode > 07777) {
2400  comerrno(EX_BAD, _("Bad mode for -new-dir-mode\n"));
2401  }
2402  }
2403  if (sectype) {
2404  if (strcmp(sectype, "data") == 0)
2405  osecsize = 2048;
2406  else if (strcmp(sectype, "xa1") == 0)
2407  osecsize = 2056;
2408  else if (strcmp(sectype, "raw") == 0) {
2409  osecsize = 2352;
2410  comerrno(EX_BAD,
2411  _("Unsupported sector type '%s'.\n"),
2412  sectype);
2413  }
2414  }
2415  if (preparer) {
2416  if (strlen(preparer) > 128) {
2417  comerrno(EX_BAD, _("Preparer string too long (cur. %lld max. 128 chars).\n"),
2418  (Llong)strlen(preparer));
2419  }
2420  }
2421  if (publisher) {
2422  if (strlen(publisher) > 128) {
2423  comerrno(EX_BAD,
2424  _("Publisher string too long (cur. %lld max. 128 chars).\n"),
2425  (Llong)strlen(publisher));
2426  }
2427  }
2428  if (rationalize_rr) {
2429  rationalize_all++;
2430  use_RockRidge++;
2431  }
2432  if (stream_filename) {
2434  comerrno(EX_BAD,
2435  _("stream-file-name too long (%llu), max is %d.\n"),
2437  if (strchr(stream_filename, '/'))
2438  comerrno(EX_BAD, _("Illegal character '/' in stream-file-name.\n"));
2439  iso9660_level = 4;
2440  } else {
2441  stream_filename = omit_version_number ? "STREAM.IMG" : "STREAM.IMG;1";
2442  }
2443  if (system_id) {
2444  if (strlen(system_id) > 32) {
2445  comerrno(EX_BAD,
2446  _("System ID string too long\n"));
2447  }
2448  }
2449  if (trans_tbl)
2450  generate_tables++;
2451  else
2452  trans_tbl = "TRANS.TBL";
2453  if (ucs_level < 1 || ucs_level > 3)
2454  comerrno(EX_BAD, _("Illegal UCS Level %d, use 1..3.\n"),
2455  ucs_level);
2456 #ifdef DVD_AUD_VID
2457  if (dvd_aud_vid_flag) {
2458  if (!use_udf)
2459  rationalize_udf++;
2460  }
2461 #endif
2462 #ifdef UDF
2463  if (rationalize_udf) {
2464  rationalize_all++;
2465  use_udf++;
2466  }
2467 #endif
2468  if (uid_str) {
2469  char *end = 0;
2470 
2471  rationalize++;
2472  use_RockRidge++;
2473  rationalize_uid++;
2474 
2475  uid_to_use = strtol(uid_str, &end, 0);
2476  if (!end || *end != 0) {
2477  comerrno(EX_BAD, _("Bad value for -uid\n"));
2478  }
2479  }
2481  /*
2482  * Minimal (only truncation of 31+ characters)
2483  * translation of filenames.
2484  *
2485  * Forces -l, -d, -N, -allow-leading-dots,
2486  * -relaxed-filenames,
2487  * -allow-lowercase, -allow-multidot
2488  *
2489  * This is for HP-UX, which does not recognize ANY
2490  * extentions (Rock Ridge, Joliet), causing pain when
2491  * loading software. pfs_mount can be used to read the
2492  * extensions, but the untranslated filenames can be
2493  * read by the "native" cdfs mounter. Completely
2494  * violates iso9660.
2495  */
2496  full_iso9660_filenames++; /* 31 chars */
2497  omit_period++; /* trailing dot */
2500  relaxed_filenames++; /* all chars */
2501  allow_lowercase++; /* even lowcase */
2502  allow_multidot++; /* > 1 dots */
2503  warn_violate++;
2504  }
2505  if (no_allow_lowercase)
2506  allow_lowercase = 0;
2507  if (relaxed_filenames && iso9660_level < 4)
2508  warn_violate++;
2509  if (iso_translate == 0 && iso9660_level < 4)
2510  warn_violate++;
2511  if (allow_lowercase && iso9660_level < 4)
2512  warn_violate++;
2513  if (allow_multidot && iso9660_level < 4)
2514  warn_violate++;
2515  if (volume_id) {
2516  if (strlen(volume_id) > 32) {
2517  comerrno(EX_BAD,
2518  _("Volume ID string too long (cur. %lld max. 32 chars).\n"),
2519  (Llong)strlen(volume_id));
2520  }
2521  }
2522  if (volset_id) {
2523  if (strlen(volset_id) > 128) {
2524  comerrno(EX_BAD,
2525  _("Volume set ID string too long (cur. %lld max. 128 chars).\n"),
2526  (Llong)strlen(volset_id));
2527  }
2528  }
2529  if (volume_set_size) {
2530  if (volume_set_size <= 0) {
2531  comerrno(EX_BAD,
2532  _("Illegal Volume Set Size %d\n"), volume_set_size);
2533  }
2534  if (volume_set_size > 1) {
2535  comerrno(EX_BAD,
2536  _("Volume Set Size > 1 not yet supported\n"));
2537  }
2538  }
2539  if (volume_sequence_number) {
2541  comerrno(EX_BAD,
2542  _("Volume set sequence number too big\n"));
2543  }
2544  }
2545  if (rationalize_xa) {
2546  rationalize_all++;
2547  use_XA++;
2548  }
2550 #ifdef VMS
2551  comerrno(EX_BAD,
2552  _("Transparent compression not supported with VMS\n"));
2553 #endif
2554  }
2555 #ifdef APPLE_HYB
2556  if (deftype) {
2557  hfs_ct++;
2558  if (strlen(deftype) != 4) {
2559  comerrno(EX_BAD,
2560  _("HFS default TYPE string has illegal length.\n"));
2561  }
2562  } else {
2563  deftype = APPLE_TYPE_DEFAULT;
2564  }
2565  if (defcreator) {
2566  hfs_ct++;
2567  if (strlen(defcreator) != 4) {
2568  comerrno(EX_BAD,
2569  _("HFS default CREATOR string has illegal length.\n"));
2570  }
2571  } else {
2572  defcreator = APPLE_CREATOR_DEFAULT;
2573  }
2574  if (afpfile && *afpfile != '\0')
2575  hfs_last = MAP_LAST;
2576  if (magic_file)
2577  hfs_last = MAG_LAST;
2578  if (nomacfiles) {
2579  errmsgno(EX_BAD,
2580  _("Warning: -no-mac-files no longer used ... ignoring\n"));
2581  }
2582  if (hfs_boot_file)
2583  gen_pt = 1;
2584  if (root_info)
2585  icon_pos = 1;
2586  if (hfs_icharset)
2587  use_mac_name = 1;
2588  if (hfs_parms)
2589  hfs_parms = e_strdup(hfs_parms);
2590 
2591  if (apple_hyb && apple_ext) {
2592  comerrno(EX_BAD, _("Can't have both -apple and -hfs options\n"));
2593  }
2594  /*
2595  * if -probe, -macname, any hfs selection and/or mapping file is given,
2596  * but no HFS option, then select apple_hyb
2597  */
2598  if (!apple_hyb && !apple_ext) {
2599  if (*afpfile || probe || use_mac_name || hfs_select ||
2600  hfs_boot_file || magic_file ||
2601  hfs_ishidden() || gen_pt || autoname ||
2602  afe_size || icon_pos || hfs_ct ||
2603  hfs_icharset || hfs_ocharset) {
2604  apple_hyb = 1;
2605 #ifdef UDF
2606  if ((DO_XHFS & hfs_select) && use_udf) {
2607  donotwrite_macpart = 1;
2608  if (!no_apple_hyb) {
2609  error(
2610  _("Warning: no HFS hybrid will be created with -udf and --osx-hfs\n"));
2611  }
2612  }
2613 #endif
2614  }
2615  }
2616 #ifdef UDF
2617  if (!use_udf && create_udfsymlinks)
2618  create_udfsymlinks = 0;
2619 #if 0
2620  if (use_RockRidge && use_udf && create_udfsymlinks) {
2621  error(_("Warning: cannot create UDF symlinks with activated Rock Ridge\n"));
2622  create_udfsymlinks = 0;
2623  }
2624 #endif
2625 #endif
2626  if (no_apple_hyb) {
2627  donotwrite_macpart = 1;
2628  }
2629  if (apple_hyb && !donotwrite_macpart && do_largefiles > 0) {
2630  do_largefiles = 0;
2631  maxnonlarge = (off_t)0x7FFFFFFF;
2632  error(_("Warning: cannot support large files with -hfs\n"));
2633  }
2634 #ifdef UDF
2635  if (apple_hyb && use_udf && !donotwrite_macpart) {
2636  comerrno(EX_BAD, _("Can't have -hfs with -udf\n"));
2637  }
2638 #endif
2639  if (apple_ext && hfs_boot_file) {
2640  comerrno(EX_BAD, _("Can't have -hfs-boot-file with -apple\n"));
2641  }
2642  if (apple_ext && autoname) {
2643  comerrno(EX_BAD, _("Can't have -auto with -apple\n"));
2644  }
2645  if (apple_hyb && (use_sparcboot || use_sunx86boot)) {
2646  comerrno(EX_BAD, _("Can't have -hfs with -sparc-boot/-sunx86-boot\n"));
2647  }
2648  if (apple_hyb && use_genboot) {
2649  comerrno(EX_BAD, _("Can't have -hfs with -generic-boot\n"));
2650  }
2651 #ifdef PREP_BOOT
2652  if (apple_ext && use_prep_boot) {
2653  comerrno(EX_BAD, _("Can't have -prep-boot with -apple\n"));
2654  }
2655 #endif /* PREP_BOOT */
2656 
2657  if (apple_hyb || apple_ext)
2658  apple_both = 1;
2659 
2660  if (probe)
2661  /* we need to search for all types of Apple/Unix files */
2662  hfs_select = ~0;
2663 
2664  if (apple_both && verbose && !(hfs_select || *afpfile || magic_file)) {
2665  errmsgno(EX_BAD,
2666  _("Warning: no Apple/Unix files will be decoded/mapped\n"));
2667  }
2668  if (apple_both && verbose && !afe_size &&
2669  (hfs_select & (DO_FEU | DO_FEL))) {
2670  errmsgno(EX_BAD,
2671  _("Warning: assuming PC Exchange cluster size of 512 bytes\n"));
2672  afe_size = 512;
2673  }
2674  if (apple_both) {
2675  /* set up the TYPE/CREATOR mappings */
2676  hfs_init(afpfile, 0, hfs_select);
2677  }
2678  if (apple_ext && !use_RockRidge) {
2679 #ifdef nonono
2680  /* use RockRidge to set the SystemUse field ... */
2681  use_RockRidge++;
2682  rationalize_all++;
2683 #else
2684  /* EMPTY */
2685 #endif
2686  }
2687  if (apple_ext && !(use_XA || use_RockRidge)) {
2688  comerrno(EX_BAD, _("Need either -XA/-xa or -R/-r for -apple to become active.\n"));
2689  }
2690 #endif /* APPLE_HYB */
2691 
2692  /*
2693  * if the -hide-joliet option has been given, set the Joliet option
2694  */
2695  if (!use_Joliet && j_ishidden())
2696  use_Joliet++;
2697 #ifdef UDF
2698  /*
2699  * if the -hide-udf option has been given, set the UDF option
2700  */
2701  if (!use_udf && u_ishidden())
2702  use_udf++;
2703 #endif
2704 
2705  if (rationalize_all) {
2706  rationalize++;
2707  rationalize_uid++;
2708  rationalize_gid++;
2711  }
2712 
2713  /*
2714  * XXX This is a hack until we have a decent separate name handling
2715  * XXX for UDF filenames.
2716  */
2717 #ifdef DVD_AUD_VID
2718  if (dvd_aud_vid_flag && use_Joliet) {
2719  use_Joliet = 0;
2720  error(_("Warning: Disabling Joliet support for DVD-Video/DVD-Audio.\n"));
2721  }
2722 #endif
2723 #ifdef UDF
2724  if (use_udf && !use_Joliet)
2725  jlen = 255;
2726 #endif
2727 
2730 
2731  if (warn_violate)
2732  error(_("Warning: creating filesystem that does not conform to ISO-9660.\n"));
2733  if (iso9660_level > 3)
2734  error(_("Warning: Creating ISO-9660:1999 (version 2) filesystem.\n"));
2736  error(_("Warning: ISO-9660 filenames longer than %d may cause buffer overflows in the OS.\n"),
2737  LEN_ISONAME);
2738  if (use_Joliet && !use_RockRidge) {
2739  error(_("Warning: creating filesystem with (nonstandard) Joliet extensions\n"));
2740  error(_(" but without (standard) Rock Ridge extensions.\n"));
2741  error(_(" It is highly recommended to add Rock Ridge\n"));
2742  }
2744  error(_("Warning: using transparent compression. This is a nonstandard Rock Ridge\n"));
2745  error(_(" extension. The resulting filesystem can only be transparently\n"));
2746  error(_(" read on Linux. On other operating systems you need to call\n"));
2747  error(_(" mkzftree by hand to decompress the files.\n"));
2748  }
2750  error(_("Warning: transparent decompression is a Linux Rock Ridge extension, but\n"));
2751  error(_(" creating filesystem without Rock Ridge attributes; files\n"));
2752  error(_(" will not be transparently decompressed.\n"));
2753  }
2754 
2755 #if defined(USE_NLS) && defined(HAVE_NL_LANGINFO) && defined(CODESET)
2756  /*
2757  * If the locale has not been set up, nl_langinfo() returns the
2758  * name of the default codeset. This should be either "646",
2759  * "ISO-646", "ASCII", or something similar. Unfortunately, the
2760  * POSIX standard does not include a list of valid locale names,
2761  * so ne need to find all values in use.
2762  *
2763  * Observed:
2764  * Solaris "646"
2765  * Linux "ANSI_X3.4-1968" strange value from Linux...
2766  */
2767  if (icharset == NULL) {
2768  char *codeset = nl_langinfo(CODESET);
2769  Uchar *p;
2770 
2771  if (codeset != NULL)
2772  codeset = e_strdup(codeset);
2773  if (codeset == NULL) /* Should not happen */
2774  goto setcharset;
2775  if (*codeset == '\0') /* Invalid locale */
2776  goto setcharset;
2777 
2778  for (p = (Uchar *)codeset; *p != '\0'; p++) {
2779  if (islower(*p))
2780  *p = toupper(*p);
2781  }
2782  p = (Uchar *)strstr(codeset, "ISO");
2783  if (p != NULL) {
2784  if (*p == '_' || *p == '-')
2785  p++;
2786  codeset = (char *)p;
2787  }
2788  if (strcmp("646", codeset) != 0 &&
2789  strcmp("ASCII", codeset) != 0 &&
2790  strcmp("US-ASCII", codeset) != 0 &&
2791  strcmp("US_ASCII", codeset) != 0 &&
2792  strcmp("USASCII", codeset) != 0 &&
2793  strcmp("ANSI_X3.4-1968", codeset) != 0)
2794  icharset = nl_langinfo(CODESET);
2795 
2796  if (codeset != NULL)
2797  free(codeset);
2798 
2799  if (verbose > 0 && icharset != NULL) {
2800  error(_("Setting input-charset to '%s' from locale.\n"),
2801  icharset);
2802  }
2803  }
2804 setcharset:
2805  /*
2806  * Allow to switch off locale with -input-charset "".
2807  */
2808  if (icharset != NULL && *icharset == '\0')
2809  icharset = NULL;
2810 #endif
2811  if (icharset == NULL) {
2812 #if (defined(__CYGWIN32__) || defined(__CYGWIN__) || defined(__DJGPP__)) && !defined(IS_CYGWIN_1)
2813  icharset = "cp437";
2814 #else
2815  icharset = "default";
2816 #endif
2817  }
2819 
2820  /*
2821  * set the output charset to the same as the input or the given output
2822  * charset
2823  */
2824  if (ocharset == NULL) {
2826  }
2828 
2829  if (in_nls == NULL || out_nls == NULL) { /* Unknown charset specified */
2830  fprintf(stderr, _("Unknown charset '%s'.\nKnown charsets are:\n"),
2831  in_nls == NULL ? icharset : (ocharset ? ocharset : "NULL"));
2832  list_locales();
2833  exit(EX_BAD);
2834  }
2835 #ifdef USE_ICONV
2836  /*
2837  * XXX If we ever allow this, we neeed to fix the call to conv_charset()
2838  * XXX in name.c::iso9660_file_length().
2839  */
2840  if ((in_nls->sic_cd2uni != NULL || out_nls->sic_cd2uni != NULL) &&
2841  (in_nls->sic_name != out_nls->sic_name)) {
2842  errmsgno(EX_BAD,
2843  _("Iconv based locales may change file name length.\n"));
2844  comerrno(EX_BAD,
2845  _("Cannot yet have different -input-charset/-output-charset.\n"));
2846  }
2847 #endif
2848 
2849 #ifdef APPLE_HYB
2850  if (hfs_icharset == NULL || strcmp(hfs_icharset, "mac-roman") == 0) {
2851  hfs_icharset = "cp10000";
2852  }
2853  hfs_inls = sic_open(hfs_icharset);
2854 
2855  if (hfs_ocharset == NULL) {
2856  hfs_ocharset = hfs_inls ? hfs_inls->sic_name : NULL;
2857  }
2858  if (hfs_ocharset == NULL || strcmp(hfs_ocharset, "mac-roman") == 0) {
2859  hfs_ocharset = "cp10000";
2860  }
2861  hfs_onls = sic_open(hfs_ocharset);
2862 
2863  if (use_mac_name)
2864  apple_hyb = 1;
2865  if (apple_hyb && (hfs_inls == NULL || hfs_onls == NULL)) {
2866  fprintf(stderr, _("Unknown HFS charset '%s'.\nKnown charsets are:\n"),
2867  hfs_inls == NULL ? hfs_icharset : (hfs_ocharset ? hfs_ocharset : "NULL"));
2868  list_locales();
2869  exit(EX_BAD);
2870  }
2871 #ifdef USE_ICONV
2872  if (apple_hyb &&
2873  ((hfs_inls->sic_cd2uni != NULL || hfs_onls->sic_cd2uni != NULL) &&
2874  (hfs_inls->sic_name != hfs_onls->sic_name))) {
2875  errmsgno(EX_BAD,
2876  _("Iconv based locales may change file name length.\n"));
2877  comerrno(EX_BAD,
2878  _("Cannot yet have different -input-hfs-charset/-output-hfs-charset.\n"));
2879  }
2880 #endif
2881 #endif /* APPLE_HYB */
2882 
2883  if (merge_image != NULL) {
2884  if (open_merge_image(merge_image) < 0) {
2885  /* Complain and die. */
2886  comerr(_("Unable to open previous session image '%s'.\n"),
2887  merge_image);
2888  }
2889  }
2890  /* We don't need root privilleges anymore. */
2891 #ifdef HAVE_SETREUID
2892  if (setreuid(-1, getuid()) < 0)
2893 #else
2894 #ifdef HAVE_SETEUID
2895  if (seteuid(getuid()) < 0)
2896 #else
2897  if (setuid(getuid()) < 0)
2898 #endif
2899 #endif
2900  comerr(_("Panic cannot set back effective uid.\n"));
2901 
2902 
2903 #ifdef no_more_needed
2904 #ifdef __NetBSD__
2905  {
2906  int resource;
2907  struct rlimit rlp;
2908 
2909  if (getrlimit(RLIMIT_DATA, &rlp) == -1)
2910  errmsg(_("Warning: Cannot get rlimit.\n"));
2911  else {
2912  rlp.rlim_cur = 33554432;
2913  if (setrlimit(RLIMIT_DATA, &rlp) == -1)
2914  errmsg(_("Warning: Cannot set rlimit.\n"));
2915  }
2916  }
2917 #endif
2918 #endif /* no_more_needed */
2919 #ifdef HAVE_SBRK
2920  mem_start = (unsigned long) sbrk(0);
2921 #endif
2922 
2923  if (verbose > 1) {
2924  fprintf(stderr, "%s (%s-%s-%s)\n",
2927  }
2928  if (cdrecord_data == NULL && !check_session && merge_image != NULL) {
2929  comerrno(EX_BAD,
2930  _("Multisession usage bug: Must specify -C if -M is used.\n"));
2931  }
2932  if (cdrecord_data != NULL && merge_image == NULL) {
2933  errmsgno(EX_BAD,
2934  _("Warning: -C specified without -M: old session data will not be merged.\n"));
2935  }
2936 #ifdef APPLE_HYB
2937  if (merge_image != NULL && apple_hyb) {
2938  errmsgno(EX_BAD,
2939  _("Warning: files from previous sessions will not be included in the HFS volume.\n"));
2940  }
2941 #endif /* APPLE_HYB */
2942 
2943  /*
2944  * see if we have a list of pathnames to process
2945  */
2946  if (pathnames) {
2947  /* "-" means take list from the standard input */
2948  if (strcmp(pathnames, "-") != 0) {
2949  if ((pfp = fopen(pathnames, "r")) == NULL) {
2950  comerr(_("Unable to open pathname list %s.\n"),
2951  pathnames);
2952  }
2953  } else
2954  pfp = stdin;
2955  }
2956 
2957  /* The first step is to scan the directory tree, and take some notes */
2958 
2959  if ((arg = get_pnames(argc, argv, argind, pname,
2960  sizeof (pname), pfp)) == NULL) {
2961  if (check_session == 0 && !stream_media_size) {
2962  errmsgno(EX_BAD, _("Missing pathspec.\n"));
2963  susage(1);
2964  }
2965  }
2966 
2967  /*
2968  * if we don't have a pathspec, then save the pathspec found
2969  * in the pathnames file (stored in pname) - we don't want
2970  * to skip this pathspec when we read the pathnames file again
2971  */
2972  if (!have_cmd_line_pathspec && !stream_media_size) {
2973  save_pname = 1;
2974  }
2975  if (stream_media_size) {
2976 #ifdef UDF
2977  if (use_XA || use_RockRidge || use_udf || use_Joliet)
2978 #else
2979  if (use_XA || use_RockRidge || use_Joliet)
2980 #endif
2981  comerrno(EX_BAD,
2982  _("Cannot use XA, Rock Ridge, UDF or Joliet with -stream-media-size\n"));
2983  if (merge_image)
2984  comerrno(EX_BAD,
2985  _("Cannot use multi session with -stream-media-size\n"));
2987 #ifdef APPLE_HYB
2988  use_genboot || use_prep_boot || hfs_boot_file)
2989 #else
2990  use_genboot)
2991 #endif
2992  comerrno(EX_BAD,
2993  _("Cannot use boot options with -stream-media-size\n"));
2994 #ifdef APPLE_HYB
2995  if (apple_hyb)
2996  comerrno(EX_BAD,
2997  _("Cannot use Apple hybrid options with -stream-media-size\n"));
2998 #endif
2999  }
3000 
3001  if (use_RockRidge) {
3002  /* BEGIN CSTYLED */
3003 #if 1
3005  "THE ROCK RIDGE INTERCHANGE PROTOCOL PROVIDES SUPPORT FOR POSIX FILE SYSTEM SEMANTICS",
3006  "PLEASE CONTACT DISC PUBLISHER FOR SPECIFICATION SOURCE. SEE PUBLISHER IDENTIFIER IN PRIMARY VOLUME DESCRIPTOR FOR CONTACT INFORMATION.",
3008 #else
3010  "THE IEEE P1282 PROTOCOL PROVIDES SUPPORT FOR POSIX FILE SYSTEM SEMANTICS",
3011  "PLEASE CONTACT THE IEEE STANDARDS DEPARTMENT, PISCATAWAY, NJ, USA FOR THE P1282 SPECIFICATION.",
3013 #endif
3014  /* END CSTYLED */
3015  }
3016  checkarch(outfile);
3017  if (log_file) {
3018  FILE *lfp;
3019  int i;
3020 
3021  /* open log file - test that we can open OK */
3022  if ((lfp = fopen(log_file, "w")) == NULL) {
3023  comerr(_("Can't open logfile: '%s'.\n"), log_file);
3024  }
3025  fclose(lfp);
3026 
3027  /* redirect all stderr message to log_file */
3028  fprintf(stderr, _("re-directing all messages to %s\n"), log_file);
3029  fflush(stderr);
3030 
3031  /* associate stderr with the log file */
3032  if (freopen(log_file, "w", stderr) == NULL) {
3033  comerr(_("Can't open logfile: '%s'.\n"), log_file);
3034  }
3035  if (verbose > 1) {
3036  for (i = 0; i < argc; i++)
3037  fprintf(stderr, "%s ", argv[i]);
3038 
3039  fprintf(stderr, "\n%s (%s-%s-%s)\n",
3042  }
3043  }
3044  /* Find name of root directory. */
3045  if (arg != NULL)
3046  node = findgequal(arg);
3047  if (!use_graft_ptrs)
3048  node = NULL;
3049  if (node == NULL) {
3050  if (use_graft_ptrs && arg != NULL)
3051  node = escstrcpy(nodename, sizeof (nodename), arg);
3052  else
3053  node = arg;
3054  } else {
3055  /*
3056  * Remove '\\' escape chars which are located
3057  * before '\\' and '=' chars
3058  */
3059  node = escstrcpy(nodename, sizeof (nodename), ++node);
3060  }
3061 
3062  /*
3063  * See if boot catalog file exists in root directory, if not we will
3064  * create it.
3065  */
3066  if (use_eltorito)
3067  init_boot_catalog(node);
3068 
3069  /*
3070  * Find the device and inode number of the root directory. Record this
3071  * in the hash table so we don't scan it more than once.
3072  */
3073  stat_filter(node, &statbuf);
3074  add_directory_hash(statbuf.st_dev, STAT_INODE(statbuf));
3075 
3076  memset(&de, 0, sizeof (de));
3077 
3078  /*
3079  * PO:
3080  * Isn't root NULL at this time anyway?
3081  * I think it is created by the first call to
3082  * find_or_create_directory() below.
3083  */
3084  de.filedir = root; /* We need this to bootstrap */
3085 
3086  if (cdrecord_data != NULL && merge_image == NULL) {
3087  /*
3088  * in case we want to add a new session, but don't want to
3089  * merge old one
3090  */
3092  }
3093  if (merge_image != NULL) {
3094  char sector[SECTOR_SIZE];
3095  UInt32_t extent;
3096 
3097  errno = 0;
3098  mrootp = merge_isofs(merge_image);
3099  if (mrootp == NULL) {
3100  /* Complain and die. */
3101  if (errno == 0)
3102  errno = -1;
3103  comerr(_("Unable to find previous session PVD '%s'.\n"),
3104  merge_image);
3105  }
3106  memcpy(de.isorec.extent, mrootp->extent, 8);
3107 
3108  /*
3109  * Look for RR Attributes in '.' entry of root dir.
3110  * This is the first ISO directory entry in the root dir.
3111  */
3112  extent = get_733(mrootp->extent);
3113  readsecs(extent, sector, 1);
3114  c = rr_flags((struct iso_directory_record *)sector);
3115  if (c & RR_FLAG_XA)
3116  fprintf(stderr, _("XA signatures found\n"));
3117  if (c & RR_FLAG_AA)
3118  fprintf(stderr, _("AA signatures found\n"));
3119  if (c & ~(RR_FLAG_XA|RR_FLAG_AA)) {
3120  extern int su_version;
3121  extern int rr_version;
3122  extern char er_id[];
3123 
3124  if (c & RR_FLAG_SP) {
3125  fprintf(stderr, _("SUSP signatures version %d found\n"), su_version);
3126  if (c & RR_FLAG_ER) {
3127  if (rr_version < 1) {
3128  fprintf(stderr,
3129  _("No valid Rock Ridge signature found\n"));
3130  if (!force_rr)
3131  no_rr++;
3132  } else {
3133  fprintf(stderr,
3134  _("Rock Ridge signatures version %d found\n"),
3135  rr_version);
3136  fprintf(stderr,
3137  _("Rock Ridge id '%s'\n"), er_id);
3138  }
3139  }
3140  } else {
3141  fprintf(stderr, _("Bad Rock Ridge signatures found (SU record missing)\n"));
3142  if (!force_rr)
3143  no_rr++;
3144  }
3145  } else {
3146  fprintf(stderr, _("No SUSP/Rock Ridge present\n"));
3147  if ((c & (RR_FLAG_XA|RR_FLAG_AA)) == 0) {
3148  if (!force_rr)
3149  no_rr++;
3150  }
3151  }
3152  if (no_rr)
3153  fprintf(stderr, _("Disabling Rock Ridge / XA / AA\n"));
3154  }
3155  /*
3156  * Create an empty root directory. If we ever scan it for real,
3157  * we will fill in the contents.
3158  */
3159  find_or_create_directory(NULL, "", &de, TRUE);
3160 
3161 #ifdef APPLE_HYB
3162  /* may need to set window layout of the volume */
3163  if (root_info)
3164  set_root_info(root_info);
3165 #endif /* APPLE_HYB */
3166 
3167  /*
3168  * Scan the actual directory (and any we find below it) for files to
3169  * write out to the output image. Note - we take multiple source
3170  * directories and keep merging them onto the image.
3171  */
3172  if (check_session)
3173  goto path_done;
3174 
3175 #ifdef USE_FIND
3176  if (dofind) {
3177 extern int walkfunc __PR((char *nm, struct stat *fs, int type, struct WALK *state));
3178 
3179  walkinitstate(&walkstate);
3180  if (find_patlen > 0) {
3181  walkstate.patstate = ___malloc(sizeof (int) * find_patlen,
3182  _("space for pattern state"));
3183  }
3184 
3185  find_timeinit(time(0));
3186  walkstate.walkflags = walkflags;
3187  walkstate.maxdepth = maxdepth;
3188  walkstate.mindepth = mindepth;
3189  walkstate.lname = NULL;
3190  walkstate.tree = find_node;
3191  walkstate.err = 0;
3192  walkstate.pflags = 0;
3193 
3194  nodesc = TRUE;
3195  for (;
3196  (arg = get_pnames(argc, argv, argind, pname, sizeof (pname),
3197  pfp)) != NULL;
3198  argind++) {
3199  /*
3200  * Make silly GCC happy and double initialize graft_dir.
3201  */
3202  struct directory *graft_dir = NULL;
3203  char graft_point[PATH_MAX + 1];
3204  struct wargs wa;
3205  char *snp;
3206 
3207  graft_point[0] = '\0';
3208  snp = NULL;
3209  if (use_graft_ptrs)
3210  graft_dir = get_graft(arg,
3211  graft_point, sizeof (graft_point),
3212  nodename, sizeof (nodename),
3213  &snp, FALSE);
3214  if (graft_point[0] != '\0') {
3215  arg = nodename;
3216  wa.dir = graft_dir;
3217  } else {
3218  wa.dir = root;
3219  }
3220  wa.name = snp;
3221  walkstate.auxp = &wa;
3222  walkstate.auxi = strlen(arg);
3223  treewalk(arg, walkfunc, &walkstate);
3224  no_path_names = 0;
3225  }
3226  find_plusflush(plusp, &walkstate);
3227  } else
3228 #endif
3229 
3230  while ((arg = get_pnames(argc, argv, argind, pname,
3231  sizeof (pname), pfp)) != NULL) {
3232  char graft_point[PATH_MAX + 1];
3233 
3234  get_graft(arg, graft_point, sizeof (graft_point),
3235  nodename, sizeof (nodename), NULL, TRUE);
3236  argind++;
3237  no_path_names = 0;
3238  }
3239 
3240 path_done:
3241  if (pfp && pfp != stdin)
3242  fclose(pfp);
3243 
3244  /*
3245  * exit if we don't have any pathnames to process
3246  * - not going to happen at the moment as we have to have at least one
3247  * path on the command line
3248  */
3249  if (no_path_names && !check_session && !stream_media_size) {
3250  errmsgno(EX_BAD, _("No pathnames found.\n"));
3251  susage(1);
3252  }
3253  /*
3254  * Now merge in any previous sessions. This is driven on the source
3255  * side, since we may need to create some additional directories.
3256  */
3257  if (merge_image != NULL) {
3258  if (merge_previous_session(root, mrootp,
3259  reloc_root, reloc_old_root) < 0) {
3260  comerrno(EX_BAD, _("Cannot merge previous session.\n"));
3261  }
3263 
3264  /*
3265  * set up parent_dir and filedir in relocated entries which
3266  * were read from previous session so that
3267  * finish_cl_pl_entries can do its job
3268  */
3270  free(mrootp);
3271  }
3272 #ifdef APPLE_HYB
3273  /* free up any HFS filename mapping memory */
3274  if (apple_both)
3275  clean_hfs();
3276 #endif /* APPLE_HYB */
3277 
3278  /* hide "./rr_moved" if all its contents have been hidden */
3279  if (reloc_dir && i_ishidden())
3280  hide_reloc_dir();
3281 
3282  /* insert the boot catalog if required */
3283  if (use_eltorito)
3284  insert_boot_cat();
3285 
3286  /*
3287  * Free up any matching memory
3288  */
3289  for (n = 0; n < MAX_MAT; n++)
3290  gen_del_match(n);
3291 
3292 #ifdef SORTING
3293  del_sort();
3294 #endif /* SORTING */
3295 
3296  /*
3297  * Sort the directories in the required order (by ISO9660). Also,
3298  * choose the names for the 8.3 filesystem if required, and do any
3299  * other post-scan work.
3300  */
3301  goof += sort_tree(root);
3302 
3303  if (goof) {
3304  comerrno(EX_BAD, _("ISO9660/Rock Ridge tree sort failed.\n"));
3305  }
3306 #ifdef UDF
3307  if (use_Joliet || use_udf) {
3308 #else
3309  if (use_Joliet) {
3310 #endif
3312  }
3313  if (goof) {
3314  comerrno(EX_BAD, _("Joliet tree sort failed.\n"));
3315  }
3316  /*
3317  * Fix a couple of things in the root directory so that everything is
3318  * self consistent. Fix this up so that the path tables get done right.
3319  */
3320  root->self = root->contents;
3321 
3322  /* OK, ready to write the file. Open it up, and generate the thing. */
3323  if (print_size) {
3324  discimage = fopen(DEV_NULL, "wb");
3325  if (!discimage) {
3326  comerr(_("Unable to open /dev/null\n"));
3327  }
3328  } else if (outfile != NULL &&
3329  !(outfile[0] == '-' && outfile[1] == '\0')) {
3330  discimage = fopen(outfile, "wb");
3331  if (!discimage) {
3332  comerr(_("Unable to open disc image file '%s'.\n"), outfile);
3333  }
3334  } else {
3335  discimage = stdout;
3337  }
3338 #ifdef HAVE_SETVBUF
3339  setvbuf(discimage, NULL, _IOFBF, 64*1024);
3340 #endif
3341 
3342  /* Now assign addresses on the disc for the path table. */
3343 
3345  if (path_blocks & 1)
3346  path_blocks++;
3347 
3349  if (jpath_blocks & 1)
3350  jpath_blocks++;
3351 
3352  /*
3353  * Start to set up the linked list that we use to track the contents
3354  * of the disc.
3355  */
3356 #ifdef APPLE_HYB
3357 #ifdef PREP_BOOT
3358  if ((apple_hyb && !donotwrite_macpart) || use_prep_boot || use_chrp_boot)
3359 #else /* PREP_BOOT */
3360  if (apple_hyb && !donotwrite_macpart)
3361 #endif /* PREP_BOOT */
3362  outputlist_insert(&hfs_desc);
3363 #endif /* APPLE_HYB */
3366  if (use_genboot)
3369 
3370  /* PVD for disc. */
3372 
3373  /* SVD for El Torito. MUST be immediately after the PVD! */
3374  if (use_eltorito) {
3376  }
3377  /* Enhanced PVD for disc. neded if we write ISO-9660:1999 */
3378  if (iso9660_level > 3)
3380 
3381  /* SVD for Joliet. */
3382  if (use_Joliet) {
3384  }
3385  /* Finally the last volume descriptor. */
3387 
3388 #ifdef UDF
3389  if (use_udf) {
3390  outputlist_insert(&udf_vol_recognition_area_frag);
3391  }
3392 #endif
3393 
3394  /* Insert the version descriptor. */
3396 
3397 #ifdef UDF
3398  if (use_udf) {
3399  /*
3400  * Most of the space before sector 256 is wasted when
3401  * UDF is turned on. The waste could be reduced by
3402  * putting the ISO9660/Joliet structures before the
3403  * pad_to_sector_256; the problem is that they might
3404  * overshoot sector 256, so there would have to be some
3405  * ugly logic to detect this case and rearrange things
3406  * appropriately. I don't know if it's worth it.
3407  */
3408  outputlist_insert(&udf_pad_to_sector_32_frag);
3409  outputlist_insert(&udf_main_seq_frag);
3410  outputlist_insert(&udf_main_seq_copy_frag);
3411  outputlist_insert(&udf_integ_seq_frag);
3412  outputlist_insert(&udf_pad_to_sector_256_frag);
3413  outputlist_insert(&udf_anchor_vol_desc_frag);
3414  outputlist_insert(&udf_file_set_desc_frag);
3415  outputlist_insert(&udf_dirtree_frag);
3416  outputlist_insert(&udf_file_entries_frag);
3417  }
3418 #endif
3419 
3420  /* Now start with path tables and directory tree info. */
3421  if (!stream_media_size)
3423  else
3425 
3426  if (use_Joliet) {
3428  }
3429 
3430  if (!stream_media_size)
3432 
3433  if (use_Joliet) {
3435  }
3437 
3438  if (extension_record) {
3440  }
3441 
3442  if (!stream_media_size) {
3444  } else {
3447  }
3448 
3449  /*
3450  * Allow room for the various headers we will be writing.
3451  * There will always be a primary and an end volume descriptor.
3452  */
3454 
3455  /*
3456  * Calculate the size of all of the components of the disc, and assign
3457  * extent numbers.
3458  */
3459  for (opnt = out_list; opnt; opnt = opnt->of_next) {
3460  opnt->of_start_extent = last_extent;
3461  if (opnt->of_size != NULL) {
3462  if (verbose > 2)
3463  fprintf(stderr, _("Computing size: %-40sStart Block %u\n"),
3464  opnt->of_name, last_extent);
3465  (*opnt->of_size) (last_extent);
3466  }
3467  }
3468 
3469  /*
3470  * Generate the contents of any of the sections that we want to
3471  * generate. Not all of the fragments will do anything here
3472  * - most will generate the data on the fly when we get to the write
3473  * pass.
3474  */
3475  for (opnt = out_list; opnt; opnt = opnt->of_next) {
3476  if (opnt->of_generate != NULL) {
3477  if (verbose > 2)
3478  fprintf(stderr, _("Generating content: %-40s\n"),
3479  opnt->of_name);
3480  (*opnt->of_generate) ();
3481  }
3482  }
3483 
3484  /*
3485  * Padding just after the ISO-9660 filesystem.
3486  *
3487  * files_desc does not have an of_size function. For this
3488  * reason, we must insert us after the files content has been
3489  * generated.
3490  */
3491 #ifdef UDF
3492  if (use_udf) {
3493  /* Single anchor volume descriptor pointer at end */
3494  outputlist_insert(&udf_end_anchor_vol_desc_frag);
3495  if (udf_end_anchor_vol_desc_frag.of_size != NULL) {
3496  (*udf_end_anchor_vol_desc_frag.of_size) (last_extent);
3497  }
3498  if (dopad) {
3499  /*
3500  * Pad with anchor volume descriptor pointer
3501  * blocks instead of zeroes.
3502  */
3503  outputlist_insert(&udf_padend_avdp_frag);
3504  if (udf_padend_avdp_frag.of_size != NULL) {
3505  (*udf_padend_avdp_frag.of_size) (last_extent);
3506  }
3507  }
3508  } else
3509 #endif
3510  if (dopad && !(use_sparcboot || use_sunx86boot)) {
3512  if (endpad_desc.of_size != NULL) {
3513  (*endpad_desc.of_size) (last_extent);
3514  }
3515  }
3516  c = 0;
3517  if (use_sparcboot) {
3518  if (dopad) {
3519  /* Padding before the boot partitions. */
3521  if (interpad_desc.of_size != NULL) {
3522  (*interpad_desc.of_size) (last_extent);
3523  }
3524  }
3525  c = make_sun_label();
3526  last_extent += c;
3528  if (dopad) {
3530  if (endpad_desc.of_size != NULL) {
3531  (*endpad_desc.of_size) (last_extent);
3532  }
3533  }
3534  } else if (use_sunx86boot) {
3535  if (dopad) {
3536  /* Padding before the boot partitions. */
3538  if (interpad_desc.of_size != NULL) {
3539  (*interpad_desc.of_size) (last_extent);
3540  }
3541  }
3542  c = make_sunx86_label();
3543  last_extent += c;
3545  if (dopad) {
3547  if (endpad_desc.of_size != NULL) {
3548  (*endpad_desc.of_size) (last_extent);
3549  }
3550  }
3551  }
3552  if (print_size > 0) {
3553  if (verbose > 0)
3554  fprintf(stderr,
3555  _("Total extents scheduled to be written = %u\n"),
3557  printf("%u\n", (last_extent - session_start));
3558  exit(0);
3559  }
3560  /*
3561  * Now go through the list of fragments and write the data that
3562  * corresponds to each one.
3563  */
3564  for (opnt = out_list; opnt; opnt = opnt->of_next) {
3565  Uint oext;
3566 
3567  oext = last_extent_written;
3568  if (opnt->of_start_extent != 0 &&
3570  /*
3571  * Consistency check.
3572  * XXX Should make sure that all entries have
3573  * XXXX of_start_extent set up correctly.
3574  */
3575  comerrno(EX_BAD,
3576  _("Implementation botch: %s should start at %u but starts at %u.\n"),
3578  }
3579  if (opnt->of_write != NULL) {
3580  if (verbose > 1)
3581  fprintf(stderr, _("Writing: %-40sStart Block %u\n"),
3582  opnt->of_name, last_extent_written);
3583  (*opnt->of_write) (discimage);
3584  if (verbose > 1)
3585  fprintf(stderr, _("Done with: %-40sBlock(s) %u\n"),
3586  opnt->of_name, last_extent_written-oext);
3587  }
3588  }
3590  comerrno(EX_BAD,
3591  _("Implementation botch: FS should end at %u but ends at %u.\n"),
3593  }
3594 
3595  if (verbose > 0) {
3596 #ifdef HAVE_SBRK
3597  fprintf(stderr, _("Max brk space used %x\n"),
3598  (unsigned int)(((unsigned long) sbrk(0)) - mem_start));
3599 #endif
3600  fprintf(stderr, _("%u extents written (%u MB)\n"),
3602  (last_extent-session_start) >> 9);
3603  }
3604 #ifdef VMS
3605  return (1);
3606 #else
3607  return (0);
3608 #endif
3609 }
int full_iso9660_filenames
Definition: mkisofs.c:244
#define FALSE
Definition: mkisofs.c:1644
int jlen
Definition: mkisofs.c:114
unsigned int path_blocks
Definition: mkisofs.c:80
char * volume_id
Definition: mkisofs.c:166
char * of_name
Definition: mkisofs.h:195
int allow_leading_dots
Definition: mkisofs.c:251
EXPORT siconvt_t * sic_open(char *charset)
Definition: sic_nls.c:160
LOCAL void read_rcfile(char *appname)
Definition: mkisofs.c:1489
static int argc
Definition: ServiceArgs.c:15
Definition: graphics.c:176
int dopad
Definition: mkisofs.c:154
EXPORT void * ___malloc(size_t size, char *msg)
Definition: mem.c:53
int allow_multidot
Definition: mkisofs.c:249
BOOL follow_links
Definition: mkisofs.c:134
int dirmode_to_use
Definition: mkisofs.c:151
struct output_fragment sunboot_desc
Definition: boot.c:553
int rationalize_rr
Definition: mkisofs.c:191
EXPORT void comerr(char *msg, va_alist)
Definition: comerr.c:84
#define GA_NO_PROPS
Definition: getargs.h:105
BOOL rrip112
Definition: mkisofs.c:325
#define HOST_CPU
Definition: xconfig.h:211
EXPORT void outputlist_insert(struct output_fragment *frag)
Definition: write.c:1895
#define error(str)
Definition: mkdosfs.c:1605
struct output_fragment extension_desc
Definition: write.c:3029
unsigned char Uchar
Definition: utypes.h:45
Definition: mkisofs.h:107
long Llong
Definition: stdint.h:152
LOCAL void checkarch(char *name)
Definition: mkisofs.c:3964
int iso9660_level
Definition: mkisofs.c:242
char * sectype
Definition: mkisofs.c:192
char * extension_record
Definition: mkisofs.c:90
#define bindtextdomain(d, dir)
Definition: nlsdefs.h:80
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
int help
Definition: mkisofs.c:184
struct output_fragment jpathtable_desc
Definition: joliet.c:1455
struct directory * get_graft(char *arg, char *graft_point, size_t glen, char *nodename, size_t nlen, char **short_namep, BOOL do_insert)
Definition: mkisofs.c:3690
char * strstr(char *String1, char *String2)
Definition: utclib.c:653
char extent[ISODCL(3, 10)]
Definition: iso9660.h:248
Uint RR_relocation_depth
Definition: mkisofs.c:239
char * reloc_root
Definition: mkisofs.c:177
#define free
Definition: debug_ros.c:5
int use_sparcboot
Definition: mkisofs.c:107
int untranslated_filenames
Definition: mkisofs.c:194
char * merge_image
Definition: mkisofs.c:175
#define RR_FLAG_AA
Definition: rock.h:38
int joliet_long
Definition: mkisofs.c:185
LOCAL char * escstrcpy(char *to, size_t tolen, char *from)
Definition: mkisofs.c:3659
char * genboot_image
Definition: mkisofs.c:170
EXPORT int make_sunx86_label()
Definition: boot.c:287
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
int cache_inodes
Definition: mkisofs.c:141
int max_filenames
Definition: mkisofs.c:187
char * cdrecord_data
Definition: multi.c:1748
char * biblio
Definition: mkisofs.c:163
BOOL nodesc
Definition: mkisofs.c:202
FILE * stdin
struct timeval tv_begun
Definition: write.c:306
void * arg
Definition: msvc.h:12
EXPORT int stat_filter(char *path, struct stat *st)
Definition: tree.c:232
siconvt_t * hfs_inls
int donotwrite_macpart
Definition: mkisofs.c:298
GLuint GLuint end
Definition: gl.h:1545
#define DEV_NULL
Definition: compat.h:24
gid_t gid_to_use
Definition: mkisofs.c:149
int rationalize
Definition: mkisofs.c:143
int errno
__u16 time
Definition: mkdosfs.c:366
EXPORT char * e_strdup(char *s) const
Definition: mkisofs.c:3941
#define BOOT_CATALOG_DEFAULT
Definition: defaults.h:23
char * system_id
Definition: mkisofs.c:167
char *abstract char * volset_id
Definition: mkisofs.c:165
int resource
Definition: rdpsnd_sgi.c:44
#define j_ishidden()
Definition: match.h:78
Definition: fs.h:235
int do_largefiles
Definition: mkisofs.c:240
LOCAL int save_pname
Definition: mkisofs.c:1043
iconv_t sic_cd2uni
Definition: siconv.h:42
LOCAL struct ga_flags * gl_flags
Definition: mkisofs.c:999
char * publisher
Definition: mkisofs.c:160
static char ** argv
Definition: ServiceArgs.c:14
unsigned int Uint
Definition: utypes.h:43
#define RR_FLAG_ER
Definition: rock.h:42
FILE * stdout
uint8_t sector
Definition: isohybrid.c:61
int check_oldnames
Definition: mkisofs.c:98
int open_merge_image(char *path)
Definition: multi.c:1365
#define _IOFBF
Definition: stdio.h:128
#define i_ishidden()
Definition: match.h:74
#define F_OK
Definition: util.h:52
struct output_fragment dirtree_clean
Definition: write.c:3028
unsigned long Ullong
Definition: stdint.h:153
EXPORT void init_boot_catalog(char *path) const
Definition: eltorito.c:67
GLuint n
Definition: s_context.h:57
LOCAL void hide_reloc_dir()
Definition: mkisofs.c:1947
struct output_fragment strpath_desc
Definition: stream.c:257
#define gettimeofday(tv, tz)
Definition: adns_win32.h:159
GLenum GLclampf GLint i
Definition: glfuncs.h:14
int rationalize_xa
Definition: mkisofs.c:196
#define dvd_aud_vid_flag
int extension_record_size
Definition: mkisofs.c:92
struct output_fragment dirtree_desc
Definition: write.c:3027
EXPORT int setuid(uid_t uid)
Definition: uid.c:47
#define _(X)
Definition: i386-dis.c:36
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
int omit_version_number
Definition: mkisofs.c:236
struct output_fragment end_vol
Definition: write.c:3024
#define SIP_ANY_FILE
Definition: schily.h:428
int force_rr
Definition: mkisofs.c:238
int use_sunx86boot
Definition: mkisofs.c:108
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:47
struct output_fragment strdir_desc
Definition: stream.c:256
LOCAL BOOL data_change_warn
Definition: mkisofs.c:224
UInt32_t last_extent
Definition: mkisofs.c:76
char * appid
Definition: mkisofs.c:161
off_t maxnonlarge
Definition: mkisofs.c:241
EXPORT UInt32_t get_733(void *vp)
Definition: isonum.c:219
LOCAL void susage(int excode)
Definition: mkisofs.c:1648
int iso_translate
Definition: mkisofs.c:250
smooth NULL
Definition: ftsmooth.c:557
char * icharset
Definition: mkisofs.c:157
unsigned long
Definition: typeof.h:99
EXPORT int errmsg(char *msg, va_alist)
Definition: comerr.c:192
int rationalize_uid
Definition: mkisofs.c:144
EXPORT int make_sun_label()
Definition: boot.c:243
unsigned int of_start_extent
Definition: mkisofs.h:196
unsigned int jpath_blocks
Definition: mkisofs.c:85
#define ISO_BLOCKS(X)
Definition: mkisofs.h:743
struct output_fragment genboot_desc
Definition: boot.c:555
#define off_t
Definition: dosfsck.h:5
LOCAL void usage(int excode)
Definition: mkisofs.c:1794
char * pathnames
Definition: mkisofs.c:190
#define JLONGMAX
Definition: mkisofs.h:420
LOCAL int getH __PR((const char *arg, void *valp, int *pac, char *const **pav, const char *opt))
struct output_fragment joliet_desc
Definition: joliet.c:1454
#define HOST_VENDOR
Definition: xconfig.h:212
char * jcharset
Definition: mkisofs.c:186
#define BADFLAG
Definition: getargs.h:58
struct output_fragment * out_list
Definition: write.c:75
#define MAX_ISONAME_V1
Definition: iso9660.h:238
EXPORT int errconfig(char *name)
Definition: checkerr.c:67
LOCAL int walkflags
Definition: mkisofs.c:218
LOCAL void list_locales()
Definition: mkisofs.c:3612
#define LC_ALL
Definition: locale.h:25
int toupper(int c)
Definition: utclib.c:881
EXPORT int joliet_sort_tree(struct directory *node)
Definition: joliet.c:1317
int verbose
Definition: mkisofs.c:128
EXPORT char * searchfileinpath(char *name, int mode, int file_mode, char *path)
Definition: searchinpath.c:68
int iso9660_namelen
Definition: mkisofs.c:243
char * reloc_old_root
Definition: mkisofs.c:178
struct output_fragment torito_desc
Definition: eltorito.c:686
int check_session
Definition: mkisofs.c:99
#define SECTOR_SIZE
Definition: winldr.h:34
_Check_return_ _CRTIMP int __cdecl fileno(_In_ FILE *_File)
int transparent_compression
Definition: mkisofs.c:235
struct directory * reloc_dir
Definition: tree.c:111
int stream_media_size
Definition: mkisofs.c:260
int use_RockRidge
Definition: mkisofs.c:110
struct output_fragment voldesc_desc
Definition: write.c:3022
unsigned int path_table_size
Definition: mkisofs.c:78
#define u_ishidden()
Definition: match.h:82
char * copyright
Definition: mkisofs.c:162
EXPORT int seteuid(uid_t uid)
Definition: uid.c:58
EXPORT void add_directory_hash(dev_t dev, ino_t inode)
Definition: hash.c:346
LOCAL const struct mki_option mki_options[]
Definition: mkisofs.c:1045
int create_udfsymlinks
#define MAX_ISONAME
Definition: iso9660.h:242
UInt32_t session_start
Definition: mkisofs.c:77
#define OPTION_COUNT
Definition: mkisofs.c:1467
Definition: mkisofs.h:79
char * log_file
Definition: mkisofs.c:188
struct output_fragment interpad_desc
Definition: write.c:3031
#define PATH_MAX
Definition: types.h:280
EXPORT void gen_del_match(int n)
Definition: match.c:395
siconvt_t * in_nls
Definition: mkisofs.c:332
int volume_sequence_number
Definition: mkisofs.c:173
int close_merge_image()
Definition: multi.c:1387
LOCAL char * get_pnames(int argc, char *const *argv, int opt, char *pname, int pnsize, FILE *fp)
Definition: mkisofs.c:1969
int rationalize_filemode
Definition: mkisofs.c:146
int allow_lowercase
Definition: mkisofs.c:247
GLbitfield flags
Definition: glext.h:7161
char * trans_tbl
Definition: mkisofs.c:259
ldate modification_date
Definition: mkisofs.c:197
int rr_version
Definition: multi.c:94
#define LEN_ISONAME
Definition: iso9660.h:237
#define exit(n)
Definition: config.h:202
int path_ind
Definition: mkisofs.c:69
struct output_fragment strfile_desc
Definition: stream.c:255
UInt32_t last_extent_written
Definition: write.c:303
int use_Joliet
Definition: mkisofs.c:113
int omit_period
Definition: mkisofs.c:234
static int state
Definition: maze.c:121
EXPORT void save_args(int ac, av)
Definition: saveargs.c:58
struct output_fragment * of_next
Definition: mkisofs.h:191
Definition: stat.h:55
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
FILE * discimage
Definition: mkisofs.c:74
char * outfile
Definition: mkisofs.c:73
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
#define islower(c)
Definition: acclib.h:72
int no_allow_lowercase
Definition: mkisofs.c:248
EXPORT char * getargerror(int err)
Definition: getargs.c:1335
int rationalize_dirmode
Definition: mkisofs.c:147
struct output_fragment endpad_desc
Definition: write.c:3032
int volume_set_size
Definition: mkisofs.c:172
_Check_return_ _CRTIMP int __cdecl setmode(_In_ int _FileHandle, _In_ int _Mode)
char * check_image
Definition: mkisofs.c:176
char * ocharset
Definition: mkisofs.c:158
int print_size
Definition: mkisofs.c:155
void match_cl_re_entries()
Definition: multi.c:2131
EXPORT void comexit(int err)
Definition: comerr.c:331
struct output_fragment startpad_desc
Definition: write.c:3021
char * stream_filename
Definition: mkisofs.c:261
__u32 ino_t
Definition: types.h:27
#define STAT_INODE(X)
Definition: mkisofs.h:785
char * uid_str
Definition: mkisofs.c:193
int rationalize_gid
Definition: mkisofs.c:145
struct output_fragment jdirtree_desc
Definition: joliet.c:1456
EXPORT void insert_boot_cat()
Definition: eltorito.c:124
int pversion
Definition: mkisofs.c:195
_Check_return_opt_ _CRTIMP int __cdecl fflush(_Inout_opt_ FILE *_File)
char * gid_str
Definition: mkisofs.c:183
struct directory * root
Definition: mkisofs.c:68
int rr_flags(struct iso_directory_record *idr)
Definition: multi.c:353
EXPORT char * findgequal(char *s)
Definition: mkisofs.c:3642
#define O_BINARY
Definition: acwin.h:83
int osecsize
Definition: mkisofs.c:112
int use_genboot
Definition: mkisofs.c:109
unsigned int jpath_table_size
Definition: mkisofs.c:83
int no_rr
Definition: mkisofs.c:237
struct output_fragment pathtable_desc
Definition: write.c:3026
uid_t getuid()
Definition: uid.c:27
EXPORT int sort_tree(struct directory *node)
Definition: tree.c:2842
char * sic_name
Definition: siconv.h:39
char * new_dirmode_str
Definition: mkisofs.c:189
time_t l_sec
Definition: mkisofs.h:332
EXPORT void comerrno(int err, char *msg, va_alist)
Definition: comerr.c:137
char * strchr(const char *String, int ch)
Definition: utclib.c:501
int use_eltorito
Definition: mkisofs.c:100
#define textdomain(a)
Definition: nlsdefs.h:78
EXPORT char * generate_rr_extension_record(char *id, char *descriptor, char *source, int *size)
Definition: rock.c:903
EXPORT struct directory * find_or_create_directory(struct directory *parent, char *path, struct directory_entry *de, int flag)
Definition: tree.c:2508
struct output_fragment files_desc
Definition: write.c:3030
char er_id[256]
Definition: multi.c:96
_Check_return_ long __cdecl strtol(_In_z_ const char *_Str, _Out_opt_ _Deref_post_z_ char **_EndPtr, _In_ int _Radix)
struct iso_directory_record * merge_isofs(char *path)
Definition: multi.c:1401
EXPORT int readsecs(UInt32_t startsecno, void *buffer, int sectorcount)
Definition: multi.c:118
#define SIP_NO_PATH
Definition: schily.h:430
#define MAX_ISONAME_V2
Definition: iso9660.h:239
#define c
Definition: ke_i.h:80
#define RR_FLAG_XA
Definition: rock.h:39
FILE * stderr
#define HOST_OS
Definition: xconfig.h:213
char * boot_catalog
Definition: mkisofs.c:168
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
uid_t uid_to_use
Definition: mkisofs.c:148
_Check_return_ _CRTIMP FILE *__cdecl freopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode, _Inout_ FILE *_File)
#define TRUE
Definition: mkisofs.c:1640
#define setlocale(n, s)
Definition: locale.h:46
char version_string[]
Definition: mkisofs.c:71
int ucs_level
Definition: mkisofs.c:171
int filemode_to_use
Definition: mkisofs.c:150
int disable_deep_reloc
Definition: mkisofs.c:180
_Check_return_opt_ _CRTIMP int __cdecl setvbuf(_Inout_ FILE *_File, _Inout_updates_opt_z_(_Size) char *_Buf, _In_ int _Mode, _In_ size_t _Size)
siconvt_t * out_nls
Definition: mkisofs.c:333
int use_XA
Definition: mkisofs.c:111
char * preparer
Definition: mkisofs.c:159
struct output_fragment xvoldesc_desc
Definition: write.c:3023
int generate_tables
Definition: mkisofs.c:153
struct output_fragment sunlabel_desc
Definition: boot.c:554
int get_session_start(int *file_addr)
Definition: multi.c:1751
#define RR_FLAG_SP
Definition: rock.h:37
int goof
Definition: mkisofs.c:1637
char * filemode_str
Definition: mkisofs.c:182
char * dirmode_str
Definition: mkisofs.c:181
#define MAX_ISONAME_V2_RR
Definition: iso9660.h:240
EXPORT int getvargs(int *pac, pav, struct ga_props *props, struct ga_flags *vfmt)
Definition: getargs.c:226
GLfloat GLfloat p
Definition: glext.h:8902
int merge_previous_session(struct directory *this_dir, struct iso_directory_record *mrootp, char *reloc_root, char *reloc_old_root)
Definition: multi.c:1811
#define memset(x, y, z)
Definition: compat.h:39
#define apple_hyb
siconvt_t * hfs_onls
int use_graft_ptrs
Definition: mkisofs.c:230
int l_gmtoff
Definition: mkisofs.h:334
int su_version
Definition: multi.c:93
BOOL correct_inodes
Definition: mkisofs.c:324
time_t begun
Definition: write.c:305
struct output_fragment version_desc
Definition: write.c:3025
#define printf
Definition: config.h:203
EXPORT int errmsgno(int err, char *msg, va_alist)
Definition: comerr.c:219
int new_dir_mode
Definition: mkisofs.c:152
#define MAX_MAT
Definition: match.h:32
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:29
int l_usec
Definition: mkisofs.h:333
int relaxed_filenames
Definition: mkisofs.c:246
f_args fa
Definition: format.c:280
#define EX_BAD
Definition: standard.h:62
LOCAL int mosize ( int  y,
int  m 
)

Definition at line 728 of file mkisofs.c.

Referenced by parse_date().

731 {
732 
733  if (m == 1 && dysize(y) == 366)
734  return (29);
735  return (dmsize[m]);
736 }
#define dysize(A)
Definition: mkisofs.c:723
static int dmsize[12]
Definition: mkisofs.c:725
const GLfloat * m
Definition: glext.h:10848
INT INT y
Definition: msvc.h:62
const char* optend ( char fmt) const

Definition at line 1691 of file mkisofs.c.

Referenced by printopts().

1693 {
1694  int c;
1695  const char *ofmt = fmt;
1696 
1697  for (; *fmt != '\0'; fmt++) {
1698  c = *fmt;
1699  if (c == '\\') {
1700  if (*++fmt == '\0')
1701  break;
1702  continue;
1703  }
1704  if (c == ',' || c == '%' || c == '*' || c == '?' ||
1705  c == '#' || c == '&' || c == '~')
1706  break;
1707  if (fmt > ofmt && c == '+')
1708  break;
1709 
1710  }
1711  return (fmt);
1712 }
const char * fmt
Definition: wsprintf.c:30
const char * ofmt
Definition: format.c:285
#define c
Definition: ke_i.h:80
Definition: dsound.c:958
LOCAL void ovstrcpy ( char p2,
char p1 
)

Definition at line 3955 of file mkisofs.c.

Referenced by get_graft().

3958 {
3959  while ((*p2++ = *p1++) != '\0')
3960  ;
3961 }
const GLfloat * p2
Definition: s_aatritemp.h:44
const GLfloat * p1
Definition: s_aatritemp.h:43
LOCAL char* parse_date ( char arg,
struct tm tp 
)

Definition at line 739 of file mkisofs.c.

Referenced by get_ldate().

742 {
743  char *oarg = arg;
744  char *p;
745 
746  tp->tm_mon = tp->tm_hour = tp->tm_min = tp->tm_sec = 0;
747  tp->tm_mday = 1;
748  tp->tm_isdst = -1;
749 
750  p = strchr(arg, '/');
751  if (p == NULL)
752  p = strchr(arg, '-');
753  if (p) {
754  if ((p - arg) != 2 && (p - arg) != 4)
755  ldate_error(oarg);
756  p = strntoi(arg, 4, &tp->tm_year);
757  if ((p - arg) != 2 && (p - arg) != 4)
758  ldate_error(oarg);
759  if ((p - arg) == 2) {
760  if (tp->tm_year < 69)
761  tp->tm_year += 100;
762  } else {
763  tp->tm_year -= 1900;
764  }
765  if (*p == '/' || *p == '-')
766  p++;
767  } else if (strlen(arg) < 4) {
768  ldate_error(oarg);
769  } else {
770  p = strntoi(arg, 4, &tp->tm_year);
771  if ((p - arg) != 4)
772  ldate_error(oarg);
773  tp->tm_year -= 1900;
774  }
775  if (*p == '\0' || strchr(".+-", *p))
776  return (p);
777  arg = p;
778  p = strntoi(arg, 2, &tp->tm_mon);
779  if ((p - arg) != 2)
780  ldate_error(oarg);
781  tp->tm_mon -= 1;
782  if (tp->tm_mon < 0 || tp->tm_mon >= 12)
783  ldate_error(oarg);
784  if (*p == '/' || *p == '-')
785  p++;
786  if (*p == '\0' || strchr(".+-", *p))
787  return (p);
788  arg = p;
789  p = strntoi(arg, 2, &tp->tm_mday);
790  if ((p - arg) != 2)
791  ldate_error(oarg);
792  if (tp->tm_mday < 1 || tp->tm_mday > mosize(tp->tm_year+1900, tp->tm_mon))
793  ldate_error(oarg);
794  if (*p == ' ')
795  p++;
796  if (*p == '\0' || strchr(".+-", *p))
797  return (p);
798  arg = p;
799  p = strntoi(arg, 2, &tp->tm_hour);
800  if ((p - arg) != 2)
801  ldate_error(oarg);
802  if (tp->tm_hour > 23)
803  ldate_error(oarg);
804  if (*p == ':')
805  p++;
806  if (*p == '\0' || strchr(".+-", *p))
807  return (p);
808  arg = p;
809  p = strntoi(arg, 2, &tp->tm_min);
810  if ((p - arg) != 2)
811  ldate_error(oarg);
812  if (tp->tm_min > 59)
813  ldate_error(oarg);
814  if (*p == ':')
815  p++;
816  if (*p == '\0' || strchr(".+-", *p))
817  return (p);
818  arg = p;
819  p = strntoi(arg, 2, &tp->tm_sec);
820  if ((p - arg) != 2)
821  ldate_error(oarg);
822  if (tp->tm_sec > 61)
823  ldate_error(oarg);
824  return (p);
825 }
int tm_min
Definition: time.h:78
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
int tm_mday
Definition: time.h:80
LOCAL int mosize(int y, int m)
Definition: mkisofs.c:728
void * arg
Definition: msvc.h:12
int tm_year
Definition: time.h:82
smooth NULL
Definition: ftsmooth.c:557
int tm_mon
Definition: time.h:81
LOCAL void ldate_error(char *arg)
Definition: mkisofs.c:691
LOCAL char * strntoi(char *p, int n, int *ip)
Definition: mkisofs.c:698
char * strchr(const char *String, int ch)
Definition: utclib.c:501
int tm_sec
Definition: time.h:77
int tm_hour
Definition: time.h:79
GLfloat GLfloat p
Definition: glext.h:8902
int tm_isdst
Definition: time.h:85
int printopts ( FILE f,
const char fmt,
const char arg,
int  twod 
)

Definition at line 1716 of file mkisofs.c.

Referenced by usage().

1721 {
1722  const char *p;
1723  int len = 0;
1724  int optlen;
1725  int arglen = 0;
1726 
1727  if (arg) {
1728  if (*arg == '-' || *arg == '\\')
1729  arg++;
1730 
1731  if (*arg == '\1') {
1732  p = ++arg;
1733  while (*p != '\0' && *p != '\1' && *p != '\2')
1734  p++;
1735  arglen = p - arg;
1736  if (arglen == 0)
1737  arg = NULL;
1738  } else {
1739  arg = NULL;
1740  }
1741  }
1742  for (p = optend(fmt); p > fmt; p = optend(fmt)) {
1743  optlen = p - fmt;
1744  len += fprintf(f, "%s%.*s%s%.*s",
1745  *fmt == '+' ? "" :
1746  (optlen > 1 && twod) ? "--" : "-",
1747  (int)(p - fmt), fmt,
1748  arg != NULL ? " " : "",
1749  arglen, arg != NULL ? arg : "");
1750  fmt = p;
1751  while (*fmt != '\0' && *fmt != ',')
1752  fmt++;
1753  if (*fmt == ',') {
1754  fmt++;
1755  len += fprintf(f, ", ");
1756  }
1757  }
1758  return (len);
1759 }
const char * fmt
Definition: wsprintf.c:30
const char * optend(char *fmt) const
Definition: mkisofs.c:1691
void * arg
Definition: msvc.h:12
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
smooth NULL
Definition: ftsmooth.c:557
GLenum GLsizei len
Definition: glext.h:6722
GLfloat GLfloat p
Definition: glext.h:8902
Definition: dsound.c:958
LOCAL void read_rcfile ( char appname)

Definition at line 1489 of file mkisofs.c.

Referenced by main().

1491 {
1492  FILE *rcfile = (FILE *)NULL;
1493  struct rcopts *rco;
1494  char *pnt,
1495  *pnt1;
1496  char linebuffer[256];
1497  static char rcfn[] = ".mkisofsrc";
1498  char filename[1000];
1499  int linum;
1500 
1501  strlcpy(filename, rcfn, sizeof (filename));
1502  if (access(filename, R_OK) == 0)
1503  rcfile = fopen(filename, "r");
1504  if (!rcfile && errno != ENOENT)
1505  errmsg(_("Cannot open '%s'.\n"), filename);
1506 
1507  if (!rcfile) {
1508  pnt = getenv("MKISOFSRC");
1509  if (pnt && strlen(pnt) <= sizeof (filename)) {
1510  strlcpy(filename, pnt, sizeof (filename));
1511  if (access(filename, R_OK) == 0)
1512  rcfile = fopen(filename, "r");
1513  if (!rcfile && errno != ENOENT)
1514  errmsg(_("Cannot open '%s'.\n"), filename);
1515  }
1516  }
1517  if (!rcfile) {
1518  pnt = getenv("HOME");
1519  if (pnt && strlen(pnt) + strlen(rcfn) + 2 <=
1520  sizeof (filename)) {
1521  strlcpy(filename, pnt, sizeof (filename));
1522  if (strlen(rcfn) + 2 <=
1523  (sizeof (filename) - strlen(filename))) {
1524  strcat(filename, "/");
1525  strcat(filename, rcfn);
1526  }
1527  if (access(filename, R_OK) == 0)
1528  rcfile = fopen(filename, "r");
1529  if (!rcfile && errno != ENOENT)
1530  errmsg(_("Cannot open '%s'.\n"), filename);
1531  }
1532  }
1533  if (!rcfile && strlen(appname) + sizeof (rcfn) + 2 <=
1534  sizeof (filename)) {
1535  strlcpy(filename, appname, sizeof (filename));
1536  pnt = strrchr(filename, '/');
1537  if (pnt) {
1538  strlcpy(pnt + 1, rcfn,
1539  sizeof (filename) - (pnt + 1 - filename));
1540  if (access(filename, R_OK) == 0)
1541  rcfile = fopen(filename, "r");
1542  if (!rcfile && errno != ENOENT)
1543  errmsg(_("Cannot open '%s'.\n"), filename);
1544  }
1545  }
1546  if (!rcfile)
1547  return;
1548  if (verbose > 0) {
1549  fprintf(stderr, _("Using \"%s\"\n"), filename);
1550  }
1551  /* OK, we got it. Now read in the lines and parse them */
1552  linum = 0;
1553  while (fgets(linebuffer, sizeof (linebuffer), rcfile)) {
1554  char *name;
1555  char *name_end;
1556 
1557  ++linum;
1558  /* skip any leading white space */
1559  pnt = linebuffer;
1560  while (*pnt == ' ' || *pnt == '\t')
1561  ++pnt;
1562  /*
1563  * If we are looking at a # character, this line is a comment.
1564  */
1565  if (*pnt == '#')
1566  continue;
1567  /*
1568  * The name should begin in the left margin. Make sure it is
1569  * in upper case. Stop when we see white space or a comment.
1570  */
1571  name = pnt;
1572  while (*pnt && (isalpha((unsigned char) *pnt) || *pnt == '_')) {
1573  if (islower((unsigned char) *pnt))
1574  *pnt = toupper((unsigned char) *pnt);
1575  pnt++;
1576  }
1577  if (name == pnt) {
1578  fprintf(stderr, _("%s:%d: name required\n"), filename,
1579  linum);
1580  continue;
1581  }
1582  name_end = pnt;
1583  /* Skip past white space after the name */
1584  while (*pnt == ' ' || *pnt == '\t')
1585  pnt++;
1586  /* silently ignore errors in the rc file. */
1587  if (*pnt != '=') {
1588  fprintf(stderr, _("%s:%d: equals sign required after '%.*s'\n"),
1589  filename, linum,
1590  /* XXX Should not be > int */
1591  (int)(name_end-name), name);
1592  continue;
1593  }
1594  /* Skip pas the = sign, and any white space following it */
1595  pnt++; /* Skip past '=' sign */
1596  while (*pnt == ' ' || *pnt == '\t')
1597  pnt++;
1598 
1599  /* now it is safe to NUL terminate the name */
1600 
1601  *name_end = 0;
1602 
1603  /* Now get rid of trailing newline */
1604 
1605  pnt1 = pnt;
1606  while (*pnt1) {
1607  if (*pnt1 == '\n') {
1608  *pnt1 = 0;
1609  break;
1610  }
1611  pnt1++;
1612  }
1613  /* OK, now figure out which option we have */
1614  for (rco = rcopt; rco->tag; rco++) {
1615  if (strcmp(rco->tag, name) == 0) {
1616  *rco->variable = e_strdup(pnt);
1617  break;
1618  }
1619  }
1620  if (rco->tag == NULL) {
1621  fprintf(stderr, _("%s:%d: field name \"%s\" unknown\n"),
1622  filename, linum,
1623  name);
1624  }
1625  }
1626  if (ferror(rcfile))
1627  errmsg(_("Read error on '%s'.\n"), filename);
1628  fclose(rcfile);
1629 }
_Check_return_ _CRTIMP int __cdecl ferror(_In_ FILE *_File)
char * strcat(char *DstString, const char *SrcString)
Definition: utclib.c:568
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
size_t strlcpy(char *d, const char *s, size_t bufsize)
Definition: compat.c:3
#define isalpha(c)
Definition: acclib.h:74
int errno
_Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
EXPORT char * e_strdup(char *s) const
Definition: mkisofs.c:3941
#define R_OK
Definition: io.h:171
GLuint const GLchar * name
Definition: glext.h:6031
char * tag
Definition: mkisofs.c:340
char ** variable
Definition: mkisofs.c:341
#define _(X)
Definition: i386-dis.c:36
LPCSTR filename
Definition: alphablend.c:63
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
smooth NULL
Definition: ftsmooth.c:557
EXPORT int errmsg(char *msg, va_alist)
Definition: comerr.c:192
int toupper(int c)
Definition: utclib.c:881
int verbose
Definition: mkisofs.c:128
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
#define islower(c)
Definition: acclib.h:72
_Check_return_opt_ _CRTIMP char *__cdecl fgets(_Out_writes_z_(_MaxCount) char *_Buf, _In_ int _MaxCount, _Inout_ FILE *_File)
_Check_return_ char *__cdecl getenv(_In_z_ const char *_VarName)
GLuint GLint GLboolean GLint GLenum access
Definition: glext.h:7866
Definition: arc.h:46
struct rcopts rcopt[]
Definition: mkisofs.c:344
FILE * stderr
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
LOCAL char* strntoi ( char p,
int  n,
int ip 
)

Definition at line 698 of file mkisofs.c.

Referenced by get_ldate(), and parse_date().

702 {
703  int i = 0;
704  int digits = 0;
705  int c;
706 
707  while (*p) {
708  if (digits >= n)
709  break;
710  c = *p;
711  if (c < '0' || c > '9')
712  break;
713  p++;
714  digits++;
715  i *= 10;
716  i += c - '0';
717  }
718  *ip = i;
719 
720  return (p);
721 }
GLuint n
Definition: s_context.h:57
GLenum GLclampf GLint i
Definition: glfuncs.h:14
Definition: dhcpd.h:61
const GLubyte * c
Definition: glext.h:8905
#define c
Definition: ke_i.h:80
GLfloat GLfloat p
Definition: glext.h:8902
static const int digits[]
Definition: decode.c:67
LOCAL void susage ( int  excode)

Definition at line 1648 of file mkisofs.c.

Referenced by main().

1650 {
1651  const char *program_name = "mkisofs";
1652 
1653 #ifdef USE_FIND
1654  fprintf(stderr, _("Usage: %s [options] [-find] file... [find expression]\n"), program_name);
1655 #else
1656  fprintf(stderr, _("Usage: %s [options] file...\n"), program_name);
1657 #endif
1658  fprintf(stderr, _("\nUse %s -help\n"), program_name);
1659  fprintf(stderr, _("to get a list all of valid options.\n"));
1660 #ifdef USE_FIND
1661  fprintf(stderr, _("\nUse %s -find -help\n"), program_name);
1662  fprintf(stderr, _("to get a list of all valid -find options.\n"));
1663 #endif
1664  error(_("\nMost important Options:\n"));
1665  error(_(" -posix-H Follow sylinks encountered on command line\n"));
1666  error(_(" -posix-L Follow all symlinks\n"));
1667  error(_(" -posix-P Do not follow symlinks (default)\n"));
1668  error(_(" -o FILE, -output FILE Set output file name\n"));
1669  error(_(" -R, -rock Generate Rock Ridge directory information\n"));
1670  error(_(" -r, -rational-rock Generate rationalized Rock Ridge directory info\n"));
1671  error(_(" -J, -joliet Generate Joliet directory information\n"));
1672  error(_(" -print-size Print estimated filesystem size and exit\n"));
1673 #ifdef UDF
1674  error(_(" -UDF Generate UDF file system\n"));
1675 #endif
1676 #ifdef DVD_AUD_VID
1677  error(_(" -dvd-audio Generate DVD-Audio compliant UDF file system\n"));
1678  error(_(" -dvd-video Generate DVD-Video compliant UDF file system\n"));
1679  error(_(" -dvd-hybrid Generate a hybrid (DVD-Audio/DVD-Video) compliant UDF file system\n"));
1680 #endif
1681  error(_(" -iso-level LEVEL Set ISO9660 level (1..3) or 4 for ISO9660 v 2\n"));
1682  error(_(" -V ID, -volid ID Set Volume ID\n"));
1683  error(_(" -graft-points Allow to use graft points for filenames\n"));
1684  error(_(" -M FILE, -prev-session FILE Set path to previous session to merge\n"));
1685 
1686  exit(excode);
1687 }
#define error(str)
Definition: mkdosfs.c:1605
static char * program_name
Definition: mkdosfs.c:519
#define _(X)
Definition: i386-dis.c:36
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
#define exit(n)
Definition: config.h:202
FILE * stderr
LOCAL void usage ( int  excode)

Definition at line 1794 of file mkisofs.c.

Referenced by main().

1796 {
1797  const char *program_name = "mkisofs";
1798 
1799  int i;
1800 
1801 #ifdef USE_FIND
1802  fprintf(stderr, _("Usage: %s [options] [-find] file... [find expression]\n"), program_name);
1803 #else
1804  fprintf(stderr, _("Usage: %s [options] file...\n"), program_name);
1805 #endif
1806 
1807  fprintf(stderr, _("Options:\n"));
1808  for (i = 0; i < (int)OPTION_COUNT; i++) {
1809  if (docstr(mki_options[i].doc, NULL) != NULL) {
1810  int len;
1811  int j;
1812 
1813  fprintf(stderr, " ");
1814  len = 2;
1815  j = i;
1816  do {
1817  int twodash;
1818  int no_help;
1819  const char *doc;
1820 
1821  doc = mki_options[j].doc;
1822  twodash = (doc != NULL && *doc == '-');
1823  doc = docstr(doc, &no_help);
1824 
1825  if (!no_help) {
1826  /*
1827  * If more options for one doc, then
1828  * print a comma as separator.
1829  */
1830  if (j > i)
1831  len += fprintf(stderr, ", ");
1832  len += printopts(stderr,
1833  mki_options[j].opt.ga_format,
1834  mki_options[j].doc,
1835  twodash);
1836  }
1837  ++j;
1838  }
1839  while (j < (int)OPTION_COUNT &&
1840  docstr(mki_options[j].doc, NULL) == NULL);
1841 
1842  if (len >= 30) {
1843  fprintf(stderr, "\n");
1844  len = 0;
1845  }
1846  for (; len < 30; len++)
1847  fputc(' ', stderr);
1848 
1849  fprintf(stderr, "%s\n",
1850  docstr(mki_options[i].doc, NULL));
1851  }
1852  }
1853  exit(excode);
1854 }
GLenum GLclampf GLint GLenum GLuint GLenum GLenum GLsizei GLenum const GLvoid GLfloat GLfloat GLfloat GLfloat GLclampd GLint GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean GLboolean GLboolean GLboolean GLint GLenum GLsizei const GLvoid GLenum GLint GLenum GLint GLint GLsizei GLint GLenum GLint GLint GLint GLint GLsizei GLenum GLsizei const GLuint GLboolean GLenum GLenum GLint GLsizei GLenum GLsizei GLenum const GLvoid GLboolean const GLboolean GLenum const GLdouble const GLfloat const GLdouble const GLfloat GLenum GLint GLint GLint GLint GLint GLint j
Definition: glfuncs.h:98
_Check_return_opt_ _CRTIMP int __cdecl fputc(_In_ int _Ch, _Inout_ FILE *_File)
static char * program_name
Definition: mkdosfs.c:519
int printopts(FILE *f, const char *fmt, const char *arg, int twod)
Definition: mkisofs.c:1716
GLenum GLclampf GLint i
Definition: glfuncs.h:14
#define _(X)
Definition: i386-dis.c:36
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
smooth NULL
Definition: ftsmooth.c:557
LOCAL const struct mki_option mki_options[]
Definition: mkisofs.c:1045
#define OPTION_COUNT
Definition: mkisofs.c:1467
#define exit(n)
Definition: config.h:202
GLenum GLsizei len
Definition: glext.h:6722
const char * docstr(char *str, int *no_help) const
Definition: mkisofs.c:1763
FILE * stderr
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:29

Variable Documentation

int all_files = 1

Definition at line 132 of file mkisofs.c.

Referenced by AVIBuildFilterW(), NOTEPAD_InitData(), and scan_directory_tree().

int allow_leading_dots = 0

Definition at line 251 of file mkisofs.c.

Referenced by getL(), iso9660_file_length(), and main().

int allow_lowercase = 0

Definition at line 247 of file mkisofs.c.

Referenced by iso9660_file_length(), and main().

int allow_multidot = 0

Definition at line 249 of file mkisofs.c.

Referenced by iso9660_file_length(), and main().

dev_t archive_dev

Definition at line 94 of file mkisofs.c.

Referenced by checkarch().

ino_t archive_ino

Definition at line 95 of file mkisofs.c.

Referenced by checkarch().

BOOL archive_isreg

Definition at line 93 of file mkisofs.c.

Referenced by checkarch(), and insert_file_entry().

time_t begun

Definition at line 305 of file write.c.

Referenced by main().

char* biblio = BIBLIO_DEFAULT

Definition at line 163 of file mkisofs.c.

Referenced by main(), and pvd_write().

char* boot_catalog

Definition at line 168 of file mkisofs.c.

Referenced by get_torito_desc(), init_boot_catalog(), insert_boot_cat(), and main().

char* boot_image = BOOT_IMAGE_DEFAULT

Definition at line 169 of file mkisofs.c.

Referenced by get_boot_image(), and tvd_write().

int boot_info_table = 0

Definition at line 106 of file mkisofs.c.

Referenced by get_boot_table().

int cache_inodes = -1

Definition at line 141 of file mkisofs.c.

Referenced by add_directory_hash(), add_hash(), do_inode(), find_directory_hash(), find_hash(), and main().

char* cdrecord_data

Definition at line 1748 of file multi.c.

Referenced by main().

char* check_image

Definition at line 176 of file mkisofs.c.

Referenced by main().

int check_oldnames = 0

Definition at line 98 of file mkisofs.c.

Referenced by main(), and read_merging_directory().

int check_session = 0

Definition at line 99 of file mkisofs.c.

Referenced by get_session_start(), and main().

char* copyright = COPYRIGHT_DEFAULT

Definition at line 162 of file mkisofs.c.

Referenced by main().

BOOL correct_inodes = TRUE

Definition at line 324 of file mkisofs.c.

Referenced by compute_linkcount(), do_inode(), main(), merge_isofs(), and vers_write().

struct eltorito_boot_entry_info* current_boot_entry = NULL

Definition at line 228 of file mkisofs.c.

Referenced by get_boot_entry(), get_torito_desc(), and new_boot_entry().

LOCAL BOOL data_change_warn

Definition at line 224 of file mkisofs.c.

Referenced by main().

int debug = 0

Definition at line 129 of file mkisofs.c.

Referenced by escstrcpy(), and get_graft().

char* dirmode_str

Definition at line 181 of file mkisofs.c.

Referenced by main().

int dirmode_to_use = 0

Definition at line 151 of file