diff options
author | Marc-André Lureau <marcandre.lureau@gmail.com> | 2012-12-19 11:54:19 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2013-01-09 13:56:07 +0100 |
commit | 82f273547b1d7c2cb01fd238ba6d0ac001ed15e9 (patch) | |
tree | 264035073ba0216344205f84dfd6aeec4457903c /libmsi/libmsi-summary-info.c | |
parent | 1732293217d3bd81dde1cbafc3201cdacfeb1a2b (diff) | |
download | msitools-82f273547b1d7c2cb01fd238ba6d0ac001ed15e9.tar.gz msitools-82f273547b1d7c2cb01fd238ba6d0ac001ed15e9.tar.xz msitools-82f273547b1d7c2cb01fd238ba6d0ac001ed15e9.zip |
database: export special _SummaryInformation table
See http://msdn.microsoft.com/es-es/library/windows/desktop/aa372921%28v=vs.85%29.aspx
Diffstat (limited to 'libmsi/libmsi-summary-info.c')
-rw-r--r-- | libmsi/libmsi-summary-info.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/libmsi/libmsi-summary-info.c b/libmsi/libmsi-summary-info.c index d8b5ed7..6ff6200 100644 --- a/libmsi/libmsi-summary-info.c +++ b/libmsi/libmsi-summary-info.c @@ -236,6 +236,23 @@ static unsigned read_dword( const uint8_t *data, unsigned *ofs ) return val; } +static gchar* filetime_to_string (guint64 ft) +{ + struct tm tm; + time_t t; + + ft /= 10000000ULL; + ft -= 134774ULL * 86400ULL; + t = ft; + + if (!gmtime_r (&t, &tm)) + return NULL; + + return g_strdup_printf ("%d/%d/%d %d:%d:%d", + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, + tm.tm_hour, tm.tm_min, tm.tm_sec); +} + static void parse_filetime( const char *str, guint64 *ft ) { /* set to 0, tm_isdst can make the result vary: */ @@ -602,6 +619,28 @@ libmsi_summary_info_get_property_type (LibmsiSummaryInfo *self, } } +G_GNUC_INTERNAL gchar * +summary_info_as_string (LibmsiSummaryInfo *si, unsigned uiProperty) +{ + LibmsiOLEVariant *prop = &si->property[uiProperty]; + + switch (prop->vt) { + case OLEVT_I2: + case OLEVT_I4: + return g_strdup_printf ("%d", prop->intval); + case OLEVT_LPSTR: + return g_strdup (prop->strval); + case OLEVT_FILETIME: + return filetime_to_string (prop->filetime); + case OLEVT_EMPTY: + return g_strdup (""); + default: + g_warn_if_reached (); + } + + return NULL; +} + static void _summary_info_get_property (LibmsiSummaryInfo *si, unsigned uiProperty, unsigned *puiDataType, int *pintvalue, guint64 *pftValue, char *szValueBuf, |