-P switch to set root path for files when creating cabinet Modified: branches/xmlbuildsystem/reactos/tools/cabman/dfp.cxx Modified: branches/xmlbuildsystem/reactos/tools/cabman/dfp.h Modified: branches/xmlbuildsystem/reactos/tools/cabman/main.cxx _____
Modified: branches/xmlbuildsystem/reactos/tools/cabman/dfp.cxx --- branches/xmlbuildsystem/reactos/tools/cabman/dfp.cxx 2005-03-13 20:55:16 UTC (rev 14029) +++ branches/xmlbuildsystem/reactos/tools/cabman/dfp.cxx 2005-03-13 21:02:04 UTC (rev 14030) @@ -78,6 +78,8 @@
InfModeEnabled = false; InfFileHandle = NULL; + + strcpy(FileRelativePath, ""); }
CDFParser::~CDFParser() @@ -385,6 +387,20 @@ }
+void CDFParser::SetFileRelativePath(char* Path) +/* + * FUNCTION: Sets path where files in the .dff is assumed relative to + * ARGUMENTS: + * Path = Pointer to string with path + */ +{ + strcpy(FileRelativePath, Path); + ConvertPath(FileRelativePath, false); + if (strlen(FileRelativePath) > 0) + NormalizePath(FileRelativePath, MAX_PATH); +} + + bool CDFParser::OnDiskLabel(unsigned long Number, char* Label) /* * FUNCTION: Called when a disk needs a label @@ -1001,7 +1017,7 @@ char DstName[MAX_PATH]; char InfLine[MAX_PATH];
- strcpy(SrcName, ""); + strcpy(SrcName, FileRelativePath); strcpy(DstName, "");
i = CurrentChar; @@ -1015,7 +1031,7 @@ CurrentString[i] = '\0'; CurrentToken = TokenString; CurrentChar = i + 1; - strcpy(SrcName, CurrentString); + strcat(SrcName, CurrentString);
SkipSpaces();
_____
Modified: branches/xmlbuildsystem/reactos/tools/cabman/dfp.h --- branches/xmlbuildsystem/reactos/tools/cabman/dfp.h 2005-03-13 20:55:16 UTC (rev 14029) +++ branches/xmlbuildsystem/reactos/tools/cabman/dfp.h 2005-03-13 21:02:04 UTC (rev 14030) @@ -60,8 +60,10 @@
virtual ~CDFParser(); unsigned long Load(char* FileName); unsigned long Parse(); - bool InfFileOnly; + void SetFileRelativePath(char* Path); + bool InfFileOnly; bool DontGenerateInf; + char FileRelativePath[300]; private: /* Event handlers */ virtual bool OnDiskLabel(unsigned long Number, char* Label); _____
Modified: branches/xmlbuildsystem/reactos/tools/cabman/main.cxx --- branches/xmlbuildsystem/reactos/tools/cabman/main.cxx 2005-03-13 20:55:16 UTC (rev 14029) +++ branches/xmlbuildsystem/reactos/tools/cabman/main.cxx 2005-03-13 21:02:04 UTC (rev 14030) @@ -190,7 +190,7 @@
{ printf("ReactOS Cabinet Manager - Version %s\n\n", CM_VERSION); printf("CABMAN [-D | -E] [-A] [-L dir] cabinet [filename ...]\n"); - printf("CABMAN -C dirfile [-I] [-RC file]\n"); + printf("CABMAN -C dirfile [-I] [-RC file] [-P dir]\n"); printf("CABMAN -S cabinet filename\n"); printf(" cabinet Cabinet file.\n"); printf(" filename Name of the file to extract from the cabinet.\n"); @@ -211,6 +211,7 @@ printf(" -RC Specify file to put in cabinet reserved area\n"); printf(" (size must be less than 64KB).\n"); printf(" -S Create simple cabinet.\n"); + printf(" -P dir Files in the .dff are relative to this directory\n"); }
bool CCABManager::ParseCmdline(int argc, char* argv[]) @@ -276,6 +277,14 @@ break; case 's': case 'S': Mode = CM_MODE_CREATE_SIMPLE; break; + case 'P': + if (argv[i][2] == 0) { + i++; + SetFileRelativePath((char*)&argv[i][0]); + } else { + SetFileRelativePath((char*)&argv[i][1]); + } + break; default: printf("Bad parameter %s.\n", argv[i]); return false;