[Debburn-changes] r460 - in cdrkit/trunk: genisoimage icedax
Eduard Bloch
blade at alioth.debian.org
Fri Nov 24 01:39:07 CET 2006
Author: blade
Date: 2006-11-24 01:39:06 +0100 (Fri, 24 Nov 2006)
New Revision: 460
Modified:
cdrkit/trunk/genisoimage/genisoimage.h
cdrkit/trunk/icedax/toc.c
Log:
Lorinders code, actually...
Modified: cdrkit/trunk/genisoimage/genisoimage.h
===================================================================
--- cdrkit/trunk/genisoimage/genisoimage.h 2006-11-24 00:16:11 UTC (rev 459)
+++ cdrkit/trunk/genisoimage/genisoimage.h 2006-11-24 00:39:06 UTC (rev 460)
@@ -548,7 +548,7 @@
extern void convert_to_unicode (unsigned char *buffer,
int size, char *source, struct unls_table *inls);
# endif
-extern int joliet_strlen __PR((const char *string, struct unls_table *inls));
+extern int joliet_strlen (const char *string, struct unls_table *inls);
#endif
extern unsigned char conv_charset(unsigned char, struct unls_table *,
struct unls_table *);
Modified: cdrkit/trunk/icedax/toc.c
===================================================================
--- cdrkit/trunk/icedax/toc.c 2006-11-24 00:16:11 UTC (rev 459)
+++ cdrkit/trunk/icedax/toc.c 2006-11-24 00:39:06 UTC (rev 460)
@@ -1556,35 +1556,65 @@
"ÿ",
};
-static char *ascii2html(unsigned char *inp);
-
static char *ascii2html(unsigned char *inp)
{
- static unsigned char outline[300];
- unsigned char *outp = outline;
+ static size_t buflen = 256;
+ static char *outline = 0;
+ size_t pos = 0;
-#define copy_translation(a,b) else if (*inp == (a)) \
-{ strcpy((char *)outp, (b)); outp += sizeof((b))-1; }
+ /* init */
+ if(!outline) {
+ outline = malloc(buflen);
+ if(outline == 0) {
+ fprintf(stderr, "error: memory exhausted\n");
+ _exit(EXIT_FAILURE);
+ }
+ }
+ outline[pos] = '\0';
+
while (*inp != '\0') {
- if (0) ;
- copy_translation('"', """)
- copy_translation('&', "&")
- copy_translation('<', "<")
- copy_translation('>', ">")
- copy_translation(160, " ")
- else if (*inp < 192) {
- *outp++ = *inp;
- } else {
- strcpy((char *)outp, a2h[*inp-192]);
- outp += strlen(a2h[*inp-192]);
+
+ /* Pick the sequence to insert */
+ const char *insert;
+ char b[2];
+ const int c = (unsigned char)*inp;
+ switch(c) {
+ case '"': insert = """; break;
+ case '&': insert = "&"; break;
+ case '<': insert = "<"; break;
+ case '>': insert = ">"; break;
+ case 160: insert = " "; break;
+ default: {
+ if(c < 192) {
+ b[0] = c;
+ b[1] = '\0';
+ insert = b;
+ } else {
+ insert = a2h[c - 192];
+ }
+ }
+ };
+
+ /* Resize buffer */
+ const size_t l = strlen(insert);
+ while(pos + l + 1 >= buflen) {
+ outline = realloc(outline, buflen *= 2);
+ if(outline == 0) {
+ fprintf(stderr, "error: memory exhausted\n");
+ _exit(EXIT_FAILURE);
+ }
}
- inp++;
+
+ /* Copy in */
+ strcpy(&outline[pos], insert);
+ pos += l;
+
+ ++inp;
}
- *outp = '\0';
- return (char *) outline;
+
+ return outline;
}
-#undef copy_translation
static void emit_cdindex_form(char *fname_baseval)
{
More information about the Debburn-changes
mailing list