char *gtr_localtime2(char *buf, time_t time, size_t buflen) { char *tmp = gtr_localtime(time); g_strlcpy(buf, tmp, buflen); g_free(tmp); return buf; }
static void doSave (GtkWindow * parent, struct MsgData * data, const char * filename) { FILE * fp = fopen (filename, "w+"); if (!fp) { GtkWidget * w = gtk_message_dialog_new (parent, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Couldn't save \"%s\""), filename); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (w), "%s", g_strerror (errno)); g_signal_connect_swapped (w, "response", G_CALLBACK (gtk_widget_destroy), w); gtk_widget_show (w); } else { GtkTreeIter iter; GtkTreeModel * model = GTK_TREE_MODEL (data->sort); if (gtk_tree_model_iter_children (model, &iter, NULL)) do { char * date; const char * levelStr; const struct tr_log_message * node; gtk_tree_model_get (model, &iter, COL_TR_MSG, &node, -1); date = gtr_localtime (node->when); switch (node->level) { case TR_LOG_DEBUG: levelStr = "debug"; break; case TR_LOG_ERROR: levelStr = "error"; break; default: levelStr = " "; break; } fprintf (fp, "%s\t%s\t%s\t%s\n", date, levelStr, (node->name ? node->name : ""), (node->message ? node->message : "")); g_free (date); } while (gtk_tree_model_iter_next (model, &iter)); fclose (fp); } }