From 570d5a0e222011651afffb9d4c97de0105bcfb76 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Fri, 1 Apr 2011 13:31:00 +0000 Subject: [PATCH] Allowing double dashes with all long options --- xorriso/emulators.c | 452 +++++++++++++++++++----------------- xorriso/xorriso_timestamp.h | 2 +- 2 files changed, 245 insertions(+), 209 deletions(-) diff --git a/xorriso/emulators.c b/xorriso/emulators.c index 9c50fe3f..0c3f3192 100644 --- a/xorriso/emulators.c +++ b/xorriso/emulators.c @@ -617,7 +617,7 @@ int Xorriso_genisofs_count_args(struct XorrisO *xorriso, int argc, char **argv, /* @param flag bit0= do not report eventual ignore decision */ int Xorriso_genisofs_ignore(struct XorrisO *xorriso, char *whom, - char **argv, int *i, int flag) + char *argpt, int *i, int flag) { /* mkisofs 2.01 options which are not scheduled for implementation, yet */ static char ignored_arg0_options[][41]= { @@ -633,23 +633,22 @@ int Xorriso_genisofs_ignore(struct XorrisO *xorriso, char *whom, "-check-session", "-hide-hfs", "-hide-hfs-list", "-table-name", "-volset-seqno", "-volset-size", "" - }; /* "-root", "-old-root", */ - int k, idx_offset= 0; + }; + int k; char sfe[5*SfileadrL]; for(k=0;ignored_arg0_options[k][0]!=0;k++) - if(strcmp(argv[*i],ignored_arg0_options[k])==0) + if(strcmp(argpt,ignored_arg0_options[k])==0) goto no_volunteer; for(k=0;ignored_arg1_options[k][0]!=0;k++) - if(strcmp(argv[*i],ignored_arg1_options[k])==0) { + if(strcmp(argpt,ignored_arg1_options[k])==0) { (*i)++; - idx_offset= -1; goto no_volunteer; - } + } return(0); no_volunteer:; sprintf(xorriso->info_text, "-as %s: Ignored option %s", - whom, Text_shellsafe(argv[(*i)+idx_offset], sfe, 0)); + whom, Text_shellsafe(argpt, sfe, 0)); if(!(flag & 1)) Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0); return(1); @@ -891,6 +890,27 @@ ex:; } +/* Strip surplus dash from known single-dash long options */ +int Xorriso_genisofs_strip_dash(struct XorrisO *xorriso, char *arg_in, + char **arg_out, int flag) +{ + int ret, count; + char *argv[1]; + + *arg_out= arg_in; + if(strlen(arg_in) < 4) + return(1); + if(arg_in[0] != '-' || arg_in[1] != '-' || arg_in[2] == '-') + return(1); + + argv[0]= arg_in + 1; + ret= Xorriso_genisofs_count_args(xorriso, 1, argv, &count, 0); + if(ret > 0) + *arg_out= arg_in + 1; + return(1); +} + + /* micro emulation of mkisofs */ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom, int argc, char **argv, int flag) @@ -907,7 +927,7 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom, int *delay_opt_list= NULL, delay_opt_count= 0; char sfe[5*SfileadrL], adr[SfileadrL+8], ra_text[80], pathspec[2*SfileadrL]; char *ept, *add_pt, eff_path[SfileadrL], indev[SfileadrL+8], msc[80], *cpt; - char old_root[SfileadrL]; + char old_root[SfileadrL], *argpt, *hargv[1]; char *boot_path, partno_text[8], *iso_rr_pt, *disk_pt, *rpt, *wpt; char *rm_merge_args[3]; @@ -934,10 +954,13 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom, with_cat_path= -1; adr[0]= indev[0]= msc[0]= old_root[0]= 0; for(i= 0; iresult_line, "mkisofs 2.01-Emulation Copyright (C) 2011 see libburnia-project.org xorriso\n" ); @@ -949,7 +972,7 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom, fsync(fd); Xorriso_option_version(xorriso, 0); - } else if(strcmp(argv[i], "-o")==0 || strcmp(argv[i], "-output")==0) { + } else if(strcmp(argpt, "-o")==0 || strcmp(argpt, "-output")==0) { if(i+1>=argc) goto not_enough_args; i++; @@ -958,8 +981,8 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom, strcpy(adr, "stdio:"); if(Sfile_str(adr+strlen(adr), argv[i], 0)<=0) {ret= -1; goto ex;} - } else if(strcmp(argv[i], "-M")==0 || strcmp(argv[i], "-dev")==0 || - strcmp(argv[i], "-prev-session")==0) { + } else if(strcmp(argpt, "-M")==0 || strcmp(argpt, "-dev")==0 || + strcmp(argpt, "-prev-session")==0) { if(i+1>=argc) goto not_enough_args; i++; @@ -967,24 +990,24 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom, strcpy(indev, "stdio:"); if(Sfile_str(indev+strlen(indev), argv[i], 0)<=0) {ret= -1; goto ex;} - } else if(strcmp(argv[i], "-C")==0 || - strcmp(argv[i], "-cdrecord-params")==0) { + } else if(strcmp(argpt, "-C")==0 || + strcmp(argpt, "-cdrecord-params")==0) { if(i+1>=argc) goto not_enough_args; i++; strncpy(msc, argv[i], sizeof(msc)-1); msc[sizeof(msc)-1]= 0; - } else if(strcmp(argv[i], "-help")==0) { + } else if(strcmp(argpt, "-help")==0) { Xorriso_genisofs_help(xorriso, 0); - } else if(strcmp(argv[i], "-v")==0 || strcmp(argv[i], "-verbose")==0) { + } else if(strcmp(argpt, "-v")==0 || strcmp(argpt, "-verbose")==0) { strcpy(ra_text, "UPDATE"); - } else if(strcmp(argv[i], "-quiet")==0) { + } else if(strcmp(argpt, "-quiet")==0) { strcpy(ra_text, "SORRY"); - } else if(strcmp(argv[i], "-f")==0 || strcmp(argv[i], "-follow-links")==0) { + } else if(strcmp(argpt, "-f")==0 || strcmp(argpt, "-follow-links")==0) { ret= Xorriso_option_follow(xorriso, "on", 0); if(ret<=0) goto problem_handler_1; - } else if(strcmp(argv[i], "-iso-level")==0) { + } else if(strcmp(argpt, "-iso-level")==0) { if(i+1>=argc) goto not_enough_args; i++; @@ -1005,7 +1028,7 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom, goto problem_handler_1; } - } else if(strcmp(argv[i], "-input-charset")==0) { + } else if(strcmp(argpt, "-input-charset")==0) { if(i+1>=argc) goto not_enough_args; i++; @@ -1016,7 +1039,7 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom, ret= Xorriso_option_charset(xorriso, argv[i], 4); if(ret <= 0) goto problem_handler_1; - } else if(strcmp(argv[i], "-output-charset")==0) { + } else if(strcmp(argpt, "-output-charset")==0) { if(i+1>=argc) goto not_enough_args; i++; @@ -1028,25 +1051,25 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom, if(ret <= 0) goto problem_handler_1; - } else if(strcmp(argv[i], "-hide") == 0 || - strcmp(argv[i], "-hide-list") == 0 || - strcmp(argv[i], "-hide-joliet") == 0 || - strcmp(argv[i], "-hide-joliet-list") == 0) { + } else if(strcmp(argpt, "-hide") == 0 || + strcmp(argpt, "-hide-list") == 0 || + strcmp(argpt, "-hide-joliet") == 0 || + strcmp(argpt, "-hide-joliet-list") == 0) { if(i+1>=argc) goto not_enough_args; i++; - if(strcmp(argv[i - 1], "-hide") == 0) + if(strcmp(argpt, "-hide") == 0) ret= Xorriso_genisofs_hide(xorriso, whom, argv[i], 1, 0); - else if(strcmp(argv[i - 1], "-hide-list") == 0) + else if(strcmp(argpt, "-hide-list") == 0) ret= Xorriso_genisofs_hide_list(xorriso, whom, argv[i], 1, 0); - else if(strcmp(argv[i - 1], "-hide-joliet") == 0) + else if(strcmp(argpt, "-hide-joliet") == 0) ret= Xorriso_genisofs_hide(xorriso, whom, argv[i], 2, 0); - else if(strcmp(argv[i - 1], "-hide-joliet-list") == 0) + else if(strcmp(argpt, "-hide-joliet-list") == 0) ret= Xorriso_genisofs_hide_list(xorriso, whom, argv[i], 2, 0); if(ret <= 0) goto problem_handler_1; - } else if(strcmp(argv[i], "-root") == 0) { + } else if(strcmp(argpt, "-root") == 0) { if(i+1>=argc) goto not_enough_args; i++; @@ -1057,7 +1080,7 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom, strcpy(xorriso->wdi, eff_path); root_seen= 1; - } else if(strcmp(argv[i], "-old-root") == 0) { + } else if(strcmp(argpt, "-old-root") == 0) { if(i+1>=argc) goto not_enough_args; i++; @@ -1066,52 +1089,53 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom, if(Sfile_str(old_root, argv[i], argv[i][0] != '/') <= 0) {ret= -1; goto ex;} - } else if(strcmp(argv[i], "--old-root-no-md5")==0) { + } else if(strcmp(argpt, "--old-root-no-md5")==0) { old_root_md5= 0; - } else if(strcmp(argv[i], "--old-root-devno")==0) { + } else if(strcmp(argpt, "--old-root-devno")==0) { old_root_dev= 1; - } else if(strcmp(argv[i], "--old-root-no-ino")==0) { + } else if(strcmp(argpt, "--old-root-no-ino")==0) { old_root_ino= 0; - } else if(strcmp(argv[i], "--hardlinks")==0) { + } else if(strcmp(argpt, "--hardlinks")==0) { Xorriso_option_hardlinks(xorriso, "on", 0); - } else if(strcmp(argv[i], "--acl")==0) { + } else if(strcmp(argpt, "--acl")==0) { Xorriso_option_acl(xorriso, "on", 0); - } else if(strcmp(argv[i], "--xattr")==0) { + } else if(strcmp(argpt, "--xattr")==0) { Xorriso_option_xattr(xorriso, "on", 0); - } else if(strcmp(argv[i], "--md5")==0) { + } else if(strcmp(argpt, "--md5")==0) { Xorriso_option_md5(xorriso, "on", 0); - } else if(strcmp(argv[i], "--scdbackup_tag")==0) { + } else if(strcmp(argpt, "--scdbackup_tag")==0) { if(i + 2 >= argc) goto not_enough_args; i+= 2; ret= Xorriso_option_scdbackup_tag(xorriso, argv[i-1], argv[i], 0); if(ret <= 0) goto problem_handler_1; - } else if(strcmp(argv[i], "--for_backup")==0) { + } else if(strcmp(argpt, "--for_backup")==0) { Xorriso_option_hardlinks(xorriso, "on", 0); Xorriso_option_acl(xorriso, "on", 0); Xorriso_option_xattr(xorriso, "on", 0); Xorriso_option_md5(xorriso, "on", 0); - } else if(strcmp(argv[i], "-z")==0 || - strcmp(argv[i], "-transparent-compression")==0) { + } else if(strcmp(argpt, "-z")==0 || + strcmp(argpt, "-transparent-compression")==0) { Xorriso_option_zisofs(xorriso, "by_magic=on", 0); - } else if(strcmp(argv[i], "--stdio_sync")==0) { + } else if(strcmp(argpt, "--stdio_sync")==0) { if(i+1>=argc) goto not_enough_args; i++; Xorriso_option_stdio_sync(xorriso, argv[i], 0); - } else if(strcmp(argv[i], "-disallow_dir_id_ext")==0) { + } else if(strcmp(argpt, "-disallow_dir_id_ext")==0) { allow_dir_id_ext= 0; - } else if(strcmp(argv[i], "--emul-toc")==0) { + } else if(strcmp(argpt, "--emul-toc")==0) { with_emul_toc= 1; xorriso->no_emul_toc&= ~1; - } else if(strcmp(argv[i], "--no-emul-toc")==0) { + } else if(strcmp(argpt, "--no-emul-toc")==0) { with_emul_toc= 0; xorriso->no_emul_toc|= 1; } else was_other_option= 1; - ret= Xorriso_genisofs_count_args(xorriso, argc - i, argv + i, &count, 0); + hargv[0]= argpt; + ret= Xorriso_genisofs_count_args(xorriso, argc - i, hargv, &count, 0); if(ret > 0) i+= count; /* skip eventual arguments of known option */ continue; /* regular bottom of loop */ @@ -1225,27 +1249,30 @@ illegal_c:; sprintf(xorriso->info_text, "-as %s: %s", whom, Text_shellsafe(argv[i], sfe, 0)); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0); - ret= Xorriso_genisofs_ignore(xorriso, whom, argv, &i, 0); + ret= Xorriso_genisofs_strip_dash(xorriso, argv[i], &argpt, 0); + if(ret <= 0) + goto ex; + ret= Xorriso_genisofs_ignore(xorriso, whom, argpt, &i, 0); if(ret == 1) continue; - if(strcmp(argv[i], "-version")==0) { + if(strcmp(argpt, "-version")==0) { /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "-R")==0 || strcmp(argv[i], "-rock")==0) { + } else if(strcmp(argpt, "-R")==0 || strcmp(argpt, "-rock")==0) { /* ok */; - } else if(strcmp(argv[i], "-r")==0 || strcmp(argv[i], "-rational-rock")==0){ + } else if(strcmp(argpt, "-r")==0 || strcmp(argpt, "-rational-rock")==0){ lower_r= 1; - } else if(strcmp(argv[i], "-J")==0 || strcmp(argv[i], "-joliet")==0) { + } else if(strcmp(argpt, "-J")==0 || strcmp(argpt, "-joliet")==0) { xorriso->do_joliet= 1; - } else if(strcmp(argv[i], "-joliet-long")==0) { + } else if(strcmp(argpt, "-joliet-long")==0) { ret= Xorriso_option_compliance(xorriso, "joliet_long_paths:joliet_long_names", 0); if(ret<=0) goto problem_handler_2; - } else if(strcmp(argv[i], "-graft-points")==0) { + } else if(strcmp(argpt, "-graft-points")==0) { xorriso->allow_graft_points= 1; - } else if(strcmp(argv[i], "-path-list")==0 || - strcmp(argv[i], "--quoted_path_list")==0) { + } else if(strcmp(argpt, "-path-list")==0 || + strcmp(argpt, "--quoted_path_list")==0) { if(i+1>=argc) { not_enough_args:; sprintf(xorriso->info_text, "-as %s: Not enough arguments to option %s", @@ -1257,67 +1284,67 @@ not_enough_args:; was_path= 1; xorriso->pacifier_style= 1; ret= Xorriso_option_path_list(xorriso, argv[i], - (strcmp(argv[i-1], "--quoted_path_list")==0)); + (strcmp(argpt, "--quoted_path_list")==0)); if(ret<=0) goto problem_handler_2; - } else if(strcmp(argv[i], "-f")==0 || strcmp(argv[i], "-follow-links")==0) { + } else if(strcmp(argpt, "-f")==0 || strcmp(argpt, "-follow-links")==0) { /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "-pad")==0) { + } else if(strcmp(argpt, "-pad")==0) { xorriso->padding= 300*1024; - } else if(strcmp(argv[i], "-no-pad")==0) { + } else if(strcmp(argpt, "-no-pad")==0) { xorriso->padding= 0; - } else if(strcmp(argv[i], "-print-size")==0) { + } else if(strcmp(argpt, "-print-size")==0) { do_print_size= 1; - } else if(strcmp(argv[i], "-o")==0 || strcmp(argv[i], "-output") == 0) { + } else if(strcmp(argpt, "-o")==0 || strcmp(argpt, "-output") == 0) { i++; /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "-M")==0 || strcmp(argv[i], "-dev")==0 || - strcmp(argv[i], "-prev-session")==0) { + } else if(strcmp(argpt, "-M")==0 || strcmp(argpt, "-dev")==0 || + strcmp(argpt, "-prev-session")==0) { i++; /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "-C")==0 || - strcmp(argv[i], "-cdrecord-params")==0) { + } else if(strcmp(argpt, "-C")==0 || + strcmp(argpt, "-cdrecord-params")==0) { i++; /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "-help")==0) { + } else if(strcmp(argpt, "-help")==0) { /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "-V")==0 || strcmp(argv[i], "-volid")==0 || - strcmp(argv[i], "-volset")==0 || - strcmp(argv[i], "-p")==0 || strcmp(argv[i], "-preparer")==0 || - strcmp(argv[i], "-P")==0 || strcmp(argv[i], "-publisher")==0 || - strcmp(argv[i], "-A")==0 || strcmp(argv[i], "-appid")==0 || - strcmp(argv[i], "-sysid")==0 || - strcmp(argv[i], "-biblio")==0 || - strcmp(argv[i], "-copyright")==0 || - strcmp(argv[i], "-abstract")==0 ) { + } else if(strcmp(argpt, "-V")==0 || strcmp(argpt, "-volid")==0 || + strcmp(argpt, "-volset")==0 || + strcmp(argpt, "-p")==0 || strcmp(argpt, "-preparer")==0 || + strcmp(argpt, "-P")==0 || strcmp(argpt, "-publisher")==0 || + strcmp(argpt, "-A")==0 || strcmp(argpt, "-appid")==0 || + strcmp(argpt, "-sysid")==0 || + strcmp(argpt, "-biblio")==0 || + strcmp(argpt, "-copyright")==0 || + strcmp(argpt, "-abstract")==0 ) { if(i+1>=argc) goto not_enough_args; i++; ret= 1; - if(strcmp(argv[i - 1], "-V")==0 || strcmp(argv[i - 1], "-volid")==0) + if(strcmp(argpt, "-V")==0 || strcmp(argpt, "-volid")==0) ret= Xorriso_option_volid(xorriso, argv[i], 0); - else if(strcmp(argv[i - 1], "-volset")==0) + else if(strcmp(argpt, "-volset")==0) ret= Xorriso_option_volset_id(xorriso, argv[i], 0); - else if(strcmp(argv[i - 1], "-p")==0 || - strcmp(argv[i - 1], "-preparer")==0) + else if(strcmp(argpt, "-p")==0 || + strcmp(argpt, "-preparer")==0) ret= Xorriso_option_preparer_id(xorriso, argv[i], 0); - else if(strcmp(argv[i - 1], "-P")==0 || - strcmp(argv[i - 1], "-publisher")==0) + else if(strcmp(argpt, "-P")==0 || + strcmp(argpt, "-publisher")==0) ret= Xorriso_option_publisher(xorriso, argv[i], 0); - else if(strcmp(argv[i - 1], "-A")==0 || strcmp(argv[i - 1], "-appid")==0) + else if(strcmp(argpt, "-A")==0 || strcmp(argpt, "-appid")==0) ret= Xorriso_option_application_id(xorriso, argv[i], 0); - else if(strcmp(argv[i - 1], "-sysid")==0) + else if(strcmp(argpt, "-sysid")==0) ret= Xorriso_option_system_id(xorriso, argv[i], 0); - else if(strcmp(argv[i - 1], "-biblio")==0) + else if(strcmp(argpt, "-biblio")==0) ret= Xorriso_option_biblio_file(xorriso, argv[i], 0); - else if(strcmp(argv[i - 1], "-copyright")==0) + else if(strcmp(argpt, "-copyright")==0) ret= Xorriso_option_copyright_file(xorriso, argv[i], 0); - else if(strcmp(argv[i - 1], "-abstract")==0) + else if(strcmp(argpt, "-abstract")==0) ret= Xorriso_option_abstract_file(xorriso, argv[i], 0); if(ret<=0) goto problem_handler_2; - } else if(strcmp(argv[i], "-m")==0 || strcmp(argv[i], "-exclude")==0 || - strcmp(argv[i], "-x")==0 || strcmp(argv[i], "-old-exclude")==0) { + } else if(strcmp(argpt, "-m")==0 || strcmp(argpt, "-exclude")==0 || + strcmp(argpt, "-x")==0 || strcmp(argpt, "-old-exclude")==0) { if(i+1>=argc) goto not_enough_args; i++; @@ -1331,7 +1358,7 @@ not_enough_args:; xorriso->do_disk_pattern= mem; if(ret<=0) goto problem_handler_2; - } else if(strcmp(argv[i], "-exclude-list")==0) { + } else if(strcmp(argpt, "-exclude-list")==0) { if(i+1>=argc) goto not_enough_args; i++; @@ -1341,76 +1368,80 @@ not_enough_args:; xorriso->do_disk_pattern= mem; if(ret<=0) goto problem_handler_2; - } else if(strcmp(argv[i], "-v")==0 || strcmp(argv[i], "-verbose")==0 || - strcmp(argv[i], "-quiet")==0) { + } else if(strcmp(argpt, "-v")==0 || strcmp(argpt, "-verbose")==0 || + strcmp(argpt, "-quiet")==0) { /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "-iso-level")==0) { + } else if(strcmp(argpt, "-iso-level")==0) { i++; /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "-no-emul-boot")==0 || - strcmp(argv[i], "-hard-disk-boot")==0 || - strcmp(argv[i], "-boot-info-table")==0 || - strncmp(argv[i], "isolinux_mbr=", 13)==0 || - strcmp(argv[i], "-eltorito-alt-boot")==0 || - strcmp(argv[i], "--protective-msdos-label")==0 || - strcmp(argv[i], "--boot-catalog-hide")==0) { + } else if(strcmp(argpt, "-no-emul-boot")==0 || + strcmp(argpt, "-hard-disk-boot")==0 || + strcmp(argpt, "-boot-info-table")==0 || + strncmp(argpt, "isolinux_mbr=", 13)==0 || + strcmp(argpt, "-eltorito-alt-boot")==0 || + strcmp(argpt, "--protective-msdos-label")==0 || + strcmp(argpt, "--boot-catalog-hide")==0) { delay_opt_list[delay_opt_count++]= i; - } else if(strcmp(argv[i], "-b") == 0 || - strcmp(argv[i], "-eltorito-boot") == 0 || - strcmp(argv[i], "--efi-boot") == 0 || - strcmp(argv[i], "-e") == 0 || - strcmp(argv[i], "-mips-boot") == 0 || - strcmp(argv[i], "-mipsel-boot") == 0 || - strcmp(argv[i], "-c") == 0 || - strcmp(argv[i], "-eltorito-catalog") == 0 || - strcmp(argv[i], "-boot-load-size") == 0 || - strcmp(argv[i], "--embedded-boot")==0 || - strcmp(argv[i], "-generic-boot")==0 || - strcmp(argv[i], "-G") == 0 || - strcmp(argv[i], "-partition_offset") == 0 || - strcmp(argv[i], "-partition_hd_cyl") == 0 || - strcmp(argv[i], "-partition_sec_hd") == 0 || - strcmp(argv[i], "-partition_cyl_align") == 0 || - strcmp(argv[i], "-isohybrid-mbr")==0) { + if(argv[i] != argpt) + delay_opt_list[delay_opt_count - 1]|= 1<<31; + } else if(strcmp(argpt, "-b") == 0 || + strcmp(argpt, "-eltorito-boot") == 0 || + strcmp(argpt, "--efi-boot") == 0 || + strcmp(argpt, "-e") == 0 || + strcmp(argpt, "-mips-boot") == 0 || + strcmp(argpt, "-mipsel-boot") == 0 || + strcmp(argpt, "-c") == 0 || + strcmp(argpt, "-eltorito-catalog") == 0 || + strcmp(argpt, "-boot-load-size") == 0 || + strcmp(argpt, "--embedded-boot")==0 || + strcmp(argpt, "-generic-boot")==0 || + strcmp(argpt, "-G") == 0 || + strcmp(argpt, "-partition_offset") == 0 || + strcmp(argpt, "-partition_hd_cyl") == 0 || + strcmp(argpt, "-partition_sec_hd") == 0 || + strcmp(argpt, "-partition_cyl_align") == 0 || + strcmp(argpt, "-isohybrid-mbr")==0) { if(i+1>=argc) goto not_enough_args; delay_opt_list[delay_opt_count++]= i; + if(argv[i] != argpt) + delay_opt_list[delay_opt_count - 1]|= 1<<31; i++; - } else if(strncmp(argv[i], "--modification-date=", 20)==0) { - ret= Xorriso_option_volume_date(xorriso, "uuid", argv[i] + 20, 0); + } else if(strncmp(argpt, "--modification-date=", 20)==0) { + ret= Xorriso_option_volume_date(xorriso, "uuid", argpt + 20, 0); if(ret <= 0) goto problem_handler_2; - } else if(strcmp(argv[i], "-input-charset")==0) { + } else if(strcmp(argpt, "-input-charset")==0) { i++; /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "-output-charset")==0) { + } else if(strcmp(argpt, "-output-charset")==0) { i++; /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "--hardlinks")==0 || - strcmp(argv[i], "--acl")==0 || - strcmp(argv[i], "--xattr")==0 || - strcmp(argv[i], "--md5")==0 || - strcmp(argv[i], "--for_backup")==0) { + } else if(strcmp(argpt, "--hardlinks")==0 || + strcmp(argpt, "--acl")==0 || + strcmp(argpt, "--xattr")==0 || + strcmp(argpt, "--md5")==0 || + strcmp(argpt, "--for_backup")==0) { /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "--scdbackup_tag")==0) { + } else if(strcmp(argpt, "--scdbackup_tag")==0) { /* was already handled in first argument scan */; i+= 2; - } else if(strcmp(argv[i], "--sort-weight")==0) { + } else if(strcmp(argpt, "--sort-weight")==0) { if(i + 2 >= argc) goto not_enough_args; i+= 2; /* memorize for find runs after pathspecs have been added */ weight_list[weight_count++]= i - 2; - } else if(strcmp(argv[i], "-z")==0 || - strcmp(argv[i], "-transparent-compression")==0) { + } else if(strcmp(argpt, "-z")==0 || + strcmp(argpt, "-transparent-compression")==0) { /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "-U") == 0 || - strcmp(argv[i], "-untranslated-filenames") == 0) { + } else if(strcmp(argpt, "-U") == 0 || + strcmp(argpt, "-untranslated-filenames") == 0) { Xorriso_relax_compliance(xorriso, "no_force_dots:long_paths:long_names:omit_version:full_ascii:lowercase", 0); - } else if(strcmp(argv[i], "-untranslated_name_len") == 0) { + } else if(strcmp(argpt, "-untranslated_name_len") == 0) { if(i+1>=argc) goto not_enough_args; i++; @@ -1418,38 +1449,38 @@ not_enough_args:; ret= Xorriso_relax_compliance(xorriso, sfe, 0); if(ret <= 0) goto problem_handler_2; - } else if(strcmp(argv[i], "-N") == 0 || - strcmp(argv[i], "-omit-version-number") == 0) { + } else if(strcmp(argpt, "-N") == 0 || + strcmp(argpt, "-omit-version-number") == 0) { Xorriso_relax_compliance(xorriso, "omit_version", 0); - } else if(strcmp(argv[i], "-l") == 0 || - strcmp(argv[i], "-full-iso9660-filenames") == 0 || - strcmp(argv[i], "-max-iso9660-filenames") == 0) { + } else if(strcmp(argpt, "-l") == 0 || + strcmp(argpt, "-full-iso9660-filenames") == 0 || + strcmp(argpt, "-max-iso9660-filenames") == 0) { Xorriso_relax_compliance(xorriso, "long_names", 0); - } else if(strcmp(argv[i], "-d") == 0 || - strcmp(argv[i], "-omit-period") == 0) { + } else if(strcmp(argpt, "-d") == 0 || + strcmp(argpt, "-omit-period") == 0) { Xorriso_relax_compliance(xorriso, "no_force_dots", 0); - } else if(strcmp(argv[i], "-allow-lowercase") == 0) { + } else if(strcmp(argpt, "-allow-lowercase") == 0) { Xorriso_relax_compliance(xorriso, "lowercase", 0); - } else if(strcmp(argv[i], "-hide") == 0 || - strcmp(argv[i], "-hide-list") == 0 || - strcmp(argv[i], "-hide-joliet") == 0 || - strcmp(argv[i], "-hide-joliet-list") == 0) { + } else if(strcmp(argpt, "-hide") == 0 || + strcmp(argpt, "-hide-list") == 0 || + strcmp(argpt, "-hide-joliet") == 0 || + strcmp(argpt, "-hide-joliet-list") == 0) { if(i+1>=argc) goto not_enough_args; i++; /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "-root") == 0 || - strcmp(argv[i], "-old-root") == 0) { + } else if(strcmp(argpt, "-root") == 0 || + strcmp(argpt, "-old-root") == 0) { if(i+1>=argc) goto not_enough_args; i++; /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "--old-root-no-md5")==0 || - strcmp(argv[i], "--old-root-devno")==0 || - strcmp(argv[i], "--old-root-no-ino")==0) { + } else if(strcmp(argpt, "--old-root-no-md5")==0 || + strcmp(argpt, "--old-root-devno")==0 || + strcmp(argpt, "--old-root-no-ino")==0) { /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "-dir-mode") == 0) { + } else if(strcmp(argpt, "-dir-mode") == 0) { if(i+1>=argc) goto not_enough_args; i++; @@ -1458,7 +1489,7 @@ not_enough_args:; if(ret<=0) goto problem_handler_2; dir_mode= mode_or; - } else if(strcmp(argv[i], "-file-mode") == 0) { + } else if(strcmp(argpt, "-file-mode") == 0) { if(i+1>=argc) goto not_enough_args; i++; @@ -1467,29 +1498,29 @@ not_enough_args:; if(ret<=0) goto problem_handler_2; file_mode= mode_or; - } else if(strcmp(argv[i], "-jigdo-jigdo") == 0 || - strcmp(argv[i], "-jigdo-template") == 0 || - strcmp(argv[i], "-jigdo-min-file-size") == 0 || - strcmp(argv[i], "-jigdo-exclude") == 0 || - strcmp(argv[i], "-jigdo-force-md5") == 0 || - strcmp(argv[i], "-jigdo-map") == 0 || - strcmp(argv[i], "-jigdo-template-compress") == 0 || - strcmp(argv[i], "-checksum_algorithm_iso") == 0 || - strcmp(argv[i], "-checksum_algorithm_template") == 0 || - strcmp(argv[i], "-md5-list") == 0) { + } else if(strcmp(argpt, "-jigdo-jigdo") == 0 || + strcmp(argpt, "-jigdo-template") == 0 || + strcmp(argpt, "-jigdo-min-file-size") == 0 || + strcmp(argpt, "-jigdo-exclude") == 0 || + strcmp(argpt, "-jigdo-force-md5") == 0 || + strcmp(argpt, "-jigdo-map") == 0 || + strcmp(argpt, "-jigdo-template-compress") == 0 || + strcmp(argpt, "-checksum_algorithm_iso") == 0 || + strcmp(argpt, "-checksum_algorithm_template") == 0 || + strcmp(argpt, "-md5-list") == 0) { i++; - ret= Xorriso_option_jigdo(xorriso, argv[i - 1], argv[i], 0); + ret= Xorriso_option_jigdo(xorriso, argpt, argv[i], 0); if(ret <= 0) goto problem_handler_2; - } else if(strcmp(argv[i], "-append_partition") == 0) { + } else if(strcmp(argpt, "-append_partition") == 0) { i+= 3; ret= Xorriso_option_append_partition(xorriso, argv[i - 2], argv[i - 1], argv[i], 0); if(ret <= 0) goto problem_handler_2; - } else if(strcmp(argv[i], "-B") == 0 || - strcmp(argv[i], "-sparc-boot") == 0) { + } else if(strcmp(argpt, "-B") == 0 || + strcmp(argpt, "-sparc-boot") == 0) { i++; if(strlen(argv[i]) >= SfileadrL) continue; @@ -1536,32 +1567,33 @@ not_enough_args:; } } - } else if(strcmp(argv[i], "-sparc-label") == 0) { + } else if(strcmp(argpt, "-sparc-label") == 0) { i++; strncpy(xorriso->ascii_disc_label, argv[i], Xorriso_disc_label_sizE - 1); xorriso->ascii_disc_label[Xorriso_disc_label_sizE - 1] = 0; - } else if(strcmp(argv[i], "--stdio_sync")==0) { + } else if(strcmp(argpt, "--stdio_sync")==0) { if(i+1>=argc) goto not_enough_args; i++; /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "--emul-toc")==0 || - strcmp(argv[i], "--no-emul-toc")==0) { + } else if(strcmp(argpt, "--emul-toc")==0 || + strcmp(argpt, "--no-emul-toc")==0) { /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "--old-empty")==0) { + } else if(strcmp(argpt, "--old-empty")==0) { xorriso->do_old_empty= 1; - } else if(strcmp(argv[i], "-disallow_dir_id_ext")==0) { + } else if(strcmp(argpt, "-disallow_dir_id_ext")==0) { /* was already handled in first argument scan */; - } else if(strcmp(argv[i], "--no_rc")==0) { + } else if(strcmp(argpt, "--no_rc")==0) { /* was already handled in Xorriso_prescan_args */; - } else if(argv[i][0]=='-' && argv[i][1]!=0) { - ret= Xorriso_genisofs_count_args(xorriso, argc - i, argv + i, &count, 1); + } else if(argpt[0]=='-' && argpt[1]!=0) { + hargv[0]= argpt; + ret= Xorriso_genisofs_count_args(xorriso, argc - i, hargv, &count, 1); if(ret > 0) { sprintf(xorriso->info_text, "-as %s: Unsupported option %s", whom, Text_shellsafe(argv[i], sfe, 0)); @@ -1730,19 +1762,23 @@ problem_handler_2:; /* After all pathspecs are added: perform boot related options */ for(j= 0; j < delay_opt_count; j++) { - i= delay_opt_list[j]; - if(strcmp(argv[i], "-no-emul-boot")==0) { + i= delay_opt_list[j] & ~(1 << 31); + if(delay_opt_list[j] & (1 << 31)) + argpt= argv[i] + 1; + else + argpt= argv[i]; + if(strcmp(argpt, "-no-emul-boot")==0) { emul_boot= xorriso->boot_image_emul= 0; - } else if(strcmp(argv[i], "-hard-disk-boot")==0) { + } else if(strcmp(argpt, "-hard-disk-boot")==0) { emul_boot= xorriso->boot_image_emul= 1; - } else if(strcmp(argv[i], "-boot-info-table")==0) { + } else if(strcmp(argpt, "-boot-info-table")==0) { xorriso->patch_isolinux_image= 1; - } else if(strcmp(argv[i], "-b") == 0 || - strcmp(argv[i], "-eltorito-boot") == 0 || - strcmp(argv[i], "--efi-boot") == 0 || - strcmp(argv[i], "-e") == 0) { + } else if(strcmp(argpt, "-b") == 0 || + strcmp(argpt, "-eltorito-boot") == 0 || + strcmp(argpt, "--efi-boot") == 0 || + strcmp(argpt, "-e") == 0) { i++; - if(strcmp(argv[i - 1], "--efi-boot") == 0) { + if(strcmp(argpt, "--efi-boot") == 0) { if(xorriso->boot_image_bin_path[0]) { ret= Xorriso_genisofs_add_boot(xorriso, whom, &option_b, &emul_boot, 0); @@ -1755,7 +1791,7 @@ problem_handler_2:; } else { boot_path= xorriso->boot_image_bin_path; - if(strcmp(argv[i - 1], "-e") == 0) + if(strcmp(argpt, "-e") == 0) xorriso->boot_platform_id= 0xef; else xorriso->boot_platform_id= 0x00; @@ -1779,8 +1815,8 @@ problem_handler_2:; } xorriso->keep_boot_image= 0; with_boot_image= 1; - } else if(strcmp(argv[i], "-c") == 0 || - strcmp(argv[i], "-eltorito-catalog") == 0) { + } else if(strcmp(argpt, "-c") == 0 || + strcmp(argpt, "-eltorito-catalog") == 0) { if(i+1>=argc) goto not_enough_args; i++; @@ -1793,56 +1829,56 @@ problem_handler_2:; goto ex; if(with_cat_path == 0) with_cat_path= 1; - } else if(strcmp(argv[i], "-boot-load-size") == 0) { + } else if(strcmp(argpt, "-boot-load-size") == 0) { if(i+1>=argc) goto not_enough_args; i++; sscanf(argv[i], "%d", &ret); xorriso->boot_image_load_size= ret * 512; - } else if(strncmp(argv[i], "isolinux_mbr=", 13)==0) { - sprintf(sfe, "isohybrid=%s", argv[i] + 13); + } else if(strncmp(argpt, "isolinux_mbr=", 13)==0) { + sprintf(sfe, "isohybrid=%s", argpt + 13); ret= Xorriso_option_boot_image(xorriso, "isolinux", sfe, 0); if(ret <= 0) goto problem_handler_boot; - } else if(strcmp(argv[i], "-eltorito-alt-boot")==0) { + } else if(strcmp(argpt, "-eltorito-alt-boot")==0) { ret= Xorriso_genisofs_add_boot(xorriso, whom, &option_b, &emul_boot, 0); if(ret <= 0) goto problem_handler_boot; - } else if(strcmp(argv[i], "--embedded-boot")==0 || - strcmp(argv[i], "-generic-boot")==0 || - strcmp(argv[i], "-G") == 0 || - strcmp(argv[i], "-isohybrid-mbr")==0) { + } else if(strcmp(argpt, "--embedded-boot")==0 || + strcmp(argpt, "-generic-boot")==0 || + strcmp(argpt, "-G") == 0 || + strcmp(argpt, "-isohybrid-mbr")==0) { if(i+1>=argc) goto not_enough_args; i++; ret= Xorriso_set_system_area_path(xorriso, argv[i], 0); if(ret <= 0) goto problem_handler_boot; - if(strcmp(argv[i - 1], "-isohybrid-mbr")==0) + if(strcmp(argpt, "-isohybrid-mbr")==0) xorriso->system_area_options= (xorriso->system_area_options & ~3) | 2; - } else if(strcmp(argv[i], "--protective-msdos-label")==0) { + } else if(strcmp(argpt, "--protective-msdos-label")==0) { xorriso->system_area_options= (xorriso->system_area_options & ~3) | 1; - } else if(strcmp(argv[i], "--boot-catalog-hide")==0) { + } else if(strcmp(argpt, "--boot-catalog-hide")==0) { xorriso->boot_image_cat_hidden|= 3; - } else if(strcmp(argv[i], "-partition_offset") == 0 || - strcmp(argv[i], "-partition_sec_hd") == 0 || - strcmp(argv[i], "-partition_hd_cyl") == 0 || - strcmp(argv[i], "-partition_cyl_align") == 0) { + } else if(strcmp(argpt, "-partition_offset") == 0 || + strcmp(argpt, "-partition_sec_hd") == 0 || + strcmp(argpt, "-partition_hd_cyl") == 0 || + strcmp(argpt, "-partition_cyl_align") == 0) { if(i+1>=argc) goto not_enough_args; i++; - sprintf(sfe, "%s=%.16s", argv[i-1] + 1, argv[i]); + sprintf(sfe, "%s=%.16s", argpt + 1, argv[i]); ret= Xorriso_option_boot_image(xorriso, "any", sfe, 0); if(ret <= 0) goto problem_handler_boot; - } else if(strcmp(argv[i], "-mips-boot") == 0 || - strcmp(argv[i], "-mipsel-boot") == 0) { + } else if(strcmp(argpt, "-mips-boot") == 0 || + strcmp(argpt, "-mipsel-boot") == 0) { if(i + 1 >= argc) goto not_enough_args; i++; - if(strcmp(argv[i - 1], "-mipsel-boot") == 0) + if(strcmp(argpt, "-mipsel-boot") == 0) strcpy(sfe, "mipsel_path="); else strcpy(sfe, "mips_path="); diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 331a6ccf..30e49184 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2011.03.29.151144" +#define Xorriso_timestamP "2011.04.01.133116"