CMS 3D CMS Logo

Classes | Functions

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_13_patch3/src/GeneratorInterface/ReggeGribovPartonMCInterface/src/7zFile.h File Reference

#include <stdio.h>
#include "Types.h"

Go to the source code of this file.

Classes

struct  CFileInStream
struct  CFileOutStream
struct  CFileSeqInStream
struct  CSzFile

Functions

WRes File_Close (CSzFile *p)
void File_Construct (CSzFile *p)
WRes File_GetLength (CSzFile *p, UInt64 *length)
WRes File_Read (CSzFile *p, void *data, size_t *size)
WRes File_Seek (CSzFile *p, Int64 *pos, ESzSeek origin)
WRes File_Write (CSzFile *p, const void *data, size_t *size)
void FileInStream_CreateVTable (CFileInStream *p)
void FileOutStream_CreateVTable (CFileOutStream *p)
void FileSeqInStream_CreateVTable (CFileSeqInStream *p)
WRes InFile_Open (CSzFile *p, const char *name)
WRes OutFile_Open (CSzFile *p, const char *name)

Function Documentation

WRes File_Close ( CSzFile p)

Definition at line 76 of file 7zFile.cc.

References CSzFile::file, and NULL.

Referenced by LzmaFile::Close().

{
  #ifdef USE_WINDOWS_FILE
  if (p->handle != INVALID_HANDLE_VALUE)
  {
    if (!CloseHandle(p->handle))
      return GetLastError();
    p->handle = INVALID_HANDLE_VALUE;
  }
  #else
  if (p->file != NULL)
  {
    int res = fclose(p->file);
    if (res != 0)
      return res;
    p->file = NULL;
  }
  #endif
  return 0;
}
void File_Construct ( CSzFile p)

Definition at line 28 of file 7zFile.cc.

References CSzFile::file, and NULL.

Referenced by LzmaFile::Open().

{
  #ifdef USE_WINDOWS_FILE
  p->handle = INVALID_HANDLE_VALUE;
  #else
  p->file = NULL;
  #endif
}
WRes File_GetLength ( CSzFile p,
UInt64 length 
)

Definition at line 210 of file 7zFile.cc.

References CSzFile::file, and pos.

{
  #ifdef USE_WINDOWS_FILE
  
  DWORD sizeHigh;
  DWORD sizeLow = GetFileSize(p->handle, &sizeHigh);
  if (sizeLow == 0xFFFFFFFF)
  {
    DWORD res = GetLastError();
    if (res != NO_ERROR)
      return res;
  }
  *length = (((UInt64)sizeHigh) << 32) + sizeLow;
  return 0;
  
  #else
  
  long pos = ftell(p->file);
  int res = fseek(p->file, 0, SEEK_END);
  *length = ftell(p->file);
  fseek(p->file, pos, SEEK_SET);
  return res;
  
  #endif
}
WRes File_Read ( CSzFile p,
void *  data,
size_t *  size 
)

Definition at line 97 of file 7zFile.cc.

References CSzFile::file, NULL, and findQualityFiles::size.

Referenced by FileInStream_Read(), and FileSeqInStream_Read().

{
  size_t originalSize = *size;
  if (originalSize == 0)
    return 0;

  #ifdef USE_WINDOWS_FILE

  *size = 0;
  do
  {
    DWORD curSize = (originalSize > kChunkSizeMax) ? kChunkSizeMax : (DWORD)originalSize;
    DWORD processed = 0;
    BOOL res = ReadFile(p->handle, data, curSize, &processed, NULL);
    data = (void *)((Byte *)data + processed);
    originalSize -= processed;
    *size += processed;
    if (!res)
      return GetLastError();
    if (processed == 0)
      break;
  }
  while (originalSize > 0);
  return 0;

  #else
  
  *size = fread(data, 1, originalSize, p->file);
  if (*size == originalSize)
    return 0;
  return ferror(p->file);
  
  #endif
}
WRes File_Seek ( CSzFile p,
Int64 pos,
ESzSeek  origin 
)

Definition at line 167 of file 7zFile.cc.

References CSzFile::file, SZ_SEEK_CUR, SZ_SEEK_END, SZ_SEEK_SET, and relativeConstraints::value.

Referenced by FileInStream_Seek().

{
  #ifdef USE_WINDOWS_FILE

  LARGE_INTEGER value;
  DWORD moveMethod;
  value.LowPart = (DWORD)*pos;
  value.HighPart = (LONG)((UInt64)*pos >> 16 >> 16); /* for case when UInt64 is 32-bit only */
  switch (origin)
  {
    case SZ_SEEK_SET: moveMethod = FILE_BEGIN; break;
    case SZ_SEEK_CUR: moveMethod = FILE_CURRENT; break;
    case SZ_SEEK_END: moveMethod = FILE_END; break;
    default: return ERROR_INVALID_PARAMETER;
  }
  value.LowPart = SetFilePointer(p->handle, value.LowPart, &value.HighPart, moveMethod);
  if (value.LowPart == 0xFFFFFFFF)
  {
    WRes res = GetLastError();
    if (res != NO_ERROR)
      return res;
  }
  *pos = ((Int64)value.HighPart << 32) | value.LowPart;
  return 0;

  #else
  
  int moveMethod;
  int res;
  switch (origin)
  {
    case SZ_SEEK_SET: moveMethod = SEEK_SET; break;
    case SZ_SEEK_CUR: moveMethod = SEEK_CUR; break;
    case SZ_SEEK_END: moveMethod = SEEK_END; break;
    default: return 1;
  }
  res = fseek(p->file, (long)*pos, moveMethod);
  *pos = ftell(p->file);
  return res;
  
  #endif
}
WRes File_Write ( CSzFile p,
const void *  data,
size_t *  size 
)

Definition at line 132 of file 7zFile.cc.

References CSzFile::file, NULL, and findQualityFiles::size.

Referenced by FileOutStream_Write().

{
  size_t originalSize = *size;
  if (originalSize == 0)
    return 0;
  
  #ifdef USE_WINDOWS_FILE

  *size = 0;
  do
  {
    DWORD curSize = (originalSize > kChunkSizeMax) ? kChunkSizeMax : (DWORD)originalSize;
    DWORD processed = 0;
    BOOL res = WriteFile(p->handle, data, curSize, &processed, NULL);
    data = (void *)((Byte *)data + processed);
    originalSize -= processed;
    *size += processed;
    if (!res)
      return GetLastError();
    if (processed == 0)
      break;
  }
  while (originalSize > 0);
  return 0;

  #else

  *size = fwrite(data, 1, originalSize, p->file);
  if (*size == originalSize)
    return 0;
  return ferror(p->file);
  
  #endif
}
void FileInStream_CreateVTable ( CFileInStream p)
void FileOutStream_CreateVTable ( CFileOutStream p)

Definition at line 281 of file 7zFile.cc.

References FileOutStream_Write(), CFileOutStream::s, and ISeqOutStream::Write.

void FileSeqInStream_CreateVTable ( CFileSeqInStream p)

Definition at line 245 of file 7zFile.cc.

References FileSeqInStream_Read(), ISeqInStream::Read, and CFileSeqInStream::s.

Referenced by LzmaFile::Open().

WRes InFile_Open ( CSzFile p,
const char *  name 
)

Definition at line 58 of file 7zFile.cc.

References File_Open().

Referenced by LzmaFile::Open().

{ return File_Open(p, name, 0); }
WRes OutFile_Open ( CSzFile p,
const char *  name 
)

Definition at line 59 of file 7zFile.cc.

References File_Open().

{ return File_Open(p, name, 1); }