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 */