diff options
author | Marc-André Lureau <marcandre.lureau@gmail.com> | 2012-12-31 13:43:48 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2013-01-09 13:56:08 +0100 |
commit | 06c962631abee5d0fc59cdabf186f9cd003a461b (patch) | |
tree | eb4201ac8e425a61da4d17005e13200588e7f4ba /libmsi | |
parent | e18779f19ef2c2e12b1a4ba294944301cf0c4696 (diff) | |
download | msitools-06c962631abee5d0fc59cdabf186f9cd003a461b.tar.gz msitools-06c962631abee5d0fc59cdabf186f9cd003a461b.tar.xz msitools-06c962631abee5d0fc59cdabf186f9cd003a461b.zip |
libmsi: add libmsi_summary_info_save()
Diffstat (limited to 'libmsi')
-rw-r--r-- | libmsi/libmsi-summary-info.c | 42 |
1 files changed, 37 insertions, 5 deletions
diff --git a/libmsi/libmsi-summary-info.c b/libmsi/libmsi-summary-info.c index 50f07ce..048622a 100644 --- a/libmsi/libmsi-summary-info.c +++ b/libmsi/libmsi-summary-info.c @@ -519,7 +519,7 @@ static unsigned write_property_to_data( const LibmsiOLEVariant *prop, uint8_t *d return sz; } -static unsigned suminfo_persist( LibmsiSummaryInfo *si ) +static unsigned suminfo_persist (LibmsiSummaryInfo *si, LibmsiDatabase *database) { int cProperties, cbSection, dwOffset; GsfInput *stm; @@ -574,7 +574,7 @@ static unsigned suminfo_persist( LibmsiSummaryInfo *si ) assert(sz == 28 + 20 + cbSection); - r = write_raw_stream_data(si->database, szSumInfo, data, sz, &stm); + r = write_raw_stream_data (database, szSumInfo, data, sz, &stm); if (r == 0) { g_object_unref(G_OBJECT(stm)); } @@ -1017,7 +1017,7 @@ unsigned msi_add_suminfo( LibmsiDatabase *db, char ***records, int num_records, end: if (r == LIBMSI_RESULT_SUCCESS) - r = suminfo_persist( si ); + r = suminfo_persist( si, db ); g_object_unref(si); return r; @@ -1049,7 +1049,7 @@ libmsi_summary_info_persist (LibmsiSummaryInfo *si, GError **error) } g_object_ref (si); - ret = suminfo_persist (si); + ret = suminfo_persist (si, si->database); g_object_unref (si); if (ret != LIBMSI_RESULT_SUCCESS) @@ -1059,11 +1059,43 @@ libmsi_summary_info_persist (LibmsiSummaryInfo *si, GError **error) } /** + * libmsi_summary_info_save: + * @si: a #LibmsiSummaryInfo + * @database: a #LibmsiDatabase to save to + * @error: (allow-none): #GError to set on error, or %NULL + * + * Save summary informations to the associated database. + * + * Returns: %TRUE on success + **/ +gboolean +libmsi_summary_info_save (LibmsiSummaryInfo *si, LibmsiDatabase *db, GError **error) +{ + unsigned ret; + + g_return_val_if_fail (LIBMSI_IS_SUMMARY_INFO (si), FALSE); + g_return_val_if_fail (LIBMSI_IS_DATABASE (db), FALSE); + g_return_val_if_fail (!error || *error == NULL, FALSE); + + ret = suminfo_persist (si, db); + if (ret != LIBMSI_RESULT_SUCCESS) + g_set_error_literal (error, LIBMSI_RESULT_ERROR, ret, G_STRFUNC); + + return ret == LIBMSI_RESULT_SUCCESS; +} + +/** * libmsi_summary_info_new: - * @database: (allow-none): a #LibmsiDatabase + * @database: (allow-none): an optionnal associated #LibmsiDatabase * @update_count: number of changes allowed * @error: (allow-none): #GError to set on error, or %NULL * + * If @database is provided, the summary informations will be + * populated during creation, and the libmsi_summary_info_persist() + * function will save the properties to it. If @database is %NULL, you + * may still populate properties and then save them to a particular + * database with the libmsi_summary_info_save() function. + * * Returns: a #LibmsiSummaryInfo or %NULL on failure **/ LibmsiSummaryInfo * |