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