diff options
author | Marc-André Lureau <marcandre.lureau@gmail.com> | 2012-12-15 17:08:39 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2013-01-09 13:56:06 +0100 |
commit | f1f6327ce6d9d693e22b222eaeee50fe137ec596 (patch) | |
tree | 42398a4c25e7ceae05f58d66c3d5fc8f8ae359a8 | |
parent | ab8e8a0cd0f9b5611f07c71a94ec17ffd9bd4e84 (diff) | |
download | msitools-f1f6327ce6d9d693e22b222eaeee50fe137ec596.tar.gz msitools-f1f6327ce6d9d693e22b222eaeee50fe137ec596.tar.xz msitools-f1f6327ce6d9d693e22b222eaeee50fe137ec596.zip |
Add libmsi_summary_info_get_property_type()
-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: |