libmspack
Data Fields
mschm_decompressor Struct Reference

A decompressor for .CHM (Microsoft HTMLHelp) files. More...

#include <mspack.h>

Collaboration diagram for mschm_decompressor:
Collaboration graph
[legend]

Data Fields

struct mschmd_header *(* open )(struct mschm_decompressor *self, const char *filename)
 Opens a CHM helpfile and reads its contents. More...
 
void(* close )(struct mschm_decompressor *self, struct mschmd_header *chm)
 Closes a previously opened CHM helpfile. More...
 
int(* extract )(struct mschm_decompressor *self, struct mschmd_file *file, const char *filename)
 Extracts a file from a CHM helpfile. More...
 
int(* last_error )(struct mschm_decompressor *self)
 Returns the error code set by the most recently called method. More...
 
struct mschmd_header *(* fast_open )(struct mschm_decompressor *self, const char *filename)
 Opens a CHM helpfile quickly. More...
 
int(* fast_find )(struct mschm_decompressor *self, struct mschmd_header *chm, const char *filename, struct mschmd_file *f_ptr, int f_size)
 Finds file details quickly. More...
 

Detailed Description

A decompressor for .CHM (Microsoft HTMLHelp) files.

All fields are READ ONLY.

See also
mspack_create_chm_decompressor(), mspack_destroy_chm_decompressor()

Field Documentation

◆ close

void(* mschm_decompressor::close) (struct mschm_decompressor *self, struct mschmd_header *chm)

Closes a previously opened CHM helpfile.

This closes a CHM helpfile, frees the mschmd_header and all mschmd_file structures associated with it (if any). This works on both helpfiles opened with open() and helpfiles opened with fast_open().

The CHM header pointer is now invalid and cannot be used again. All mschmd_file pointers referencing that CHM are also now invalid, and cannot be used again.

Parameters
selfa self-referential pointer to the mschm_decompressor instance being called
chmthe CHM helpfile to close
See also
open(), fast_open()

◆ extract

int(* mschm_decompressor::extract) (struct mschm_decompressor *self, struct mschmd_file *file, const char *filename)

Extracts a file from a CHM helpfile.

This extracts a file from a CHM helpfile and writes it to the given filename. The filename of the file, mscabd_file::filename, is not used by extract(), but can be used by the caller as a guide for constructing an appropriate filename.

This method works both with files found in the mschmd_header::files and mschmd_header::sysfiles list and mschmd_file structures generated on the fly by fast_find().

Parameters
selfa self-referential pointer to the mschm_decompressor instance being called
filethe file to be decompressed
filenamethe filename of the file being written to
Returns
an error code, or MSPACK_ERR_OK if successful

◆ fast_find

int(* mschm_decompressor::fast_find) (struct mschm_decompressor *self, struct mschmd_header *chm, const char *filename, struct mschmd_file *f_ptr, int f_size)

Finds file details quickly.

Instead of reading all CHM helpfile headers and building a list of files, fast_open() and fast_find() are intended for finding file details only when they are needed. The CHM file format includes an on-disk file index to allow this.

Given a case-sensitive filename, fast_find() will search the on-disk index for that file.

If the file was found, the caller-provided mschmd_file structure will be filled out like so:

  • section: the correct value for the found file
  • offset: the correct value for the found file
  • length: the correct value for the found file
  • all other structure elements: NULL or 0

If the file was not found, MSPACK_ERR_OK will still be returned as the result, but the caller-provided structure will be filled out like so:

  • section: NULL
  • offset: 0
  • length: 0
  • all other structure elements: NULL or 0

This method is intended to be used in conjunction with CHM helpfiles opened with fast_open(), but it also works with helpfiles opened using the regular open().

Parameters
selfa self-referential pointer to the mschm_decompressor instance being called
chmthe CHM helpfile to search for the file
filenamethe filename of the file to search for
f_ptra pointer to a caller-provded mschmd_file structure
f_sizesizeof(struct mschmd_file)
Returns
an error code, or MSPACK_ERR_OK if successful
See also
open(), close(), fast_find(), extract()

◆ fast_open

struct mschmd_header*(* mschm_decompressor::fast_open) (struct mschm_decompressor *self, const char *filename)

Opens a CHM helpfile quickly.

If the file opened is a valid CHM helpfile, only essential headers will be read. A mschmd_header structure will be still be returned, as with open(), but the mschmd_header::files field will be NULL. No files details will be automatically read. The fast_find() method must be used to obtain file details.

In the case of an error occuring, NULL is returned and the error code is available from last_error().

The filename pointer should be considered "in use" until close() is called on the CHM helpfile.

Parameters
selfa self-referential pointer to the mschm_decompressor instance being called
filenamethe filename of the CHM helpfile. This is passed directly to mspack_system::open().
Returns
a pointer to a mschmd_header structure, or NULL on failure
See also
open(), close(), fast_find(), extract()

◆ last_error

int(* mschm_decompressor::last_error) (struct mschm_decompressor *self)

Returns the error code set by the most recently called method.

This is useful for open() and fast_open(), which do not return an error code directly.

Parameters
selfa self-referential pointer to the mschm_decompressor instance being called
Returns
the most recent error code
See also
open(), extract()

◆ open

struct mschmd_header*(* mschm_decompressor::open) (struct mschm_decompressor *self, const char *filename)

Opens a CHM helpfile and reads its contents.

If the file opened is a valid CHM helpfile, all headers will be read and a mschmd_header structure will be returned, with a full list of files.

In the case of an error occuring, NULL is returned and the error code is available from last_error().

The filename pointer should be considered "in use" until close() is called on the CHM helpfile.

Parameters
selfa self-referential pointer to the mschm_decompressor instance being called
filenamethe filename of the CHM helpfile. This is passed directly to mspack_system::open().
Returns
a pointer to a mschmd_header structure, or NULL on failure
See also
close()

The documentation for this struct was generated from the following file: