Partiy implement long filename support
example filefilefile.txt can store now with cdmake
but not filefilefiles.txt have not check why it say not a iso9660 name
Modified: trunk/reactos/tools/cdmake/cdmake.c

Modified: trunk/reactos/tools/cdmake/cdmake.c
--- trunk/reactos/tools/cdmake/cdmake.c	2005-05-15 09:55:56 UTC (rev 15300)
+++ trunk/reactos/tools/cdmake/cdmake.c	2005-05-15 10:33:33 UTC (rev 15301)
@@ -19,6 +19,10 @@
  * - No Joliet file name validations
  * - Very bad ISO file name generation
  *
+ * 
+ * convert long filename to iso9660 file name by Magnus Olsen
+ * magnus@greatlord.com
+ *
  * $Id$
  */
 
@@ -546,8 +550,9 @@
   const char *s = filename;
   char *t = d->name_on_cd;
   char *n = d->name;
-  int joliet_length;
-
+  int joliet_length;    
+  int filename_counter;  
+  filename_counter = 1;
   while (*s != 0)
   {
     if (*s == '.')
@@ -555,11 +560,11 @@
       s++;
       break;
     }
-
+     
     if ( (t-d->name_on_cd) < sizeof(d->name_on_cd)-1 )
       *t++ = check_for_punctuation(*s, filename);
     else if (!joliet)
-      error_exit ( "'%s' is not ISO-9660, aborting...", filename );
+    error_exit ("'%s' is not ISO-9660, aborting...", filename );
     if ( (n-d->name) < sizeof(d->name)-1 )
       *n++ = *s;
     else if (!joliet)
@@ -597,9 +602,27 @@
   } else
     d->flags = 0;
 
-  if ( cdname_exists ( d ) )
-    error_exit ( "'%s' is a duplicate file name, aborting...", filename );
 
+  filename_counter = 1;
+  while  ( cdname_exists ( d ) )
+  {
+	   
+   // the file name must be least 8 char long 
+   if (strlen(d->name_on_cd)<8) 
+	   error_exit ( "'%s' is a duplicate file name, aborting...", filename );   	
+
+   if ((d->name_on_cd[8] == '.') && (strlen(d->name_on_cd) < 13)) 
+       error_exit ( "'%s' is a duplicate file name, aborting...", filename );   	
+   
+   // max 255 times for equal short filename 
+   if (filename_counter>255) error_exit ( "'%s' is a duplicate file name, aborting...", filename );   		       
+   d->name_on_cd[8] = '~';
+   memset(&d->name_on_cd[9],0,5);      
+   itoa(filename_counter, &d->name_on_cd[9],10);
+   filename_counter++;     		       
+   
+  }
+
   if ( joliet )
   {
     joliet_length = strlen(filename);
@@ -1641,4 +1664,5 @@
   return 0;
 }
 
+
 /* EOF */