Skip to content

Commit 06c9626

Browse files
elmarcobonzini
authored andcommitted
libmsi: add libmsi_summary_info_save()
1 parent e18779f commit 06c9626

File tree

2 files changed

+40
-5
lines changed

2 files changed

+40
-5
lines changed

include/libmsi-summary-info.h

+3
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ gboolean libmsi_summary_info_set_filetime (LibmsiSummaryInfo *si,
7070
GError **error);
7171
gboolean libmsi_summary_info_persist (LibmsiSummaryInfo *si,
7272
GError **error);
73+
gboolean libmsi_summary_info_save (LibmsiSummaryInfo *si,
74+
LibmsiDatabase *db,
75+
GError **error);
7376
GArray * libmsi_summary_info_get_properties (LibmsiSummaryInfo *si);
7477

7578
G_END_DECLS

libmsi/libmsi-summary-info.c

+37-5
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ static unsigned write_property_to_data( const LibmsiOLEVariant *prop, uint8_t *d
519519
return sz;
520520
}
521521

522-
static unsigned suminfo_persist( LibmsiSummaryInfo *si )
522+
static unsigned suminfo_persist (LibmsiSummaryInfo *si, LibmsiDatabase *database)
523523
{
524524
int cProperties, cbSection, dwOffset;
525525
GsfInput *stm;
@@ -574,7 +574,7 @@ static unsigned suminfo_persist( LibmsiSummaryInfo *si )
574574

575575
assert(sz == 28 + 20 + cbSection);
576576

577-
r = write_raw_stream_data(si->database, szSumInfo, data, sz, &stm);
577+
r = write_raw_stream_data (database, szSumInfo, data, sz, &stm);
578578
if (r == 0) {
579579
g_object_unref(G_OBJECT(stm));
580580
}
@@ -1017,7 +1017,7 @@ unsigned msi_add_suminfo( LibmsiDatabase *db, char ***records, int num_records,
10171017

10181018
end:
10191019
if (r == LIBMSI_RESULT_SUCCESS)
1020-
r = suminfo_persist( si );
1020+
r = suminfo_persist( si, db );
10211021

10221022
g_object_unref(si);
10231023
return r;
@@ -1049,7 +1049,7 @@ libmsi_summary_info_persist (LibmsiSummaryInfo *si, GError **error)
10491049
}
10501050

10511051
g_object_ref (si);
1052-
ret = suminfo_persist (si);
1052+
ret = suminfo_persist (si, si->database);
10531053
g_object_unref (si);
10541054

10551055
if (ret != LIBMSI_RESULT_SUCCESS)
@@ -1058,12 +1058,44 @@ libmsi_summary_info_persist (LibmsiSummaryInfo *si, GError **error)
10581058
return ret == LIBMSI_RESULT_SUCCESS;
10591059
}
10601060

1061+
/**
1062+
* libmsi_summary_info_save:
1063+
* @si: a #LibmsiSummaryInfo
1064+
* @database: a #LibmsiDatabase to save to
1065+
* @error: (allow-none): #GError to set on error, or %NULL
1066+
*
1067+
* Save summary informations to the associated database.
1068+
*
1069+
* Returns: %TRUE on success
1070+
**/
1071+
gboolean
1072+
libmsi_summary_info_save (LibmsiSummaryInfo *si, LibmsiDatabase *db, GError **error)
1073+
{
1074+
unsigned ret;
1075+
1076+
g_return_val_if_fail (LIBMSI_IS_SUMMARY_INFO (si), FALSE);
1077+
g_return_val_if_fail (LIBMSI_IS_DATABASE (db), FALSE);
1078+
g_return_val_if_fail (!error || *error == NULL, FALSE);
1079+
1080+
ret = suminfo_persist (si, db);
1081+
if (ret != LIBMSI_RESULT_SUCCESS)
1082+
g_set_error_literal (error, LIBMSI_RESULT_ERROR, ret, G_STRFUNC);
1083+
1084+
return ret == LIBMSI_RESULT_SUCCESS;
1085+
}
1086+
10611087
/**
10621088
* libmsi_summary_info_new:
1063-
* @database: (allow-none): a #LibmsiDatabase
1089+
* @database: (allow-none): an optionnal associated #LibmsiDatabase
10641090
* @update_count: number of changes allowed
10651091
* @error: (allow-none): #GError to set on error, or %NULL
10661092
*
1093+
* If @database is provided, the summary informations will be
1094+
* populated during creation, and the libmsi_summary_info_persist()
1095+
* function will save the properties to it. If @database is %NULL, you
1096+
* may still populate properties and then save them to a particular
1097+
* database with the libmsi_summary_info_save() function.
1098+
*
10671099
* Returns: a #LibmsiSummaryInfo or %NULL on failure
10681100
**/
10691101
LibmsiSummaryInfo *

0 commit comments

Comments
 (0)