73 lines
1.8 KiB
C++
73 lines
1.8 KiB
C++
/**
|
|
* PANDA 3D SOFTWARE
|
|
* Copyright (c) Carnegie Mellon University. All rights reserved.
|
|
*
|
|
* All use of this software is subject to the terms of the revised BSD
|
|
* license. You should have received a copy of this license along
|
|
* with this source code in a file named "LICENSE."
|
|
*
|
|
* @file p3dPatchfileReader.h
|
|
* @author drose
|
|
* @date 2009-09-27
|
|
*/
|
|
|
|
#ifndef P3DPATCHFILEREADER_H
|
|
#define P3DPATCHFILEREADER_H
|
|
|
|
#include "p3d_plugin_common.h"
|
|
#include "p3dInstanceManager.h" // for openssl
|
|
#include "fileSpec.h"
|
|
|
|
/**
|
|
* A read-only implementation of Panda's patchfile format, for applying
|
|
* patches.
|
|
*
|
|
* This object assumes that the sourcefile has been already validated against
|
|
* its md5 hash, and does not validate it again. It *does* verify that the
|
|
* md5 hash in source and target match those read in the patchfile header; and
|
|
* it verifies the md5 hash on the target after completion.
|
|
*/
|
|
class P3DPatchfileReader {
|
|
public:
|
|
P3DPatchfileReader(const std::string &package_dir,
|
|
const FileSpec &patchfile,
|
|
const FileSpec &source,
|
|
const FileSpec &target);
|
|
~P3DPatchfileReader();
|
|
|
|
bool open_read();
|
|
inline bool is_open() const;
|
|
|
|
bool step();
|
|
inline size_t get_bytes_written() const;
|
|
inline bool get_success() const;
|
|
|
|
void close();
|
|
|
|
private:
|
|
bool copy_bytes(std::istream &in, size_t copy_byte_count);
|
|
inline unsigned int read_uint16();
|
|
inline unsigned int read_uint32();
|
|
inline int read_int32();
|
|
|
|
private:
|
|
std::string _package_dir;
|
|
FileSpec _patchfile;
|
|
FileSpec _source;
|
|
FileSpec _target;
|
|
|
|
std::string _output_pathname;
|
|
ifstream _patch_in;
|
|
ifstream _source_in;
|
|
ofstream _target_out;
|
|
|
|
bool _is_open;
|
|
size_t _target_length;
|
|
size_t _bytes_written;
|
|
bool _success;
|
|
};
|
|
|
|
#include "p3dPatchfileReader.I"
|
|
|
|
#endif
|