From: <rl...@us...> - 2006-07-29 05:36:33
|
Revision: 16593 Author: rlaager Date: 2006-07-28 22:36:23 -0700 (Fri, 28 Jul 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16593&view=rev Log Message: ----------- Merge the time_t -> struct tm changes from trunk into v2_0_0. Modified Paths: -------------- branches/v2_0_0/configure.ac branches/v2_0_0/doc/gtkconv-signals.dox branches/v2_0_0/doc/log-signals.dox branches/v2_0_0/plugins/timestamp_format.c branches/v2_0_0/src/gtkconv.c branches/v2_0_0/src/log.c branches/v2_0_0/src/signals.c branches/v2_0_0/src/signals.h branches/v2_0_0/src/value.h Modified: branches/v2_0_0/configure.ac =================================================================== --- branches/v2_0_0/configure.ac 2006-07-28 23:48:26 UTC (rev 16592) +++ branches/v2_0_0/configure.ac 2006-07-29 05:36:23 UTC (rev 16593) @@ -60,6 +60,9 @@ dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_STRUCT_TM +AC_CHECK_SIZEOF(time_t, ,[ +#include <stdio.h> +#include <time.h>]) AC_C_BIGENDIAN Modified: branches/v2_0_0/doc/gtkconv-signals.dox =================================================================== --- branches/v2_0_0/doc/gtkconv-signals.dox 2006-07-28 23:48:26 UTC (rev 16592) +++ branches/v2_0_0/doc/gtkconv-signals.dox 2006-07-29 05:36:23 UTC (rev 16593) @@ -24,12 +24,12 @@ @signaldef conversation-timestamp @signalproto -char *(*conversation_timestamp)(GaimConversation *conv, struct tm *tm); +char *(*conversation_timestamp)(GaimConversation *conv, time_t when); @endsignalproto @signaldesc Emitted to allow plugins to customize the timestamp on a message. @param conv The conversation the message belongs to. - @param tm The time to be converted to a string. + @param when The time to be converted to a string. @return A textual representation of the time, or @c NULL to use a default format. @endsignaldef Modified: branches/v2_0_0/doc/log-signals.dox =================================================================== --- branches/v2_0_0/doc/log-signals.dox 2006-07-28 23:48:26 UTC (rev 16592) +++ branches/v2_0_0/doc/log-signals.dox 2006-07-29 05:36:23 UTC (rev 16593) @@ -8,13 +8,13 @@ @signaldef log-timestamp @signalproto -char *(*log_timestamp)(GaimConversation *conv, struct tm *tm); +char *(*log_timestamp)(GaimConversation *conv, time_t when); @endsignalproto @signaldesc Emitted to allow plugins to customize the timestamp on a message being logged. @param log The log the message belongs to. - @param tm The time to be converted to a string. + @param when The time to be converted to a string. @return A textual representation of the time, or @c NULL to use a default format. @note Plugins must be careful of logs with a type of GAIM_LOG_SYSTEM. Modified: branches/v2_0_0/plugins/timestamp_format.c =================================================================== --- branches/v2_0_0/plugins/timestamp_format.c 2006-07-28 23:48:26 UTC (rev 16592) +++ branches/v2_0_0/plugins/timestamp_format.c 2006-07-29 05:36:23 UTC (rev 16593) @@ -52,18 +52,18 @@ } static char *timestamp_cb_common(GaimConversation *conv, - const struct tm *tm, + time_t t, gboolean force, const char *dates) { + struct tm *tm = localtime(&t); g_return_val_if_fail(conv != NULL, NULL); - g_return_val_if_fail(tm != NULL, NULL); g_return_val_if_fail(dates != NULL, NULL); if (!strcmp(dates, "always") || (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT && !strcmp(dates, "chats")) || - (time(NULL) > (mktime((struct tm *)tm) + 20*60))) + (time(NULL) > (mktime(tm) + 20*60))) { if (force) return g_strdup(gaim_utf8_strftime("%Y-%m-%d %H:%M:%S", tm)); @@ -78,7 +78,7 @@ } static char *conversation_timestamp_cb(GaimConversation *conv, - const struct tm *tm, gpointer data) + time_t t, gpointer data) { gboolean force = gaim_prefs_get_bool( "/plugins/gtk/timestamp_format/force_24hr"); @@ -86,13 +86,11 @@ "/plugins/gtk/timestamp_format/use_dates/conversation"); g_return_val_if_fail(conv != NULL, NULL); - g_return_val_if_fail(tm != NULL, NULL); - return timestamp_cb_common(conv, tm, force, dates); + return timestamp_cb_common(conv, t, force, dates); } -static char *log_timestamp_cb(GaimLog *log, - const struct tm *tm, gpointer data) +static char *log_timestamp_cb(GaimLog *log, time_t t, gpointer data) { gboolean force = gaim_prefs_get_bool( "/plugins/gtk/timestamp_format/force_24hr"); @@ -100,17 +98,18 @@ "/plugins/gtk/timestamp_format/use_dates/log"); g_return_val_if_fail(log != NULL, NULL); - g_return_val_if_fail(tm != NULL, NULL); if (log->type == GAIM_LOG_SYSTEM) { - if (force) + if (force) { + struct tm *tm = localtime(&t); return g_strdup(gaim_utf8_strftime("%Y-%m-%d %H:%M:%S", tm)); - else + } else { return NULL; + } } - return timestamp_cb_common(log->conv, tm, force, dates); + return timestamp_cb_common(log->conv, t, force, dates); } static gboolean Modified: branches/v2_0_0/src/gtkconv.c =================================================================== --- branches/v2_0_0/src/gtkconv.c 2006-07-28 23:48:26 UTC (rev 16592) +++ branches/v2_0_0/src/gtkconv.c 2006-07-29 05:36:23 UTC (rev 16593) @@ -4591,7 +4591,6 @@ GaimConversationType type; char *displaying; gboolean plugin_return; - struct tm tm; g_return_if_fail(conv != NULL); gtkconv = GAIM_GTK_CONVERSATION(conv); @@ -4676,16 +4675,16 @@ if (gtk_text_buffer_get_char_count(gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->imhtml)))) gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), "<BR>", gtk_font_options_all); - tm = *(localtime(&mtime)); mdate = gaim_signal_emit_return_1(gaim_gtk_conversations_get_handle(), "conversation-timestamp", - conv, &tm); + conv, mtime); if (mdate == NULL) { + struct tm *tm = localtime(&mtime); if (time(NULL) > mtime + 20*60) /* show date if older than 20 minutes */ - mdate = g_strdup(gaim_date_format_long(&tm)); + mdate = g_strdup(gaim_date_format_long(tm)); else - mdate = g_strdup(gaim_time_format(&tm)); + mdate = g_strdup(gaim_time_format(tm)); } sml_attrib = g_strdup_printf("sml=\"%s\"", gaim_account_get_protocol_name(account)); @@ -6450,11 +6449,23 @@ "GaimGtkWindow *")); gaim_signal_register(handle, "conversation-timestamp", - gaim_marshal_POINTER__POINTER_POINTER, +#if SIZEOF_TIME_T == 4 + gaim_marshal_POINTER__POINTER_INT, +#elif SIZEOF_TIME_T == 8 + gaim_marshal_POINTER__POINTER_INT64, +#else +# error Unknown size of time_t +#endif gaim_value_new(GAIM_TYPE_POINTER), 2, gaim_value_new(GAIM_TYPE_SUBTYPE, - GAIM_SUBTYPE_CONVERSATION), - gaim_value_new(GAIM_TYPE_POINTER)); + GAIM_SUBTYPE_LOG), +#if SIZEOF_TIME_T == 4 + gaim_value_new(GAIM_TYPE_INT)); +#elif SIZEOF_TIME_T == 8 + gaim_value_new(GAIM_TYPE_INT64)); +#else +# error Unknown size of time_t +#endif gaim_signal_register(handle, "displaying-im-msg", gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER, Modified: branches/v2_0_0/src/log.c =================================================================== --- branches/v2_0_0/src/log.c 2006-07-28 23:48:26 UTC (rev 16592) +++ branches/v2_0_0/src/log.c 2006-07-29 05:36:23 UTC (rev 16593) @@ -593,12 +593,23 @@ gaim_log_logger_add(old_logger); gaim_signal_register(handle, "log-timestamp", - gaim_marshal_POINTER__POINTER_POINTER, +#if SIZEOF_TIME_T == 4 + gaim_marshal_POINTER__POINTER_INT, +#elif SIZEOF_TIME_T == 8 + gaim_marshal_POINTER__POINTER_INT64, +#else +# error Unknown size of time_t +#endif gaim_value_new(GAIM_TYPE_POINTER), 2, gaim_value_new(GAIM_TYPE_SUBTYPE, GAIM_SUBTYPE_LOG), - gaim_value_new(GAIM_TYPE_BOXED, - "struct tm *")); +#if SIZEOF_TIME_T == 4 + gaim_value_new(GAIM_TYPE_INT)); +#elif SIZEOF_TIME_T == 8 + gaim_value_new(GAIM_TYPE_INT64)); +#else +# error Unknown size of time_t +#endif gaim_prefs_connect_callback(NULL, "/core/logging/format", logger_pref_cb, NULL); @@ -622,14 +633,15 @@ static char *log_get_timestamp(GaimLog *log, time_t when) { char *date; - struct tm tm = *(localtime(&when)); + struct tm tm; date = gaim_signal_emit_return_1(gaim_log_get_handle(), "log-timestamp", - log, &tm); + log, when); if (date != NULL) return date; + tm = *(localtime(&when)); if (log->type == GAIM_LOG_SYSTEM || time(NULL) > when + 20*60) return g_strdup(gaim_date_format_long(&tm)); else Modified: branches/v2_0_0/src/signals.c =================================================================== --- branches/v2_0_0/src/signals.c 2006-07-28 23:48:26 UTC (rev 16592) +++ branches/v2_0_0/src/signals.c 2006-07-29 05:36:23 UTC (rev 16593) @@ -955,6 +955,36 @@ } void +gaim_marshal_POINTER__POINTER_INT( + GaimCallback cb, va_list args, void *data, + void **return_val) +{ + gpointer ret_val; + void *arg1 = va_arg(args, void *); + gint arg2 = va_arg(args, gint); + + ret_val = ((gpointer(*)(void *, gint, void *))cb)(arg1, arg2, data); + + if (return_val != NULL) + *return_val = ret_val; +} + +void +gaim_marshal_POINTER__POINTER_INT64( + GaimCallback cb, va_list args, void *data, + void **return_val) +{ + gpointer ret_val; + void *arg1 = va_arg(args, void *); + gint64 arg2 = va_arg(args, gint64); + + ret_val = ((gpointer(*)(void *, gint64, void *))cb)(arg1, arg2, data); + + if (return_val != NULL) + *return_val = ret_val; +} + +void gaim_marshal_POINTER__POINTER_POINTER(GaimCallback cb, va_list args, void *data, void **return_val) { Modified: branches/v2_0_0/src/signals.h =================================================================== --- branches/v2_0_0/src/signals.h 2006-07-28 23:48:26 UTC (rev 16592) +++ branches/v2_0_0/src/signals.h 2006-07-29 05:36:23 UTC (rev 16593) @@ -327,6 +327,10 @@ void gaim_marshal_BOOLEAN__INT_POINTER( GaimCallback cb, va_list args, void *data, void **return_val); +void gaim_marshal_POINTER__POINTER_INT( + GaimCallback cb, va_list args, void *data, void **return_val); +void gaim_marshal_POINTER__POINTER_INT64( + GaimCallback cb, va_list args, void *data, void **return_val); void gaim_marshal_POINTER__POINTER_POINTER( GaimCallback cb, va_list args, void *data, void **return_val); /*@}*/ Modified: branches/v2_0_0/src/value.h =================================================================== --- branches/v2_0_0/src/value.h 2006-07-28 23:48:26 UTC (rev 16592) +++ branches/v2_0_0/src/value.h 2006-07-29 05:36:23 UTC (rev 16593) @@ -53,6 +53,7 @@ } GaimType; + /** * Gaim-specific subtype values. */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |