diff options
-rw-r--r-- | include/libmsi-summary-info.h | 3 | ||||
-rw-r--r-- | libmsi/libmsi-summary-info.c | 31 | ||||
-rw-r--r-- | tools/msiinfo.c | 7 |
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: |