diff -Naur cdrtools-2.01a24-orig/mkisofs/joliet.c cdrtools-2.01a24-jh/mkisofs/joliet.c --- cdrtools-2.01a24-orig/mkisofs/joliet.c 2003-04-28 00:36:08.000000000 +0200 +++ cdrtools-2.01a24-jh/mkisofs/joliet.c 2004-02-09 22:08:09.000000000 +0100 @@ -263,11 +263,60 @@ buffer[i] = inls->charset2uni[uc].uni2; /* final UNICODE */ /* conversion */ buffer[i + 1] = inls->charset2uni[uc].uni1; - } - if (size & 1) { /* beautification */ - buffer[size - 1] = 0; + // convert UTF-8 to UTF-16 + int octet = tmpbuf[j]; + if (octet == 0) + break; + else + if ((octet & 0x80) == 0) { + buffer[i] = 0; + buffer[i + 1] = octet; + } + else + if ((octet & 0xE0) == 0xC0) { + int octet2 = tmpbuf[j + 1]; + if (octet2 == 0) + break; + int code = ((octet & 0x1F) << 6) + | (octet2 & 0x3F); + buffer[i] = (code & 0xFF00) >> 8; + buffer[i + 1] = code & 0xFF; + j++; + } + else + if ((octet & 0xF0) == 0xE0) { + int octet2 = tmpbuf[j + 1]; + int octet3 = tmpbuf[j + 2]; + if (octet2 == 0 || octet3 == 0) + break; + int code = ((octet & 0x0F) << 12) + | ((octet2 & 0x3F) << 6) + | (octet3 & 0x3F); + buffer[i] = (code & 0xFF00) >> 8; + buffer[i + 1] = code & 0xFF; + j += 2; + } + + if (buffer[i] == 0) { + // replace illegal characters by '_' + switch (uc) { + case '*': + case '/': + case ':': + case ';': + case '?': + case '\\': + case '\0': + buffer[i + 1] = '_'; + } + } } + + // fill end of buffer with zeros + for (; i < size; i++) + buffer[i] = 0; + if (source == NULL) { free(tmpbuf); } @@ -294,6 +343,34 @@ rtn = strlen(string) << 1; + rtn = 0; + int i = 0; + while (1) { + int octet = string[i]; + if (octet == 0) + break; + else + if ((octet & 0x80) == 0) { + rtn += 2; + i++; + } + else + if ((octet & 0xE0) == 0xC0) { + if (string[i + 1] == 0) + break; + rtn += 2; + i += 2; + } + else + if ((octet & 0xF0) == 0xE0) { + if (string[i + 1] == 0 + || string[i + 2] == 0) + break; + rtn += 2; + i += 3; + } + } + /* * We do clamp the maximum length of a Joliet string to be the * maximum path size. This helps to ensure that we don't completely @@ -1033,7 +1110,8 @@ "Error: %s and %s have the same Joliet name\n", (*r)->whole_name, (*l)->whole_name); #endif - jsort_goof++; + if (strncmp((*r)->whole_name, "/rr_moved/", 10) != 0) + jsort_goof++; } /* * Put the '.' and '..' entries on the head of the sorted list. diff -Naur cdrtools-2.01a24-orig/mkisofs/mkisofs.c cdrtools-2.01a24-jh/mkisofs/mkisofs.c --- cdrtools-2.01a24-orig/mkisofs/mkisofs.c 2004-01-07 00:23:46.000000000 +0100 +++ cdrtools-2.01a24-jh/mkisofs/mkisofs.c 2004-02-10 21:49:50.000000000 +0100 @@ -62,7 +62,7 @@ struct directory *root = NULL; int path_ind; -char version_string[] = "mkisofs 2.01a24"; +char version_string[] = "mkisofs 2.01a24+UTF-8"; char *outfile; FILE *discimage; @@ -1911,6 +1911,12 @@ printf("%s (%s-%s-%s)\n", version_string, HOST_CPU, HOST_VENDOR, HOST_OS); + printf("Modified by Joerg P. M. Haeger for webCDwriter\n"); + printf("NOTE: this version of mkisofs is an inofficial (modified) release of mkisofs\n"); + printf(" and thus may have bugs that are not present in the original version.\n"); + printf(" Please send bug reports and support requests to .\n"); + printf(" The original author should not be bothered with problems of this version.\n"); + printf("\n"); exit(0); break; case OPTION_NOSPLIT_SL_COMPONENT: diff -Naur cdrtools-2.01a24-orig/mkisofs/write.c cdrtools-2.01a24-jh/mkisofs/write.c --- cdrtools-2.01a24-orig/mkisofs/write.c 2003-07-13 14:42:16.000000000 +0200 +++ cdrtools-2.01a24-jh/mkisofs/write.c 2004-02-09 22:08:10.000000000 +0100 @@ -672,7 +672,8 @@ (*r)->whole_name, (*l)->whole_name, (*r)->name); #endif - sort_goof++; + if (strstr((*r)->whole_name, "/rr_moved/") == NULL) + sort_goof++; } } /*