CABMAN: add support for optional files (they are listed in the reactos.dff, but may not exist in the output-??? directory).
Modified: trunk/reactos/tools/cabman/dff.txt
Modified: trunk/reactos/tools/cabman/dfp.cxx
Modified: trunk/reactos/tools/cabman/main.cxx

Modified: trunk/reactos/tools/cabman/dff.txt
--- trunk/reactos/tools/cabman/dff.txt	2005-08-15 11:39:19 UTC (rev 17395)
+++ trunk/reactos/tools/cabman/dff.txt	2005-08-15 16:41:43 UTC (rev 17396)
@@ -8,7 +8,7 @@
 Syntax                             Description
 -------------------------------------------------------------------------------
 ;                                  Anything on a line after this is a comment
-<filename> [destination]           File copy command
+<filename> [destination] [options] File copy command (options: o=optional)
 .Define variable=[value]           Define variable to be equal to value (*)
 .Delete variable                   Delete a variable definition (*)
 .New Disk|Cabinet|Folder           Start a new disk, cabinet or folder (* -- new disk will work)

Modified: trunk/reactos/tools/cabman/dfp.cxx
--- trunk/reactos/tools/cabman/dfp.cxx	2005-08-15 11:39:19 UTC (rev 17395)
+++ trunk/reactos/tools/cabman/dfp.cxx	2005-08-15 16:41:43 UTC (rev 17396)
@@ -1016,11 +1016,13 @@
     char SrcName[MAX_PATH];
     char DstName[MAX_PATH];
     char InfLine[MAX_PATH];
+    char Options[8];
     char BaseFilename[MAX_PATH];
 
-    strcpy(SrcName, "");
-    strcpy(DstName, "");
+    *SrcName = '\0';
+    *DstName = '\0';
 
+    // source file
     i = CurrentChar;
     while ((i < LineLength) &&
         ((ch = Line[i]) != ' ') &&
@@ -1035,6 +1037,7 @@
     strcpy(BaseFilename, CurrentString);
     strcat(SrcName, BaseFilename);
 
+    // destination
     SkipSpaces();
 
     if (CurrentToken != TokenEnd) {
@@ -1052,6 +1055,24 @@
         strcpy(DstName, CurrentString);
     }
 
+    // options (it may be empty)
+    SkipSpaces ();
+
+    if (CurrentToken != TokenEnd) {
+        j = strlen(CurrentString); i = 0;
+        while ((CurrentChar + i < LineLength) &&
+            ((ch = Line[CurrentChar + i]) != ' ') &&
+             (ch != 0x09) &&
+             (ch != ';')) {
+            CurrentString[j + i] = ch;
+            i++;
+        }
+        CurrentString[j + i] = '\0';
+        CurrentToken = TokenString;
+        CurrentChar += i + 1;
+        strcpy(Options, CurrentString);
+    }
+
     if (!CabinetCreated) {
 
         DPRINT(MID_TRACE, ("Creating cabinet.\n"));
@@ -1078,25 +1099,34 @@
 
     DPRINT(MID_TRACE, ("Adding file: '%s'   destination: '%s'.\n", SrcName, DstName));
 
-    sprintf(InfLine, "%s=%s", GetFileName(SrcName), DstName);
-    WriteInfLine(InfLine);
-
     Status = AddFile(SrcName);
     if (Status == CAB_STATUS_CANNOT_OPEN) {
 	    strcpy(SrcName, FileRelativePath);
 	    strcat(SrcName, BaseFilename);
     	Status = AddFile(SrcName);
     }
-    if (Status != CAB_STATUS_SUCCESS) {
-        if (Status == CAB_STATUS_CANNOT_OPEN)
-		    printf("File does not exist: %s.\n", SrcName);
-        else if (Status == CAB_STATUS_NOMEMORY)
-            printf("Insufficient memory to add file: %s.\n", SrcName);
-        else
-            printf("Cannot add file: %s (%lu).\n", SrcName, Status);
-        return Status;
+    switch (Status)
+    {
+    case CAB_STATUS_SUCCESS:
+        sprintf(InfLine, "%s=%s", GetFileName(SrcName), DstName);
+        WriteInfLine(InfLine);
+        break;
+    case CAB_STATUS_CANNOT_OPEN:
+	if (strchr(Options,'o'))
+	{
+		Status = CAB_STATUS_SUCCESS;
+	        printf("Optional file does not exist: %s.\n", SrcName);
+	} else {
+	        printf("File does not exist: %s.\n", SrcName);
+	}
+        break;
+    case CAB_STATUS_NOMEMORY:
+        printf("Insufficient memory to add file: %s.\n", SrcName);
+        break;
+    default:
+        printf("Cannot add file: %s (%lu).\n", SrcName, Status);
+        break;
     }
-
     return CAB_STATUS_SUCCESS;
 }
 

Modified: trunk/reactos/tools/cabman/main.cxx
--- trunk/reactos/tools/cabman/main.cxx	2005-08-15 11:39:19 UTC (rev 17395)
+++ trunk/reactos/tools/cabman/main.cxx	2005-08-15 16:41:43 UTC (rev 17396)
@@ -553,11 +553,7 @@
         status = CABMgr.Run();
     }
 
-    if (status) {
-      return 0;
-    } else {
-      return 1;
-    }
+    return (status ? 0 : 1);
 }
 
 /* EOF */