📄 mkisofs.c
字号:
{{"hidden-list", required_argument, NULL, OPTION_H_LIST}, '\0', "FILE", "File with list of ISO9660 files with hidden attribute", ONE_DASH}, {{"hide-joliet", required_argument, NULL, OPTION_J_HIDE}, '\0', "GLOBFILE", "Hide Joliet file", ONE_DASH}, {{"hide-joliet-list", required_argument, NULL, OPTION_J_LIST}, '\0', "FILE", "File with list of Joliet files to hide", ONE_DASH}, {{"hide-joliet-trans-tbl", no_argument, NULL, OPTION_HIDE_TRANS_TBL}, '\0', NULL, "Hide TRANS.TBL from Joliet tree", ONE_DASH}, {{"hide-rr-moved", no_argument, NULL, OPTION_HIDE_RR_MOVED}, '\0', NULL, "Rename RR_MOVED to .rr_moved in Rock Ridge tree", ONE_DASH}, {{"gui", no_argument, NULL, OPTION_GUI}, '\0', NULL, "Switch behaviour for GUI", ONE_DASH}, {{NULL, required_argument, NULL, 'i'}, 'i', "ADD_FILES", "No longer supported", TWO_DASHES}, {{"input-charset", required_argument, NULL, OPTION_INPUT_CHARSET}, '\0', "CHARSET", "Local input charset for file name conversion", ONE_DASH}, {{"output-charset", required_argument, NULL, OPTION_OUTPUT_CHARSET}, '\0', "CHARSET", "Output charset for file name conversion", ONE_DASH}, {{"iso-level", required_argument, NULL, OPTION_ISO_LEVEL}, '\0', "LEVEL", "Set ISO9660 conformance level (1..3)", ONE_DASH}, {{"joliet", no_argument, NULL, 'J'}, 'J', NULL, "Generate Joliet directory information", ONE_DASH}, {{"joliet-long", no_argument, NULL, OPTION_JLONG}, '\0', NULL, "Allow Joliet file names to be 103 Unicode characters", ONE_DASH}, {{"jcharset", required_argument, NULL, OPTION_JCHARSET}, '\0', "CHARSET", "Local charset for Joliet directory information", ONE_DASH}, {{"full-iso9660-filenames", no_argument, NULL, 'l'}, 'l', NULL, "Allow full 31 character filenames for ISO9660 names", ONE_DASH}, {{"max-iso9660-filenames", no_argument, NULL, OPTION_MAX_FILENAMES}, '\0', NULL, "Allow 37 character filenames for ISO9660 names (violates ISO9660)", ONE_DASH}, {{"allow-leading-dots", no_argument, NULL, 'L'}, 'L', NULL, "Allow ISO9660 filenames to start with '.' (violates ISO9660)", ONE_DASH}, {{"log-file", required_argument, NULL, OPTION_LOG_FILE}, '\0', "LOG_FILE", "Re-direct messages to LOG_FILE", ONE_DASH}, {{"exclude", required_argument, NULL, 'm'}, 'm', "GLOBFILE", "Exclude file name", ONE_DASH}, {{"exclude-list", required_argument, NULL, OPTION_X_LIST}, '\0', "FILE", "File with list of file names to exclude", ONE_DASH}, {{"pad", no_argument, NULL, OPTION_PAD}, 0, NULL, "Pad outout to a multiple of 32k (default)", ONE_DASH}, {{"no-pad", no_argument, NULL, OPTION_NOPAD}, 0, NULL, "Do not pad output to a multiple of 32k", ONE_DASH}, {{"prev-session", required_argument, NULL, 'M'}, 'M', "FILE", "Set path to previous session to merge", ONE_DASH}, {{"omit-version-number", no_argument, NULL, 'N'}, 'N', NULL, "Omit version number from ISO9660 filename (violates ISO9660)", ONE_DASH}, {{"new-dir-mode", required_argument, NULL, OPTION_NEW_DIR_MODE}, '\0', "mode", "Mode used when creating new directories.", ONE_DASH}, {{"force-rr", no_argument, NULL, OPTION_FORCE_RR}, 0, NULL, "Inhibit automatic Rock Ridge detection for previous session", ONE_DASH}, {{"no-rr", no_argument, NULL, OPTION_NO_RR}, 0, NULL, "Inhibit reading of Rock Ridge attributes from previous session", ONE_DASH}, {{"no-split-symlink-components", no_argument, NULL, OPTION_NOSPLIT_SL_COMPONENT}, 0, NULL, "Inhibit splitting symlink components", ONE_DASH}, {{"no-split-symlink-fields", no_argument, NULL, OPTION_NOSPLIT_SL_FIELD}, 0, NULL, "Inhibit splitting symlink fields", ONE_DASH}, {{"output", required_argument, NULL, 'o'}, 'o', "FILE", "Set output file name", ONE_DASH}, {{"path-list", required_argument, NULL, OPTION_P_LIST}, '\0', "FILE", "File with list of pathnames to process", ONE_DASH}, {{"preparer", required_argument, NULL, 'p'}, 'p', "PREP", "Set Volume preparer", ONE_DASH}, {{"print-size", no_argument, NULL, OPTION_PRINT_SIZE}, '\0', NULL, "Print estimated filesystem size and exit", ONE_DASH}, {{"publisher", required_argument, NULL, 'P'}, 'P', "PUB", "Set Volume publisher", ONE_DASH}, {{"quiet", no_argument, NULL, OPTION_QUIET}, '\0', NULL, "Run quietly", ONE_DASH}, {{"rational-rock", no_argument, NULL, 'r'}, 'r', NULL, "Generate rationalized Rock Ridge directory information", ONE_DASH}, {{"rock", no_argument, NULL, 'R'}, 'R', NULL, "Generate Rock Ridge directory information", ONE_DASH},#ifdef SORTING { {"sort", required_argument, NULL, OPTION_SORT}, '\0', "FILE", "Sort file content locations according to rules in FILE" , ONE_DASH },#endif /* SORTING */ {{"split-output", no_argument, NULL, OPTION_SPLIT_OUTPUT}, '\0', NULL, "Split output into files of approx. 1GB size", ONE_DASH}, {{"sysid", required_argument, NULL, OPTION_SYSID}, '\0', "ID", "Set System ID", ONE_DASH}, {{"translation-table", no_argument, NULL, 'T'}, 'T', NULL, "Generate translation tables for systems that don't understand long filenames", ONE_DASH}, {{"table-name", required_argument, NULL, OPTION_TRANS_TBL}, '\0', "TABLE_NAME", "Translation table file name", ONE_DASH}, {{"ucs-level", required_argument, NULL, OPTION_UCS_LEVEL}, '\0', "LEVEL", "Set Joliet UCS level (1..3)", ONE_DASH},#ifdef UDF {{"udf", no_argument, NULL, OPTION_UDF}, '\0', NULL, "Generate UDF file system", ONE_DASH},#endif#ifdef DVD_VIDEO {{"dvd-video", no_argument, NULL, OPTION_DVD}, '\0', NULL, "Generate DVD-Video compliant UDF file system", ONE_DASH},#endif {{"uid", required_argument, NULL, OPTION_UID}, '\0', "uid", "Make the owner of all files this uid.", ONE_DASH}, {{"untranslated-filenames", no_argument, NULL, 'U'}, 'U', NULL, "Allow Untranslated filenames (for HPUX & AIX - violates ISO9660). Forces -l, -d, -L, -N, -relaxed-filenames, -allow-lowercase, -allow-multidot", ONE_DASH}, {{"relaxed-filenames", no_argument, NULL, OPTION_RELAXED_FILENAMES}, '\0', NULL, "Allow 7 bit ASCII except lower case characters (violates ISO9660)", ONE_DASH}, {{"gbk4dos-filenames", no_argument, NULL, OPTION_GBK4DOS_FILENAMES}, '\0', NULL, "Allow 8 bit ASCII GBK standard code characters (violates ISO9660)", ONE_DASH}, {{"gbk4win-filenames", no_argument, NULL, OPTION_GBK4WIN_FILENAMES}, '\0', NULL, "Allow 8 bit ASCII GBK standard code characters (violates ISO9660)", ONE_DASH}, {{"no-iso-translate", no_argument, NULL, OPTION_ISO_TRANSLATE}, '\0', NULL, "Do not translate illegal ISO characters '~', '-' and '#' (violates ISO9660)", ONE_DASH}, {{"allow-lowercase", no_argument, NULL, OPTION_ALLOW_LOWERCASE}, '\0', NULL, "Allow lower case characters in addition to the current character set (violates ISO9660)", ONE_DASH}, {{"allow-multidot", no_argument, NULL, OPTION_ALLOW_MULTIDOT}, '\0', NULL, "Allow more than one dot in filenames (e.g. .tar.gz) (violates ISO9660)", ONE_DASH}, {{"use-fileversion", no_argument, NULL, OPTION_USE_FILEVERSION}, '\0', "LEVEL", "Use file version # from filesystem", ONE_DASH}, {{"verbose", no_argument, NULL, 'v'}, 'v', NULL, "Verbose", ONE_DASH}, {{"version", no_argument, NULL, OPTION_PVERSION}, '\0', NULL, "Print the current version", ONE_DASH}, {{"volid", required_argument, NULL, 'V'}, 'V', "ID", "Set Volume ID", ONE_DASH}, {{"volset", required_argument, NULL, OPTION_VOLSET}, '\0', "ID", "Set Volume set ID", ONE_DASH}, {{"volset-size", required_argument, NULL, OPTION_VOLSET_SIZE}, '\0', "#", "Set Volume set size", ONE_DASH}, {{"volset-seqno", required_argument, NULL, OPTION_VOLSET_SEQ_NUM}, '\0', "#", "Set Volume set sequence number", ONE_DASH}, {{"old-exclude", required_argument, NULL, 'x'}, 'x', "FILE", "Exclude file name(depreciated)", ONE_DASH}, {{"hard-disk-boot", no_argument, NULL, OPTION_HARD_DISK_BOOT}, '\0', NULL, "Boot image is a hard disk image", ONE_DASH}, {{"no-emul-boot", no_argument, NULL, OPTION_NO_EMUL_BOOT}, '\0', NULL, "Boot image is 'no emulation' image", ONE_DASH}, {{"no-boot", no_argument, NULL, OPTION_NO_BOOT}, '\0', NULL, "Boot image is not bootable", ONE_DASH}, {{"boot-load-seg", required_argument, NULL, OPTION_BOOT_LOAD_ADDR}, '\0', "#", "Set load segment for boot image", ONE_DASH}, {{"boot-load-size", required_argument, NULL, OPTION_BOOT_LOAD_SIZE}, '\0', "#", "Set numbers of load sectors", ONE_DASH}, {{"boot-info-table", no_argument, NULL, OPTION_BOOT_INFO_TABLE}, '\0', NULL, "Patch boot image with info table", ONE_DASH}, {{"transparent-compression", no_argument, NULL, 'z'}, 'z', NULL, "Enable transparent compression of files", ONE_DASH},#ifdef APPLE_HYB {{"hfs-type", required_argument, NULL, OPTION_HFS_TYPE}, '\0', "TYPE", "Set HFS default TYPE", ONE_DASH}, {{"hfs-creator", required_argument, NULL, OPTION_HFS_CREATOR}, '\0', "CREATOR", "Set HFS default CREATOR", ONE_DASH}, {{"apple", no_argument, NULL, 'g'}, 'g', NULL, "Add Apple ISO9660 extensions", ONE_DASH}, {{"hfs", no_argument, NULL, 'h'}, 'h', NULL, "Create ISO9660/HFS hybrid", ONE_DASH}, {{"map", required_argument, NULL, 'H'}, 'H', "MAPPING_FILE", "Map file extensions to HFS TYPE/CREATOR", ONE_DASH}, {{"magic", required_argument, NULL, OPTION_MAGIC_FILE}, '\0', "FILE", "Magic file for HFS TYPE/CREATOR", ONE_DASH}, {{"probe", no_argument, NULL, OPTION_PROBE}, '\0', NULL, "Probe all files for Apple/Unix file types", ONE_DASH}, {{"mac-name", no_argument, NULL, OPTION_MACNAME}, '\0', NULL, "Use Macintosh name for ISO9660/Joliet/RockRidge file name", ONE_DASH}, {{"no-mac-files", no_argument, NULL, OPTION_NOMACFILES}, '\0', NULL, "Do not look for Unix/Mac files (depreciated)", ONE_DASH}, {{"boot-hfs-file", required_argument, NULL, OPTION_BOOT_HFS_FILE}, '\0', "FILE", "Set HFS boot image name", ONE_DASH}, {{"part", no_argument, NULL, OPTION_GEN_PT}, '\0', NULL, "Generate HFS partition table", ONE_DASH}, {{"cluster-size", required_argument, NULL, OPTION_BSIZE}, '\0', "SIZE", "Cluster size for PC Exchange Macintosh files", ONE_DASH}, {{"auto", required_argument, NULL, OPTION_AUTOSTART}, '\0', "FILE", "Set HFS AutoStart file name", ONE_DASH}, {{"no-desktop", no_argument, NULL, OPTION_CREATE_DT}, '\0', NULL, "Do not create the HFS (empty) Desktop files", ONE_DASH}, {{"hide-hfs", required_argument, NULL, OPTION_HFS_HIDE}, '\0', "GLOBFILE", "Hide HFS file", ONE_DASH}, {{"hide-hfs-list", required_argument, NULL, OPTION_HFS_LIST}, '\0', "FILE", "List of HFS files to hide", ONE_DASH}, {{"hfs-volid", required_argument, NULL, OPTION_HFS_VOLID}, '\0', "HFS_VOLID", "Volume name for the HFS partition", ONE_DASH}, {{"icon-position", no_argument, NULL, OPTION_ICON_POS}, '\0', NULL, "Keep HFS icon position", ONE_DASH}, {{"root-info", required_argument, NULL, OPTION_ROOT_INFO}, '\0', "FILE", "finderinfo for root folder", ONE_DASH}, {{"input-hfs-charset", required_argument, NULL, OPTION_HFS_INPUT_CHARSET}, '\0', "CHARSET", "Local input charset for HFS file name conversion", ONE_DASH}, {{"output-hfs-charset", required_argument, NULL, OPTION_HFS_OUTPUT_CHARSET}, '\0', "CHARSET", "Output charset for HFS file name conversion", ONE_DASH}, {{"hfs-unlock", no_argument, NULL, OPTION_HFS_UNLOCK}, '\0', NULL, "Leave HFS Volume unlocked", ONE_DASH}, {{"hfs-bless", required_argument, NULL, OPTION_HFS_BLESS}, '\0', "FOLDER_NAME", "Name of Folder to be blessed", ONE_DASH}, {{"hfs-parms", required_argument, NULL, OPTION_HFS_PARMS}, '\0', "PARAMETERS", "Comma separated list of HFS parameters", ONE_DASH},#ifdef PREP_BOOT {{"prep-boot", required_argument, NULL, OPTION_PREP_BOOT}, '\0', "FILE", "PReP boot image file -- up to 4 are allowed", ONE_DASH},#endif /* PREP_BOOT */ {{"cap", no_argument, NULL, OPTION_CAP}, '\0', NULL, "Look for AUFS CAP Macintosh files", TWO_DASHES}, {{"netatalk", no_argument, NULL, OPTION_NETA}, '\0', NULL, "Look for NETATALK Macintosh files", TWO_DASHES}, {{"double", no_argument, NULL, OPTION_DBL}, '\0', NULL, "Look for AppleDouble Macintosh files", TWO_DASHES}, {{"ethershare", no_argument, NULL, OPTION_ESH}, '\0', NULL, "Look for Helios EtherShare Macintosh files", TWO_DASHES}, {{"exchange", no_argument, NULL, OPTION_FE}, '\0', NULL, "Look for PC Exchange Macintosh files", TWO_DASHES}, {{"sgi", no_argument, NULL, OPTION_SGI}, '\0', NULL, "Look for SGI Macintosh files", TWO_DASHES}, {{"macbin", no_argument, NULL, OPTION_MBIN}, '\0', NULL, "Look for MacBinary Macintosh files", TWO_DASHES}, {{"single", no_argument, NULL, OPTION_SGL}, '\0', NULL, "Look for AppleSingle Macintosh files", TWO_DASHES}, {{"ushare", no_argument, NULL, OPTION_USH}, '\0', NULL, "Look for IPT UShare Macintosh files", TWO_DASHES}, {{"xinet", no_argument, NULL, OPTION_XIN}, '\0', NULL, "Look for XINET Macintosh files", TWO_DASHES}, {{"dave", no_argument, NULL, OPTION_DAVE}, '\0', NULL, "Look for DAVE Macintosh files", TWO_DASHES}, {{"sfm", no_argument, NULL, OPTION_SFM}, '\0', NULL, "Look for SFM Macintosh files", TWO_DASHES}, {{"osx-double", no_argument, NULL, OPTION_XDBL}, '\0', NULL, "Look for MacOS X AppleDouble Macintosh files", TWO_DASHES}, {{"osx-hfs", no_argument, NULL, OPTION_XHFS}, '\0', NULL, "Look for MacOS X HFS Macintosh files", TWO_DASHES},#endif /* APPLE_HYB */};#define OPTION_COUNT (sizeof ld_options / sizeof ld_options[0])#if defined(ultrix) || defined(_AUX_SOURCE) char *strdup __PR((char *s));#endifLOCAL void read_rcfile __PR((char *appname));LOCAL void susage __PR((int excode));LOCAL void usage __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 **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, char *from));EXPORT void * e_malloc __PR((size_t size));#if defined(ultrix) || defined(_AUX_SOURCE)char*strdup(s) char *s;{ char *c; if (c = (char *) malloc(strlen(s) + 1)) strcpy(c, s); return c;}#endifLOCAL voidread_rcfile(appname) char *appname;{ FILE *rcfile = (FILE *) NULL; struct rcopts *rco; char *pnt, *pnt1; char linebuffer[256]; static char rcfn[] = ".mkisofsrc"; char filename[1000]; int linum; strcpy(filename, rcfn); if (access(filename, R_OK) == 0) rcfile = fopen(filename, "r"); if (!rcfile && errno != ENOENT)#ifdef USE_LIBSCHILY errmsg("Cannot open '%s'.\n", filename);#else perror(filename);#endif if (!rcfile) { pnt = getenv("MKISOFSRC"); if (pnt && strlen(pnt) <= sizeof(filename)) { strcpy(filename, pnt); if (access(filename, R_OK) == 0) rcfile = fopen(filename, "r"); if (!rcfile && errno != ENOENT)#ifdef USE_LIBSCHILY errmsg("Cannot open '%s'.\n", filename);#else perror(filename);#endif } } if (!rcfile) { pnt = getenv("HOME"); if (pnt && strlen(pnt) + strlen(rcfn) + 2 <= sizeof(filename)) { strcpy(filename, pnt); strcat(filename, "/"); strcat(filename, rcfn); if (access(filename, R_OK) == 0) rcfile = fopen(filename, "r"); if (!rcfile && errno != ENOENT)#ifdef USE_LIBSCHILY errmsg("Cannot open '%s'.\n", filename);#else perror(filename);#endif } } if (!rcfile && strlen(appname) + sizeof(rcfn) + 2 <= sizeof(filename)) { strcpy(filename, appname); pnt = strrchr(filename, '/'); if (pnt) { strcpy(pnt + 1, rcfn); if (access(filename, R_OK) == 0) rcfile = fopen(filename, "r"); if (!rcfile && errno != ENOENT)#ifdef USE_LIBSCHILY errmsg("Cannot open '%s'.\n", filename);#else perror(filename);#endif } } if (!rcfile) return; if (verbose > 0) { fprintf(stderr, "Using \"%s\"\n", filename); } /* OK, we got it. Now read in the lines and parse them */ linum = 0; while (fgets(linebuffer, sizeof(linebuffer), rcfile)) { char *name; char *name_end; ++linum; /* skip any leading white space */ pnt = linebuffer; while (*pnt == ' ' || *pnt == '\t') ++pnt; /* * If we are looking at a # character, this line is a comment. */ if (*pnt == '#') continue; /* * The name should begin in the left margin. Make sure it is * in upper case. Stop when we see white space or a comment. */ name = pnt; while (*pnt && (isalpha((unsigned char) *pnt) || *pnt == '_')) { if (islower((unsigned char) *pnt)) *pnt = toupper((unsigned char) *pnt); pnt++; } if (name == pnt) { fprintf(stderr, "%s:%d: name required\n", filename, linum); continue; } name_end = pnt; /* Skip past white space after the name */ while (*pnt == ' ' || *pnt == '\t') pnt++; /* silently ignore errors in the rc file. */ if (*pnt != '=') { fprintf(stderr, "%s:%d: equals sign required after '%.*s'\n", filename, linum, name_end-name, name); continue; } /* Skip pas the = sign, and any white space following it */ pnt++; /* Skip past '=' sign */ while (*pnt == ' ' || *pnt == '\t') pnt++; /* now it is safe to NUL terminate the name */ *name_end = 0; /* Now get rid of trailing newline */ pnt1 = pnt; while (*pnt1) { if (*pnt1 == '\n') { *pnt1 = 0; break; } pnt1++; }; /* OK, now figure out which option we have */ for (rco = rcopt; rco->tag; rco++) { if (strcmp(rco->tag, name) == 0) { *rco->variable = strdup(pnt); break; }; } if (rco->tag == NULL) { fprintf(stderr, "%s:%d: field name \"%s\" unknown\n", filename, linum, name); } } if (ferror(rcfile))#ifdef USE_LIBSCHILY errmsg("Read error on '%s'.\n", filename);#else perror(filename);#endif fclose(rcfile);}char *path_table_l = NULL;char *path_table_m = NULL;char *jpath_table_l = NULL;char *jpath_table_m = NULL;int goof = 0;#ifndef TRUE#define TRUE 1#endif#ifndef FALSE#define FALSE 0#endifLOCAL voidsusage(excode) int excode;{ const char *program_name = "mkisofs"; fprintf(stderr, "Usage: %s [options] file...\n", program_name); fprintf(stderr, "\nUse %s -help\n", program_name); fprintf(stderr, "to get a list of valid options.\n"); exit(excode);}LOCAL voidusage(excode) int excode;{ const char *program_name = "mkisofs";#if 0 fprintf(stderr, "Usage:\n"); fprintf(stderr, "mkisofs [-o outfile] [-R] [-V volid] [-v] [-a] \[-T]\n [-l] [-d] [-V] [-D] [-L] [-p preparer]" "[-P publisher] [ -A app_id ] [-z] \n \[-b boot_image_name] [-c boot_catalog-name] \[-x path -x path ...] path\n");#endif int i;/* const char **targets, **pp;*/ fprintf(stderr, "Usage: %s [options] file...\n", program_name); fprintf(stderr, "Options:\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -