}
-ULONG CCFDATAStorage::Create(const char* FileName)
+ULONG CCFDATAStorage::Create()
/*
* FUNCTION: Creates the file
* ARGUMENTS:
* Status of operation
*/
{
+#if defined(_WIN32)
+ char tmpPath[MAX_PATH];
+#endif
ASSERT(!FileCreated);
#if defined(_WIN32)
- if (GetTempPath(MAX_PATH, FullName) == 0)
+ if (GetTempPath(MAX_PATH, tmpPath) == 0)
+ return CAB_STATUS_CANNOT_CREATE;
+ if(GetTempFileName(tmpPath, "cab", 0, FullName) == 0)
return CAB_STATUS_CANNOT_CREATE;
-
- strcat(FullName, FileName);
/* Create file, overwrite if it already exists */
FileHandle = CreateFile(FullName, // Create this file
strcpy(DestPath, DestinationPath);
ConvertPath(DestPath, false);
if (strlen(DestPath) > 0)
- NormalizePath(DestPath, MAX_PATH);
+ NormalizePath(DestPath, PATH_MAX);
}
ULONG CCabinet::AddSearchCriteria(char* SearchCriteria)
SelectCodec(CAB_CODEC_MSZIP);
else
{
- printf("Invalid codec specified!\n");
+ printf("ERROR: Invalid codec specified!\n");
return false;
}
{
FILEHANDLE FileHandle;
ULONG BytesRead;
+ char* ConvertedFileName;
+ ConvertedFileName = ConvertPath(FileName, true);
#if defined(_WIN32)
- FileHandle = CreateFile(ConvertPath(FileName, true), // Open this file
+ FileHandle = CreateFile(ConvertedFileName, // Open this file
GENERIC_READ, // Open for reading
FILE_SHARE_READ, // Share for reading
NULL, // No security
OPEN_EXISTING, // Existing file only
FILE_ATTRIBUTE_NORMAL, // Normal file
NULL); // No attribute template
+ free(ConvertedFileName);
if (FileHandle == INVALID_HANDLE_VALUE)
{
DPRINT(MID_TRACE, ("Cannot open cabinet reserved file.\n"));
return false;
}
#else /* !_WIN32 */
- FileHandle = fopen(ConvertPath(FileName, true), "rb");
+ FileHandle = fopen(ConvertedFileName, "rb");
+ free(ConvertedFileName);
if (FileHandle == NULL)
{
DPRINT(MID_TRACE, ("Cannot open cabinet reserved file.\n"));
#if defined(_WIN32)
FILETIME FileTime;
#endif
- CHAR DestName[MAX_PATH];
- CHAR TempName[MAX_PATH];
+ CHAR DestName[PATH_MAX];
+ CHAR TempName[PATH_MAX];
Status = LocateFile(FileName, &File);
if (Status != CAB_STATUS_SUCCESS)
if (Offset == INVALID_SET_FILE_POINTER)
{
DPRINT(MIN_TRACE, ("SetFilePointer() failed, error code is %u.\n", (UINT)GetLastError()));
+ CloseFile(DestFile);
return CAB_STATUS_INVALID_CAB;
}
#else
if (fseek(FileHandle, (off_t)File->DataBlock->AbsoluteOffset, SEEK_SET) != 0)
{
DPRINT(MIN_TRACE, ("fseek() failed.\n"));
+ CloseFile(DestFile);
return CAB_STATUS_FAILURE;
}
Offset = ftell(FileHandle);
return CAB_STATUS_NOMEMORY;
}
- Status = ScratchFile->Create("~CAB.tmp");
+ Status = ScratchFile->Create();
CreateNewFolder = false;
{
DPRINT(MIN_TRACE, ("Insufficient memory.\n"));
FreeMemory(NewFileName);
+ CloseFile(SrcFile);
return CAB_STATUS_NOMEMORY;
}
{
DPRINT(MIN_TRACE, ("Cannot read from file.\n"));
FreeMemory(NewFileName);
+ CloseFile(SrcFile);
return CAB_STATUS_CANNOT_READ;
}
{
DPRINT(MIN_TRACE, ("Cannot read file times.\n"));
FreeMemory(NewFileName);
+ CloseFile(SrcFile);
return CAB_STATUS_CANNOT_READ;
}
{
DPRINT(MIN_TRACE, ("Cannot read file attributes.\n"));
FreeMemory(NewFileName);
+ CloseFile(SrcFile);
return CAB_STATUS_CANNOT_READ;
}
{
bool bRet = false;
char* pszFile;
- char szFilePath[MAX_PATH];
- char szFile[MAX_PATH];
+ char szFilePath[PATH_MAX];
+ char szFile[PATH_MAX];
PSEARCH_CRITERIA Criteria;
ULONG Status;
if (Status != CAB_STATUS_SUCCESS)
{
DPRINT(MIN_TRACE, ("Cannot create cabinet (%u).\n", (UINT)Status));
- goto cleanup;
+ goto cleanup2;
}
// Add each file in the criteria list
goto cleanup;
}
+cleanup:
CloseCabinet();
bRet = true;
-cleanup:
+cleanup2:
DestroySearchCriteria();
return bRet;
}
return CAB_STATUS_INVALID_CAB;
}
- File->FileName = (char*)AllocateMemory(MAX_PATH);
+ File->FileName = (char*)AllocateMemory(PATH_MAX);
if (!File->FileName)
{
DPRINT(MIN_TRACE, ("Insufficient memory.\n"));
}
/* Read file name */
- Status = ReadString(File->FileName, MAX_PATH);
+ Status = ReadString(File->FileName, PATH_MAX);
if (Status != CAB_STATUS_SUCCESS)
return Status;
&File->File.FileTime);
#else
struct stat stbuf;
- char buf[MAX_PATH];
+ char buf[PATH_MAX];
// Check for an absolute path
if (IsSeparator(File->FileName[0]))
File->File.Attributes = (USHORT)(Attributes & 0x37);
#else
struct stat stbuf;
- char buf[MAX_PATH];
+ char buf[PATH_MAX];
// Check for an absolute path
if (IsSeparator(File->FileName[0]))