[geany/geany] fbce36: Improve build date conversion code

Enrico Tröger git-noreply at xxxxx
Sun Mar 17 16:17:09 UTC 2013


Branch:      refs/heads/master
Author:      Enrico Tröger <enrico.troeger at uvena.de>
Committer:   Enrico Tröger <enrico.troeger at uvena.de>
Date:        Sun, 17 Mar 2013 16:17:09 UTC
Commit:      fbce36418256cacee6d52e535e8ee41bfc76db39
             https://github.com/geany/geany/commit/fbce36418256cacee6d52e535e8ee41bfc76db39

Log Message:
-----------
Improve build date conversion code

Don't use strptime() as it is not very portable, instead use a GDate and use the
code also for the date output in --version.


Modified Paths:
--------------
    src/about.c
    src/main.c
    src/utils.c
    src/utils.h

Modified: src/about.c
10 files changed, 4 insertions(+), 6 deletions(-)
===================================================================
@@ -153,8 +153,7 @@ static GtkWidget *create_dialog(void)
 	gchar buffer[512];
 	gchar buffer2[128];
 	guint i, row = 0;
-	struct tm builddate_tm;
-	char builddate_local[255];
+	gchar *build_date;
 
 	dialog = gtk_dialog_new();
 
@@ -227,10 +226,9 @@ static GtkWidget *create_dialog(void)
 	gtk_label_set_justify(GTK_LABEL(builddate_label), GTK_JUSTIFY_CENTER);
 	gtk_label_set_selectable(GTK_LABEL(builddate_label), TRUE);
 	gtk_label_set_use_markup(GTK_LABEL(builddate_label), TRUE);
-	memset(&builddate_tm, 0, sizeof(struct tm));
-	strptime(__DATE__, "%b %d %Y", &builddate_tm);
-	strftime(builddate_local, sizeof(builddate_local), GEANY_TEMPLATES_FORMAT_DATE, &builddate_tm);
-	g_snprintf(buffer2, sizeof(buffer2), _("(built on or after %s)"), builddate_local);
+	build_date = utils_parse_and_format_build_date(__DATE__);
+	g_snprintf(buffer2, sizeof(buffer2), _("(built on or after %s)"), build_date);
+	g_free(build_date);
 	g_snprintf(buffer, sizeof(buffer), BUILDDATE, buffer2);
 	gtk_label_set_markup(GTK_LABEL(builddate_label), buffer);
 	gtk_misc_set_padding(GTK_MISC(builddate_label), 2, 2);


Modified: src/main.c
5 files changed, 4 insertions(+), 1 deletions(-)
===================================================================
@@ -568,13 +568,16 @@ static void parse_command_line_options(gint *argc, gchar ***argv)
 
 	if (show_version)
 	{
+		gchar *build_date = utils_parse_and_format_build_date(__DATE__);
+
 		printf(PACKAGE " %s (", main_get_version_string());
 		/* note for translators: library versions are printed after this */
-		printf(_("built on %s with "), __DATE__);
+		printf(_("built on %s with "), build_date);
 		printf(geany_lib_versions,
 			GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION,
 			GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
 		printf(")\n");
+		g_free(build_date);
 		wait_for_input_on_windows();
 		exit(0);
 	}


Modified: src/utils.c
31 files changed, 31 insertions(+), 0 deletions(-)
===================================================================
@@ -52,6 +52,7 @@
 #include "win32.h"
 #include "project.h"
 #include "ui_utils.h"
+#include "templates.h"
 
 #include "utils.h"
 
@@ -2100,3 +2101,33 @@ gchar **utils_strv_join(gchar **first, gchar **second)
 	g_free(second);
 	return strv;
 }
+
+
+/* Try to parse a date using g_date_set_parse(). It doesn't take any format hint,
+ * obviously g_date_set_parse() uses some magic.
+ * The returned GDate object must be freed. */
+GDate *utils_parse_date(const gchar *input)
+{
+	GDate *date = g_date_new();
+
+	g_date_set_parse(date, input);
+
+	if (g_date_valid(date))
+		return date;
+
+	g_date_free(date);
+	return NULL;
+}
+
+
+gchar *utils_parse_and_format_build_date(const gchar *input)
+{
+	gchar date_buf[255];
+	GDate *date = utils_parse_date(input);
+
+	if (date != NULL)
+		g_date_strftime(date_buf, sizeof(date_buf), GEANY_TEMPLATES_FORMAT_DATE, date);
+		return g_strdup(date_buf);
+
+	return g_strdup(input);
+}


Modified: src/utils.h
4 files changed, 4 insertions(+), 0 deletions(-)
===================================================================
@@ -277,6 +277,10 @@ gboolean utils_spawn_async(const gchar *dir, gchar **argv, gchar **env, GSpawnFl
 
 gchar **utils_copy_environment(const gchar **exclude_vars, const gchar *first_varname, ...) G_GNUC_NULL_TERMINATED;
 
+GDate *utils_parse_date(const gchar *input);
+
+gchar *utils_parse_and_format_build_date(const gchar *input);
+
 G_END_DECLS
 
 #endif



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list