MS OLE2 3 GSF Library MS OLE2 Synopsis GsfInfileMSOle; GsfInfile* gsf_infile_msole_new (GsfInput *source, GError **err); gboolean gsf_infile_msole_get_class_id (GsfInfileMSOle const *ole, guint8 *res); GsfOutfileMSOle; GsfOutfile* gsf_outfile_msole_new (GsfOutput *sink); GsfOutfile* gsf_outfile_msole_new_full (GsfOutput *sink, guint bb_size, guint sb_size); gboolean gsf_outfile_msole_set_class_id (GsfOutfileMSOle *ole, guint8 const *clsid); GError* gsf_msole_metadata_read (GsfInput *in, GsfDocMetaData *accum); gboolean gsf_msole_metadata_write (GsfOutput *out, GsfDocMetaData const *meta_data, gboolean doc_not_component); GIConv gsf_msole_iconv_open_codepages_for_export (int codepage_to, char const *from); GIConv gsf_msole_iconv_open_codepage_for_import (char const *to, int codepage); GIConv gsf_msole_iconv_open_for_export (void); GIConv gsf_msole_iconv_open_codepage_for_export (int codepage_to); GIConv gsf_msole_iconv_open_for_import (int codepage); int gsf_msole_iconv_win_codepage (void); guint gsf_msole_codepage_to_lid (int codepage); int gsf_msole_lid_to_codepage (guint lid); gchar* gsf_msole_lid_to_codepage_str (guint lid); guint gsf_msole_lid_for_language (char const *lang); charconst * gsf_msole_language_for_lid (guint lid); GByteArray* gsf_msole_inflate (GsfInput *input, gsf_off_t offset); #define OLE_HEADER_START_BAT #define OLE_HEADER_MAJOR_VER #define OLE_HEADER_METABAT_SIZE #define OLE_HEADER_DIRENT_START #define OLE_HEADER_NUM_SBAT #define OLE_HEADER_BB_SHIFT #define OLE_HEADER_CSECTDIR #define OLE_HEADER_NUM_BAT #define OLE_HEADER_THRESHOLD #define OLE_HEADER_METABAT_BLOCK #define OLE_HEADER_SBAT_START #define OLE_HEADER_SIGNATURE #define OLE_HEADER_BYTE_ORDER #define OLE_HEADER_SB_SHIFT #define OLE_HEADER_NUM_METABAT #define OLE_HEADER_SIZE #define OLE_HEADER_CLSID #define OLE_HEADER_MINOR_VER #define OLE_DEFAULT_BB_SHIFT #define OLE_DEFAULT_SB_SHIFT #define DIRENT_DETAILS_SIZE #define DIRENT_SIZE #define DIRENT_NAME_LEN #define DIRENT_TYPE_PROPERTY #define DIRENT_TYPE_FILE #define DIRENT_MAGIC_END #define DIRENT_TYPE_DIR #define DIRENT_MAX_NAME_SIZE #define DIRENT_FILE_SIZE #define DIRENT_FIRSTBLOCK #define DIRENT_TYPE_INVALID #define DIRENT_USERFLAGS #define DIRENT_COLOUR #define DIRENT_MODIFY_TIME #define DIRENT_TYPE_LOCKBYTES #define DIRENT_CREATE_TIME #define DIRENT_PREV #define DIRENT_NEXT #define DIRENT_CHILD #define DIRENT_TYPE #define DIRENT_CLSID #define DIRENT_TYPE_ROOTDIR #define BAT_MAGIC_METABAT #define BAT_MAGIC_BAT #define BAT_INDEX_SIZE #define BAT_MAGIC_END_OF_CHAIN #define BAT_MAGIC_UNUSED Object Hierarchy GObject +----GsfInput +----GsfInfile +----GsfInfileMSOle GObject +----GsfOutput +----GsfOutfile +----GsfOutfileMSOle Description Details <anchor id="GsfInfileMSOle-struct"/>GsfInfileMSOle GsfInfileMSOletypedef struct _GsfInfileMSOle GsfInfileMSOle; <anchor id="gsf-infile-msole-new"/>gsf_infile_msole_new () gsf_infile_msole_newGsfInfile* gsf_infile_msole_new (GsfInput *source, GError **err); Opens the root directory of an MS OLE file. NOTE : adds a reference to source source : err : Returns :: the new ole file handler <anchor id="gsf-infile-msole-get-class-id"/>gsf_infile_msole_get_class_id () gsf_infile_msole_get_class_idgboolean gsf_infile_msole_get_class_id (GsfInfileMSOle const *ole, guint8 *res); Retrieves the 16 byte indentifier (often a GUID in MS Windows apps) stored within the directory associated with ole and stores it in res. ole : a GsfInfileMSOle res : 16 byte identifier (often a GUID in MS Windows apps) Returns :TRUE on success <anchor id="GsfOutfileMSOle-struct"/>GsfOutfileMSOle GsfOutfileMSOletypedef struct _GsfOutfileMSOle GsfOutfileMSOle; <anchor id="gsf-outfile-msole-new"/>gsf_outfile_msole_new () gsf_outfile_msole_newGsfOutfile* gsf_outfile_msole_new (GsfOutput *sink); Creates the root directory of an MS OLE file and manages the addition of children. NOTE : adds a reference to sink sink : a GsfOutput to hold the OLE2 file Returns :the new ole file handler <anchor id="gsf-outfile-msole-new-full"/>gsf_outfile_msole_new_full () gsf_outfile_msole_new_fullGsfOutfile* gsf_outfile_msole_new_full (GsfOutput *sink, guint bb_size, guint sb_size); Creates the root directory of an MS OLE file and manages the addition of children. NOTE : adds a reference to sink sink : a GsfOutput to hold the OLE2 file. bb_size : size of large blocks. sb_size : size of small blocks. Returns :the new ole file handler <anchor id="gsf-outfile-msole-set-class-id"/>gsf_outfile_msole_set_class_id () gsf_outfile_msole_set_class_idgboolean gsf_outfile_msole_set_class_id (GsfOutfileMSOle *ole, guint8 const *clsid); Write clsid to the directory associated with ole. ole : a GsfOutfileMSOle clsid : 16 byte identifier (often a GUID in MS Windows apps) Returns :TRUE on success. <anchor id="gsf-msole-metadata-read"/>gsf_msole_metadata_read () gsf_msole_metadata_readGError* gsf_msole_metadata_read (GsfInput *in, GsfDocMetaData *accum); Read a stream formated as a set of MS OLE properties from in and store the results in accum. in : GsfInput accum : GsfDocMetaData Returns :GError which the caller must free on error. <anchor id="gsf-msole-metadata-write"/>gsf_msole_metadata_write () gsf_msole_metadata_writegboolean gsf_msole_metadata_write (GsfOutput *out, GsfDocMetaData const *meta_data, gboolean doc_not_component); out : GsfOutput meta_data : GsfDocMetaData doc_not_component : a kludge to differentiate DocumentSummary from Summary Returns :TRUE on success; <anchor id="gsf-msole-iconv-open-codepages-for-export"/>gsf_msole_iconv_open_codepages_for_export () gsf_msole_iconv_open_codepages_for_exportGIConv gsf_msole_iconv_open_codepages_for_export (int codepage_to, char const *from); codepage_to : from : Returns :an iconv converter to go from utf8 -> to our best guess at a useful windows codepage. <anchor id="gsf-msole-iconv-open-codepage-for-import"/>gsf_msole_iconv_open_codepage_for_import () gsf_msole_iconv_open_codepage_for_importGIConv gsf_msole_iconv_open_codepage_for_import (char const *to, int codepage); to : codepage : Returns :an iconv converter for codepage -> utf8. <anchor id="gsf-msole-iconv-open-for-export"/>gsf_msole_iconv_open_for_export () gsf_msole_iconv_open_for_exportGIConv gsf_msole_iconv_open_for_export (void); Returns :an iconv convert to go from utf8 -> to our best guess at a useful windows codepage. <anchor id="gsf-msole-iconv-open-codepage-for-export"/>gsf_msole_iconv_open_codepage_for_export () gsf_msole_iconv_open_codepage_for_exportGIConv gsf_msole_iconv_open_codepage_for_export (int codepage_to); codepage_to : Returns :an iconv converter to go from utf8 -> to our best guess at a useful windows codepage. <anchor id="gsf-msole-iconv-open-for-import"/>gsf_msole_iconv_open_for_import () gsf_msole_iconv_open_for_importGIConv gsf_msole_iconv_open_for_import (int codepage); codepage : Returns :an iconv converter for single byte encodings codepage -> utf8. Attempt to handle the semantics of a specification for multibyte encodings since this is only supposed to be used for single bytes. <anchor id="gsf-msole-iconv-win-codepage"/>gsf_msole_iconv_win_codepage () gsf_msole_iconv_win_codepageint gsf_msole_iconv_win_codepage (void); Returns :our best guess at the applicable windows code page based on an environment variable or the current locale. <anchor id="gsf-msole-codepage-to-lid"/>gsf_msole_codepage_to_lid () gsf_msole_codepage_to_lidguint gsf_msole_codepage_to_lid (int codepage); codepage : Returns : <anchor id="gsf-msole-lid-to-codepage"/>gsf_msole_lid_to_codepage () gsf_msole_lid_to_codepageint gsf_msole_lid_to_codepage (guint lid); lid : Returns :our best guess at the codepage for the given language id <anchor id="gsf-msole-lid-to-codepage-str"/>gsf_msole_lid_to_codepage_str () gsf_msole_lid_to_codepage_strgchar* gsf_msole_lid_to_codepage_str (guint lid); lid : Returns :the Iconv codepage string for the given LID. Return value must be g_free()'d <anchor id="gsf-msole-lid-for-language"/>gsf_msole_lid_for_language () gsf_msole_lid_for_languageguint gsf_msole_lid_for_language (char const *lang); lang : Returns :the LID (Language Identifier) for the input language. If lang is null, return 0x0400 ("-none-"), and not 0x0000 ("no proofing") <anchor id="gsf-msole-language-for-lid"/>gsf_msole_language_for_lid () gsf_msole_language_for_lidcharconst * gsf_msole_language_for_lid (guint lid); lid : Returns :the xx_YY style string (can be just xx or xxx) for the given LID. Return value must not be freed. If the LID is not found, is set to 0x0400, or is set to 0x0000, will return "-none-" <anchor id="gsf-msole-inflate"/>gsf_msole_inflate () gsf_msole_inflateGByteArray* gsf_msole_inflate (GsfInput *input, gsf_off_t offset); Decompresses an LZ compressed stream. input : stream to read from offset : offset into it for start byte of compresse stream Returns : A GByteArray that the caller is responsible for freeing <anchor id="OLE-HEADER-START-BAT:CAPS"/>OLE_HEADER_START_BAT OLE_HEADER_START_BAT#define OLE_HEADER_START_BAT 0x4c <anchor id="OLE-HEADER-MAJOR-VER:CAPS"/>OLE_HEADER_MAJOR_VER OLE_HEADER_MAJOR_VER#define OLE_HEADER_MAJOR_VER 0x1a /* 0x3 been seen in wild */ <anchor id="OLE-HEADER-METABAT-SIZE:CAPS"/>OLE_HEADER_METABAT_SIZE OLE_HEADER_METABAT_SIZE#define OLE_HEADER_METABAT_SIZE ((OLE_HEADER_SIZE - OLE_HEADER_START_BAT) / BAT_INDEX_SIZE) <anchor id="OLE-HEADER-DIRENT-START:CAPS"/>OLE_HEADER_DIRENT_START OLE_HEADER_DIRENT_START#define OLE_HEADER_DIRENT_START 0x30 <anchor id="OLE-HEADER-NUM-SBAT:CAPS"/>OLE_HEADER_NUM_SBAT OLE_HEADER_NUM_SBAT#define OLE_HEADER_NUM_SBAT 0x40 <anchor id="OLE-HEADER-BB-SHIFT:CAPS"/>OLE_HEADER_BB_SHIFT OLE_HEADER_BB_SHIFT#define OLE_HEADER_BB_SHIFT 0x1e <anchor id="OLE-HEADER-CSECTDIR:CAPS"/>OLE_HEADER_CSECTDIR OLE_HEADER_CSECTDIR#define OLE_HEADER_CSECTDIR 0x28 <anchor id="OLE-HEADER-NUM-BAT:CAPS"/>OLE_HEADER_NUM_BAT OLE_HEADER_NUM_BAT#define OLE_HEADER_NUM_BAT 0x2c <anchor id="OLE-HEADER-THRESHOLD:CAPS"/>OLE_HEADER_THRESHOLD OLE_HEADER_THRESHOLD#define OLE_HEADER_THRESHOLD 0x38 <anchor id="OLE-HEADER-METABAT-BLOCK:CAPS"/>OLE_HEADER_METABAT_BLOCK OLE_HEADER_METABAT_BLOCK#define OLE_HEADER_METABAT_BLOCK 0x44 <anchor id="OLE-HEADER-SBAT-START:CAPS"/>OLE_HEADER_SBAT_START OLE_HEADER_SBAT_START#define OLE_HEADER_SBAT_START 0x3c <anchor id="OLE-HEADER-SIGNATURE:CAPS"/>OLE_HEADER_SIGNATURE OLE_HEADER_SIGNATURE#define OLE_HEADER_SIGNATURE 0x00 <anchor id="OLE-HEADER-BYTE-ORDER:CAPS"/>OLE_HEADER_BYTE_ORDER OLE_HEADER_BYTE_ORDER#define OLE_HEADER_BYTE_ORDER 0x1c /* 0xfe 0xff == Intel Little Endian */ <anchor id="OLE-HEADER-SB-SHIFT:CAPS"/>OLE_HEADER_SB_SHIFT OLE_HEADER_SB_SHIFT#define OLE_HEADER_SB_SHIFT 0x20 <anchor id="OLE-HEADER-NUM-METABAT:CAPS"/>OLE_HEADER_NUM_METABAT OLE_HEADER_NUM_METABAT#define OLE_HEADER_NUM_METABAT 0x48 <anchor id="OLE-HEADER-SIZE:CAPS"/>OLE_HEADER_SIZE OLE_HEADER_SIZE#define OLE_HEADER_SIZE 0x200 /* independent of big block size size */ <anchor id="OLE-HEADER-CLSID:CAPS"/>OLE_HEADER_CLSID OLE_HEADER_CLSID#define OLE_HEADER_CLSID 0x08 /* See ReadClassStg */ <anchor id="OLE-HEADER-MINOR-VER:CAPS"/>OLE_HEADER_MINOR_VER OLE_HEADER_MINOR_VER#define OLE_HEADER_MINOR_VER 0x18 /* 0x33 and 0x3e have been seen */ <anchor id="OLE-DEFAULT-BB-SHIFT:CAPS"/>OLE_DEFAULT_BB_SHIFT OLE_DEFAULT_BB_SHIFT#define OLE_DEFAULT_BB_SHIFT 9 <anchor id="OLE-DEFAULT-SB-SHIFT:CAPS"/>OLE_DEFAULT_SB_SHIFT OLE_DEFAULT_SB_SHIFT#define OLE_DEFAULT_SB_SHIFT 6 <anchor id="DIRENT-DETAILS-SIZE:CAPS"/>DIRENT_DETAILS_SIZE DIRENT_DETAILS_SIZE#define DIRENT_DETAILS_SIZE 0x40 <anchor id="DIRENT-SIZE:CAPS"/>DIRENT_SIZE DIRENT_SIZE#define DIRENT_SIZE (DIRENT_MAX_NAME_SIZE + DIRENT_DETAILS_SIZE) <anchor id="DIRENT-NAME-LEN:CAPS"/>DIRENT_NAME_LEN DIRENT_NAME_LEN#define DIRENT_NAME_LEN 0x40 /* length in bytes incl 0 terminator */ <anchor id="DIRENT-TYPE-PROPERTY:CAPS"/>DIRENT_TYPE_PROPERTY DIRENT_TYPE_PROPERTY#define DIRENT_TYPE_PROPERTY 4 /* ? */ <anchor id="DIRENT-TYPE-FILE:CAPS"/>DIRENT_TYPE_FILE DIRENT_TYPE_FILE#define DIRENT_TYPE_FILE 2 <anchor id="DIRENT-MAGIC-END:CAPS"/>DIRENT_MAGIC_END DIRENT_MAGIC_END#define DIRENT_MAGIC_END 0xffffffff <anchor id="DIRENT-TYPE-DIR:CAPS"/>DIRENT_TYPE_DIR DIRENT_TYPE_DIR#define DIRENT_TYPE_DIR 1 <anchor id="DIRENT-MAX-NAME-SIZE:CAPS"/>DIRENT_MAX_NAME_SIZE DIRENT_MAX_NAME_SIZE#define DIRENT_MAX_NAME_SIZE 0x40 <anchor id="DIRENT-FILE-SIZE:CAPS"/>DIRENT_FILE_SIZE DIRENT_FILE_SIZE#define DIRENT_FILE_SIZE 0x78 <anchor id="DIRENT-FIRSTBLOCK:CAPS"/>DIRENT_FIRSTBLOCK DIRENT_FIRSTBLOCK#define DIRENT_FIRSTBLOCK 0x74 <anchor id="DIRENT-TYPE-INVALID:CAPS"/>DIRENT_TYPE_INVALID DIRENT_TYPE_INVALID#define DIRENT_TYPE_INVALID 0 <anchor id="DIRENT-USERFLAGS:CAPS"/>DIRENT_USERFLAGS DIRENT_USERFLAGS#define DIRENT_USERFLAGS 0x60 /* only for dirs */ <anchor id="DIRENT-COLOUR:CAPS"/>DIRENT_COLOUR DIRENT_COLOUR#define DIRENT_COLOUR 0x43 <anchor id="DIRENT-MODIFY-TIME:CAPS"/>DIRENT_MODIFY_TIME DIRENT_MODIFY_TIME#define DIRENT_MODIFY_TIME 0x6c /* for files */ <anchor id="DIRENT-TYPE-LOCKBYTES:CAPS"/>DIRENT_TYPE_LOCKBYTES DIRENT_TYPE_LOCKBYTES#define DIRENT_TYPE_LOCKBYTES 3 /* ? */ <anchor id="DIRENT-CREATE-TIME:CAPS"/>DIRENT_CREATE_TIME DIRENT_CREATE_TIME#define DIRENT_CREATE_TIME 0x64 /* for files */ <anchor id="DIRENT-PREV:CAPS"/>DIRENT_PREV DIRENT_PREV#define DIRENT_PREV 0x44 <anchor id="DIRENT-NEXT:CAPS"/>DIRENT_NEXT DIRENT_NEXT#define DIRENT_NEXT 0x48 <anchor id="DIRENT-CHILD:CAPS"/>DIRENT_CHILD DIRENT_CHILD#define DIRENT_CHILD 0x4c <anchor id="DIRENT-TYPE:CAPS"/>DIRENT_TYPE DIRENT_TYPE#define DIRENT_TYPE 0x42 <anchor id="DIRENT-CLSID:CAPS"/>DIRENT_CLSID DIRENT_CLSID#define DIRENT_CLSID 0x50 /* only for dirs */ <anchor id="DIRENT-TYPE-ROOTDIR:CAPS"/>DIRENT_TYPE_ROOTDIR DIRENT_TYPE_ROOTDIR#define DIRENT_TYPE_ROOTDIR 5 <anchor id="BAT-MAGIC-METABAT:CAPS"/>BAT_MAGIC_METABAT BAT_MAGIC_METABAT#define BAT_MAGIC_METABAT 0xfffffffc /* a metabat block -4 */ <anchor id="BAT-MAGIC-BAT:CAPS"/>BAT_MAGIC_BAT BAT_MAGIC_BAT#define BAT_MAGIC_BAT 0xfffffffd /* a bat block, -3 */ <anchor id="BAT-INDEX-SIZE:CAPS"/>BAT_INDEX_SIZE BAT_INDEX_SIZE#define BAT_INDEX_SIZE 4 <anchor id="BAT-MAGIC-END-OF-CHAIN:CAPS"/>BAT_MAGIC_END_OF_CHAIN BAT_MAGIC_END_OF_CHAIN#define BAT_MAGIC_END_OF_CHAIN 0xfffffffe /* -2 */ <anchor id="BAT-MAGIC-UNUSED:CAPS"/>BAT_MAGIC_UNUSED BAT_MAGIC_UNUSED#define BAT_MAGIC_UNUSED 0xffffffff /* -1 */