diff -pu3r cdrtools-2.00.3-orig/mkisofs/iso9660.h cdrtools-2.00.3-work/mkisofs/iso9660.h --- cdrtools-2.00.3-orig/mkisofs/iso9660.h 2000-04-19 22:09:18.000000000 +0100 +++ cdrtools-2.00.3-work/mkisofs/iso9660.h 2004-04-08 13:40:19.000000000 +0100 @@ -149,6 +149,13 @@ struct iso_path_table { }; /* + * Romeo ugliness + */ +/* TODO: : This probably belongs somewhere else. */ + +#define LEN_ROMEONAME 128 + +/* * A ISO filename is: "abcde.eee;1" -> '.' ';' * * The maximum needed string length is: @@ -161,6 +168,7 @@ struct iso_path_table { */ #define LEN_ISONAME 31 #define MAX_ISONAME 37 +#define MAX_NAME LEN_ROMEONAME struct iso_directory_record { unsigned char length [ISODCL (1, 1)]; /* 711 */ @@ -173,7 +181,7 @@ struct iso_directory_record { char interleave [ISODCL (28, 28)]; /* 711 */ char volume_sequence_number [ISODCL (29, 32)]; /* 723 */ unsigned char name_len [ISODCL (33, 33)]; /* 711 */ - char name [MAX_ISONAME+1]; /* Not really, but we need something here */ + char name [MAX_NAME+1]; /* Not really, but we need something here */ }; diff -pu3r cdrtools-2.00.3-orig/mkisofs/mkisofs.c cdrtools-2.00.3-work/mkisofs/mkisofs.c --- cdrtools-2.00.3-orig/mkisofs/mkisofs.c 2003-05-15 15:12:44.000000000 +0100 +++ cdrtools-2.00.3-work/mkisofs/mkisofs.c 2004-04-08 13:32:54.000000000 +0100 @@ -95,6 +95,7 @@ int use_genboot = 0; int use_RockRidge = 0; int use_Joliet = 0; int jlen = JMAX; /* maximum Joliet file name length */ +int use_Romeo = 0; int verbose = 1; int debug = 0; int gui = 0; @@ -154,6 +155,7 @@ int iso9660_level = 1; int iso9660_namelen = LEN_ISONAME; /* 31 characters, may be set to 37 */ int full_iso9660_filenames = 0; /* Full 31 character iso9660 filenames */ int relaxed_filenames = 0; /* For Amiga. Disc will not work with DOS */ +int romeo_filenames = 0; /* Romeo-format filenames */ int allow_lowercase = 0; /* Allow lower case letters */ int allow_multidot = 0; /* Allow more than on dot in filename */ int iso_translate = 1; /* 1 == enables '#', '-' and '~' removal */ @@ -345,6 +347,8 @@ struct ld_option { #define OPTION_JLONG 1063 +#define OPTION_ROMEO 1064 + #ifdef UDF #define OPTION_UDF 1500 #endif @@ -538,6 +542,8 @@ static const struct ld_option ld_options 'r', NULL, "Generate rationalized Rock Ridge directory information", ONE_DASH}, {{"rock", no_argument, NULL, 'R'}, 'R', NULL, "Generate Rock Ridge directory information", ONE_DASH}, + {{"romeo", no_argument, NULL, OPTION_ROMEO}, + '\0', NULL, "Enable Romeo format", ONE_DASH}, #ifdef SORTING { {"sort", required_argument, NULL, OPTION_SORT}, @@ -1278,6 +1284,13 @@ main(argc, argv) use_Joliet++; jlen = JLONGMAX; break; + case OPTION_ROMEO: + use_Romeo++; + iso9660_namelen = LEN_ROMEONAME; + full_iso9660_filenames++; + romeo_filenames++; + warn_violate++; + break; case OPTION_JCHARSET: use_Joliet++; /* FALLTHROUGH */ diff -pu3r cdrtools-2.00.3-orig/mkisofs/mkisofs.h cdrtools-2.00.3-work/mkisofs/mkisofs.h --- cdrtools-2.00.3-orig/mkisofs/mkisofs.h 2002-12-07 19:59:42.000000000 +0000 +++ cdrtools-2.00.3-work/mkisofs/mkisofs.h 2004-04-08 13:33:39.000000000 +0100 @@ -343,6 +343,7 @@ extern int iso9660_level; extern int iso9660_namelen; extern int full_iso9660_filenames; extern int relaxed_filenames; +extern int romeo_filenames; extern int allow_lowercase; extern int allow_multidot; extern int iso_translate; diff -pu3r cdrtools-2.00.3-orig/mkisofs/name.c cdrtools-2.00.3-work/mkisofs/name.c --- cdrtools-2.00.3-orig/mkisofs/name.c 2002-12-25 14:16:50.000000000 +0000 +++ cdrtools-2.00.3-work/mkisofs/name.c 2004-04-08 13:39:52.000000000 +0100 @@ -351,6 +351,55 @@ iso9660_file_length(name, sresult, dirfl * Here we allow a more relaxed syntax. */ *result++ = c; + } else if (romeo_filenames) { + /* Romeo-format filenames */ + if (isalnum(c)) { + *result++ = c; + } else { + switch(c) { + /* + * Supported symbols in Romeo-format + * filenames + */ + case ' ': + case '!': + case '%': + case '&': + case '\'': + case '(': + case ')': + case '=': + case '+': + case ',': + case '-': + case '.': + case ';': + case '<': + case '>': + case '_': + *result++ = c; + break; + + case '#': +/* TODO: : Should we disallow this? */ +/* case '-': */ + case '~': + /* + * Check if we should allow these + * illegal characters used by + * Microsoft. + */ + if (iso_translate) + *result++ = '_'; + else + *result++ = c; + break; + + default: + *result++ = '_'; + break; + } + } } else switch (c) { /* * Dos style filenames.