summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2012-12-15 17:08:39 +0100
committerPaolo Bonzini <pbonzini@redhat.com>2013-01-09 13:56:06 +0100
commitf1f6327ce6d9d693e22b222eaeee50fe137ec596 (patch)
tree42398a4c25e7ceae05f58d66c3d5fc8f8ae359a8
parentab8e8a0cd0f9b5611f07c71a94ec17ffd9bd4e84 (diff)
downloadmsitools-f1f6327ce6d9d693e22b222eaeee50fe137ec596.tar.gz
msitools-f1f6327ce6d9d693e22b222eaeee50fe137ec596.tar.xz
msitools-f1f6327ce6d9d693e22b222eaeee50fe137ec596.zip
Add libmsi_summary_info_get_property_type()
-rw-r--r--include/libmsi-summary-info.h3
-rw-r--r--libmsi/libmsi-summary-info.c31
-rw-r--r--tools/msiinfo.c7
3 files changed, 37 insertions, 4 deletions
diff --git a/include/libmsi-summary-info.h b/include/libmsi-summary-info.h
index a6216b3..c3e0cc8 100644
--- a/include/libmsi-summary-info.h
+++ b/include/libmsi-summary-info.h
@@ -44,6 +44,9 @@ GType libmsi_summary_info_get_type (void) G_GNUC_CONST;
LibmsiSummaryInfo * libmsi_summary_info_new (LibmsiDatabase *database,
unsigned update_count,
GError **error);
+LibmsiPropertyType libmsi_summary_info_get_property_type (LibmsiSummaryInfo *si,
+ LibmsiProperty prop,
+ GError **error);
const gchar * libmsi_summary_info_get_string (LibmsiSummaryInfo *si,
LibmsiProperty prop,
GError **error);
diff --git a/libmsi/libmsi-summary-info.c b/libmsi/libmsi-summary-info.c
index cc257ea..eba98d3 100644
--- a/libmsi/libmsi-summary-info.c
+++ b/libmsi/libmsi-summary-info.c
@@ -595,6 +595,37 @@ LibmsiResult libmsi_summary_info_get_property_count (LibmsiSummaryInfo *si, unsi
return LIBMSI_RESULT_SUCCESS;
}
+LibmsiPropertyType
+libmsi_summary_info_get_property_type (LibmsiSummaryInfo *self,
+ LibmsiProperty prop,
+ GError **error)
+{
+ g_return_val_if_fail (LIBMSI_SUMMARY_INFO (self), FALSE);
+ g_return_val_if_fail (!error || *error == NULL, FALSE);
+
+ if (prop >= MSI_MAX_PROPS) {
+ g_set_error (error, LIBMSI_RESULT_ERROR, LIBMSI_RESULT_UNKNOWN_PROPERTY,
+ "Unknown property");
+ return LIBMSI_PROPERTY_TYPE_EMPTY;
+ }
+
+ switch (self->property[prop].vt) {
+ case OLEVT_I2:
+ case OLEVT_I4:
+ return LIBMSI_PROPERTY_TYPE_INT;
+ case OLEVT_LPSTR:
+ return LIBMSI_PROPERTY_TYPE_STRING;
+ case OLEVT_FILETIME:
+ return LIBMSI_PROPERTY_TYPE_FILETIME;
+ case OLEVT_EMPTY:
+ return LIBMSI_PROPERTY_TYPE_EMPTY;
+ default:
+ g_set_error (error, LIBMSI_RESULT_ERROR, LIBMSI_RESULT_FUNCTION_FAILED,
+ "Unknown type");
+ return LIBMSI_PROPERTY_TYPE_EMPTY;
+ }
+}
+
static void _summary_info_get_property (LibmsiSummaryInfo *si, unsigned uiProperty,
unsigned *puiDataType, int *pintvalue,
guint64 *pftValue, char *szValueBuf,
diff --git a/tools/msiinfo.c b/tools/msiinfo.c
index 7431fff..db2066b 100644
--- a/tools/msiinfo.c
+++ b/tools/msiinfo.c
@@ -264,10 +264,9 @@ static void print_suminfo(LibmsiSummaryInfo *si, int prop, const char *name)
time_t t;
sz = 0;
- r = libmsi_summary_info_get_property(si, prop, &type, &val, &valtime, NULL, &sz);
- if (r && r != LIBMSI_RESULT_MORE_DATA) {
- print_libmsi_error(r);
- }
+ type = libmsi_summary_info_get_property_type(si, prop, &error);
+ if (error)
+ goto end;
switch (type) {
case LIBMSI_PROPERTY_TYPE_INT: