summaryrefslogtreecommitdiffstats
path: root/libmsi/msipriv.h
diff options
context:
space:
mode:
Diffstat (limited to 'libmsi/msipriv.h')
-rw-r--r--libmsi/msipriv.h215
1 files changed, 81 insertions, 134 deletions
diff --git a/libmsi/msipriv.h b/libmsi/msipriv.h
index b085e27..a298ae3 100644
--- a/libmsi/msipriv.h
+++ b/libmsi/msipriv.h
@@ -23,22 +23,33 @@
#define __WINE_MSI_PRIVATE__
#include <stdarg.h>
+#include <string.h>
+#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <glib.h>
+
#include <gsf/gsf.h>
+#include <gsf/gsf-input.h>
+#include <gsf/gsf-infile.h>
+#include <gsf/gsf-output.h>
+#include <gsf/gsf-outfile.h>
+#include <gsf/gsf-input-memory.h>
+#include <gsf/gsf-input-stdio.h>
+#include <gsf/gsf-output-stdio.h>
+#include <gsf/gsf-infile-msole.h>
+#include <gsf/gsf-outfile-msole.h>
+
-#include "unicode.h"
-#include "windef.h"
-#include "winbase.h"
#include "libmsi.h"
-#include "objbase.h"
-#include "objidl.h"
-#include "winnls.h"
#include "list.h"
#pragma GCC visibility push(hidden)
+#ifndef MAX_PATH
+#define MAX_PATH PATH_MAX
+#endif
+
#define MSI_DATASIZEMASK 0x00ff
#define MSITYPE_VALID 0x0100
#define MSITYPE_LOCALIZABLE 0x200
@@ -66,8 +77,8 @@ struct _LibmsiDatabase
{
GObject parent;
- IStorage *infile;
- IStorage *outfile;
+ GsfInfile *infile;
+ GsfOutfile *outfile;
string_table *strings;
unsigned bytes_per_strref;
char *path;
@@ -103,8 +114,8 @@ typedef struct _LibmsiField
union
{
int iVal;
- WCHAR *szwVal;
- IStream *stream;
+ char *szVal;
+ GsfInput *stream;
} u;
} LibmsiField;
@@ -118,8 +129,8 @@ struct _LibmsiRecord
typedef struct _column_info
{
- const WCHAR *table;
- const WCHAR *column;
+ const char *table;
+ const char *column;
int type;
bool temporary;
struct expr *val;
@@ -147,7 +158,7 @@ typedef struct _LibmsiViewOps
* This function is similar to fetch_int, except fetches a
* stream instead of an integer.
*/
- unsigned (*fetch_stream)( LibmsiView *view, unsigned row, unsigned col, IStream **stm );
+ unsigned (*fetch_stream)( LibmsiView *view, unsigned row, unsigned col, GsfInput **stm );
/*
* get_row - gets values from a row
@@ -195,8 +206,8 @@ typedef struct _LibmsiViewOps
*
* The column information can be queried at any time.
*/
- unsigned (*get_column_info)( LibmsiView *view, unsigned n, const WCHAR **name, unsigned *type,
- bool *temporary, const WCHAR **table_name );
+ unsigned (*get_column_info)( LibmsiView *view, unsigned n, const char **name, unsigned *type,
+ bool *temporary, const char **table_name );
/*
* delete - destroys the structure completely
@@ -229,12 +240,12 @@ typedef struct _LibmsiViewOps
/*
* add_column - adds a column to the table
*/
- unsigned (*add_column)( LibmsiView *view, const WCHAR *table, unsigned number, const WCHAR *column, unsigned type, bool hold );
+ unsigned (*add_column)( LibmsiView *view, const char *table, unsigned number, const char *column, unsigned type, bool hold );
/*
* remove_column - removes the column represented by table name and column number from the table
*/
- unsigned (*remove_column)( LibmsiView *view, const WCHAR *table, unsigned number );
+ unsigned (*remove_column)( LibmsiView *view, const char *table, unsigned number );
/*
* sort - orders the table by columns
@@ -251,7 +262,7 @@ struct _LibmsiView
{
const LibmsiViewOps *ops;
LibmsiDBError error;
- const WCHAR *error_column;
+ const char *error_column;
};
#define MSI_MAX_PROPS 20
@@ -294,7 +305,7 @@ typedef struct {
bool unicode;
union {
char *a;
- WCHAR *w;
+ char *w;
} str;
} awstring;
@@ -302,11 +313,11 @@ typedef struct {
bool unicode;
union {
const char *a;
- const WCHAR *w;
+ const char *w;
} str;
} awcstring;
-unsigned msi_strcpy_to_awstring( const WCHAR *str, awstring *awbuf, unsigned *sz );
+unsigned msi_strcpy_to_awstring( const char *str, awstring *awbuf, unsigned *sz );
extern void free_cached_tables( LibmsiDatabase *db );
extern unsigned _libmsi_database_commit_tables( LibmsiDatabase *db, unsigned bytes_per_strref );
@@ -319,44 +330,43 @@ enum StringPersistence
StringNonPersistent = 1
};
-extern int _libmsi_add_string( string_table *st, const WCHAR *data, int len, uint16_t refcount, enum StringPersistence persistence );
-extern unsigned _libmsi_id_from_stringW( const string_table *st, const WCHAR *buffer, unsigned *id );
-extern VOID msi_destroy_stringtable( string_table *st );
-extern const WCHAR *msi_string_lookup_id( const string_table *st, unsigned id );
+extern int _libmsi_add_string( string_table *st, const char *data, int len, uint16_t refcount, enum StringPersistence persistence );
+extern unsigned _libmsi_id_from_string_utf8( const string_table *st, const char *buffer, unsigned *id );
+extern void msi_destroy_stringtable( string_table *st );
+extern const char *msi_string_lookup_id( const string_table *st, unsigned id );
extern string_table *msi_init_string_table( unsigned *bytes_per_strref );
-extern string_table *msi_load_string_table( IStorage *stg, unsigned *bytes_per_strref );
+extern string_table *msi_load_string_table( GsfInfile *stg, unsigned *bytes_per_strref );
extern unsigned msi_save_string_table( const string_table *st, LibmsiDatabase *db, unsigned *bytes_per_strref );
extern unsigned msi_get_string_table_codepage( const string_table *st );
extern unsigned msi_set_string_table_codepage( string_table *st, unsigned codepage );
-unsigned _libmsi_open_table( LibmsiDatabase *db, const WCHAR *name, bool encoded );
-extern bool table_view_exists( LibmsiDatabase *db, const WCHAR *name );
-extern LibmsiCondition _libmsi_database_is_table_persistent( LibmsiDatabase *db, const WCHAR *table );
+unsigned _libmsi_open_table( LibmsiDatabase *db, const char *name, bool encoded );
+extern bool table_view_exists( LibmsiDatabase *db, const char *name );
+extern LibmsiCondition _libmsi_database_is_table_persistent( LibmsiDatabase *db, const char *table );
-extern unsigned read_stream_data( IStorage *stg, const WCHAR *stname,
+extern unsigned read_stream_data( GsfInfile *stg, const char *stname,
uint8_t **pdata, unsigned *psz );
-extern unsigned write_stream_data( LibmsiDatabase *db, const WCHAR *stname,
+extern unsigned write_stream_data( LibmsiDatabase *db, const char *stname,
const void *data, unsigned sz );
-extern unsigned write_raw_stream_data( LibmsiDatabase *db, const WCHAR *stname,
- const void *data, unsigned sz, IStream **outstm );
+extern unsigned write_raw_stream_data( LibmsiDatabase *db, const char *stname,
+ const void *data, unsigned sz, GsfInput **outstm );
extern unsigned _libmsi_database_commit_streams( LibmsiDatabase *db );
/* transform functions */
-extern unsigned msi_table_apply_transform( LibmsiDatabase *db, IStorage *stg );
+extern unsigned msi_table_apply_transform( LibmsiDatabase *db, GsfInfile *stg );
extern unsigned _libmsi_database_apply_transform( LibmsiDatabase *db,
const char *szTransformFile, int iErrorCond );
-extern void append_storage_to_db( LibmsiDatabase *db, IStorage *stg );
+extern void append_storage_to_db( LibmsiDatabase *db, GsfInfile *stg );
extern unsigned _libmsi_database_commit_storages( LibmsiDatabase *db );
/* record internals */
extern void _libmsi_record_destroy( LibmsiRecord * );
-extern unsigned _libmsi_record_set_IStream( LibmsiRecord *, unsigned, IStream *);
-extern unsigned _libmsi_record_get_IStream( const LibmsiRecord *, unsigned, IStream **);
-extern const WCHAR *_libmsi_record_get_string_raw( const LibmsiRecord *, unsigned );
-extern unsigned _libmsi_record_set_stringW( LibmsiRecord *, unsigned, const WCHAR *);
-extern unsigned _libmsi_record_get_stringW( const LibmsiRecord *, unsigned, WCHAR *, unsigned *);
+extern unsigned _libmsi_record_set_gsf_input( LibmsiRecord *, unsigned, GsfInput *);
+extern unsigned _libmsi_record_get_gsf_input( const LibmsiRecord *, unsigned, GsfInput **);
+extern const char *_libmsi_record_get_string_raw( const LibmsiRecord *, unsigned );
+extern unsigned _libmsi_record_get_string( const LibmsiRecord *, unsigned, char *, unsigned *);
extern unsigned _libmsi_record_save_stream( const LibmsiRecord *, unsigned, char *, unsigned *);
-extern unsigned _libmsi_record_load_stream(LibmsiRecord *, unsigned, IStream *);
+extern unsigned _libmsi_record_load_stream(LibmsiRecord *, unsigned, GsfInput *);
extern unsigned _libmsi_record_load_stream_from_file( LibmsiRecord *, unsigned, const char *);
extern unsigned _libmsi_record_copy_field( LibmsiRecord *, unsigned, LibmsiRecord *, unsigned );
extern LibmsiRecord *_libmsi_record_clone( LibmsiRecord * );
@@ -364,55 +374,54 @@ extern bool _libmsi_record_compare( const LibmsiRecord *, const LibmsiRecord * )
extern bool _libmsi_record_compare_fields(const LibmsiRecord *a, const LibmsiRecord *b, unsigned field);
/* stream internals */
-extern void enum_stream_names( IStorage *stg );
-extern WCHAR *encode_streamname(bool bTable, const WCHAR *in);
-extern void decode_streamname(const WCHAR *in, WCHAR *out);
+extern void enum_stream_names( GsfInfile *stg );
+extern char *encode_streamname(bool bTable, const char *in);
+extern void decode_streamname(const char *in, char *out);
/* database internals */
extern LibmsiResult _libmsi_database_start_transaction(LibmsiDatabase *db);
extern LibmsiResult _libmsi_database_open(LibmsiDatabase *db);
extern LibmsiResult _libmsi_database_close(LibmsiDatabase *db, bool committed);
-unsigned msi_create_stream( LibmsiDatabase *db, const WCHAR *stname, IStream *stm );
-extern unsigned msi_get_raw_stream( LibmsiDatabase *, const WCHAR *, IStream **);
-void msi_destroy_stream( LibmsiDatabase *, const WCHAR * );
-extern unsigned msi_enum_db_streams(LibmsiDatabase *, unsigned (*fn)(const WCHAR *, IStream *, void *), void *);
-unsigned msi_create_storage( LibmsiDatabase *db, const WCHAR *stname, IStream *stm );
-unsigned msi_open_storage( LibmsiDatabase *db, const WCHAR *stname );
-void msi_destroy_storage( LibmsiDatabase *db, const WCHAR *stname );
-extern unsigned msi_enum_db_storages(LibmsiDatabase *, unsigned (*fn)(const WCHAR *, IStorage *, void *), void *);
-extern unsigned _libmsi_database_open_query(LibmsiDatabase *, const WCHAR *, LibmsiQuery **);
-extern unsigned _libmsi_query_open( LibmsiDatabase *, LibmsiQuery **, const WCHAR *, ... );
+unsigned msi_create_stream( LibmsiDatabase *db, const char *stname, GsfInput *stm );
+extern unsigned msi_get_raw_stream( LibmsiDatabase *, const char *, GsfInput **);
+void msi_destroy_stream( LibmsiDatabase *, const char * );
+extern unsigned msi_enum_db_streams(LibmsiDatabase *, unsigned (*fn)(const char *, GsfInput *, void *), void *);
+unsigned msi_create_storage( LibmsiDatabase *db, const char *stname, GsfInput *stm );
+unsigned msi_open_storage( LibmsiDatabase *db, const char *stname );
+void msi_destroy_storage( LibmsiDatabase *db, const char *stname );
+extern unsigned msi_enum_db_storages(LibmsiDatabase *, unsigned (*fn)(const char *, GsfInfile *, void *), void *);
+extern unsigned _libmsi_database_open_query(LibmsiDatabase *, const char *, LibmsiQuery **);
+extern unsigned _libmsi_query_open( LibmsiDatabase *, LibmsiQuery **, const char *, ... );
typedef unsigned (*record_func)( LibmsiRecord *, void *);
extern unsigned _libmsi_query_iterate_records( LibmsiQuery *, unsigned *, record_func, void *);
-extern LibmsiRecord *_libmsi_query_get_record( LibmsiDatabase *db, const WCHAR *query, ... );
-extern unsigned _libmsi_database_get_primary_keys( LibmsiDatabase *, const WCHAR *, LibmsiRecord **);
+extern LibmsiRecord *_libmsi_query_get_record( LibmsiDatabase *db, const char *query, ... );
+extern unsigned _libmsi_database_get_primary_keys( LibmsiDatabase *, const char *, LibmsiRecord **);
/* view internals */
extern unsigned _libmsi_query_execute( LibmsiQuery*, LibmsiRecord * );
extern unsigned _libmsi_query_fetch( LibmsiQuery*, LibmsiRecord ** );
extern unsigned _libmsi_query_get_column_info(LibmsiQuery *, LibmsiColInfo, LibmsiRecord **);
-extern unsigned _libmsi_view_find_column( LibmsiView *, const WCHAR *, const WCHAR *, unsigned *);
+extern unsigned _libmsi_view_find_column( LibmsiView *, const char *, const char *, unsigned *);
extern unsigned msi_view_get_row(LibmsiDatabase *, LibmsiView *, unsigned, LibmsiRecord **);
/* summary information */
-extern LibmsiSummaryInfo *MSI_GetSummaryInformationW( IStorage *stg, unsigned uiUpdateCount );
-extern unsigned msi_add_suminfo( LibmsiDatabase *db, WCHAR ***records, int num_records, int num_columns );
+extern unsigned msi_add_suminfo( LibmsiDatabase *db, char ***records, int num_records, int num_columns );
/* Helpers */
-extern WCHAR *msi_dup_record_field(LibmsiRecord *row, int index);
-extern WCHAR *msi_dup_property( LibmsiDatabase *db, const WCHAR *prop );
-extern unsigned msi_set_property( LibmsiDatabase *, const WCHAR *, const WCHAR *);
-extern unsigned msi_get_property( LibmsiDatabase *, const WCHAR *, WCHAR *, unsigned *);
-extern int msi_get_property_int( LibmsiDatabase *package, const WCHAR *prop, int def );
+extern char *msi_dup_record_field(LibmsiRecord *row, int index);
+extern char *msi_dup_property( LibmsiDatabase *db, const char *prop );
+extern unsigned msi_set_property( LibmsiDatabase *, const char *, const char *);
+extern unsigned msi_get_property( LibmsiDatabase *, const char *, char *, unsigned *);
+extern int msi_get_property_int( LibmsiDatabase *package, const char *prop, int def );
/* common strings */
-static const WCHAR szEmpty[] = {0};
-static const WCHAR szStreams[] = {'_','S','t','r','e','a','m','s',0};
-static const WCHAR szStorages[] = {'_','S','t','o','r','a','g','e','s',0};
-static const WCHAR szStringData[] = {'_','S','t','r','i','n','g','D','a','t','a',0};
-static const WCHAR szStringPool[] = {'_','S','t','r','i','n','g','P','o','o','l',0};
-static const WCHAR szName[] = {'N','a','m','e',0};
-static const WCHAR szData[] = {'D','a','t','a',0};
+static const char szEmpty[] = "";
+static const char szStreams[] = "_Streams";
+static const char szStorages[] = "_Storages";
+static const char szStringData[] = "_StringData";
+static const char szStringPool[] = "_StringPool";
+static const char szName[] = "Name";
+static const char szData[] = "Data";
/* memory allocation macro functions */
@@ -447,7 +456,7 @@ static inline void msi_free( void *mem )
free(mem);
}
-static inline char *strcpynA( char *dst, const char *src, unsigned count )
+static inline char *strcpyn( char *dst, const char *src, unsigned count )
{
char *d = dst;
const char *s = src;
@@ -461,68 +470,6 @@ static inline char *strcpynA( char *dst, const char *src, unsigned count )
return dst;
}
-static inline char *strdupWtoUTF8( const WCHAR *str )
-{
- char *ret = NULL;
- unsigned len;
-
- if (!str) return ret;
- len = WideCharToMultiByte( CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL);
- ret = msi_alloc( len );
- if (ret)
- WideCharToMultiByte( CP_UTF8, 0, str, -1, ret, len, NULL, NULL );
- return ret;
-}
-
-static inline WCHAR *strdupUTF8toW( const char *str )
-{
- WCHAR *ret = NULL;
- unsigned len;
-
- if (!str) return ret;
- len = MultiByteToWideChar( CP_UTF8, 0, str, -1, NULL, 0 );
- ret = msi_alloc( len * sizeof(WCHAR) );
- if (ret)
- MultiByteToWideChar( CP_UTF8, 0, str, -1, ret, len );
- return ret;
-}
-
-static inline char *strdupWtoA( const WCHAR *str )
-{
- char *ret = NULL;
- unsigned len;
-
- if (!str) return ret;
- len = WideCharToMultiByte( CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
- ret = msi_alloc( len );
- if (ret)
- WideCharToMultiByte( CP_ACP, 0, str, -1, ret, len, NULL, NULL );
- return ret;
-}
-
-static inline WCHAR *strdupAtoW( const char *str )
-{
- WCHAR *ret = NULL;
- unsigned len;
-
- if (!str) return ret;
- len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 );
- ret = msi_alloc( len * sizeof(WCHAR) );
- if (ret)
- MultiByteToWideChar( CP_ACP, 0, str, -1, ret, len );
- return ret;
-}
-
-static inline WCHAR *strdupW( const WCHAR *src )
-{
- WCHAR *dest;
- if (!src) return NULL;
- dest = msi_alloc( (strlenW(src)+1)*sizeof(WCHAR) );
- if (dest)
- strcpyW(dest, src);
- return dest;
-}
-
#pragma GCC visibility pop
#endif /* __WINE_MSI_PRIVATE__ */