[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pspp-cvs] pspp lib/gtksheet/ChangeLog lib/gtksheet/gsheet...
From: |
John Darrington |
Subject: |
[Pspp-cvs] pspp lib/gtksheet/ChangeLog lib/gtksheet/gsheet... |
Date: |
Thu, 25 May 2006 10:29:14 +0000 |
CVSROOT: /sources/pspp
Module name: pspp
Branch:
Changes by: John Darrington <address@hidden> 06/05/25 10:29:14
Modified files:
lib/gtksheet : ChangeLog gsheet-column-iface.c
gsheet-column-iface.h gsheet-hetero-column.c
gsheet-row-iface.c gsheet-row-iface.h
gsheet-uniform-row.c gtkextra-sheet.h
gtksheet.c
src/language/data-io: ChangeLog print.c
src/output : ChangeLog table.h
src/ui/gui : ChangeLog psppire-var-store.c
tests : automake.mk
Added files:
tests/bugs : print-crash.sh
Log message:
Plugged memory leaks in GUI, and converted most of the strings to UTF8,
so that
internationalised data files are now rendered OK.
Fixed a buglet in PRINT command.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/lib/gtksheet/ChangeLog.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/lib/gtksheet/gsheet-column-iface.c.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/lib/gtksheet/gsheet-column-iface.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/lib/gtksheet/gsheet-hetero-column.c.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/lib/gtksheet/gsheet-row-iface.c.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/lib/gtksheet/gsheet-row-iface.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/lib/gtksheet/gsheet-uniform-row.c.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/lib/gtksheet/gtkextra-sheet.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/lib/gtksheet/gtksheet.c.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/language/data-io/ChangeLog.diff?tr1=1.19&tr2=1.20&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/language/data-io/print.c.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/output/ChangeLog.diff?tr1=1.9&tr2=1.10&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/output/table.h.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/ui/gui/ChangeLog.diff?tr1=1.14&tr2=1.15&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/src/ui/gui/psppire-var-store.c.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/tests/automake.mk.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/pspp/tests/bugs/print-crash.sh?rev=1.1
Patches:
Index: pspp/lib/gtksheet/ChangeLog
diff -u pspp/lib/gtksheet/ChangeLog:1.6 pspp/lib/gtksheet/ChangeLog:1.7
--- pspp/lib/gtksheet/ChangeLog:1.6 Sat May 20 13:18:27 2006
+++ pspp/lib/gtksheet/ChangeLog Thu May 25 10:29:14 2006
@@ -1,3 +1,10 @@
+Thu May 25 17:58:51 WST 2006 John Darrington <address@hidden>
+
+ * gsheet-column-iface.c gsheet-column-iface.h gsheet-hetero-column.c
+ gsheet-row-iface.c gsheet-row-iface.h gsheet-uniform-row.c
+ gtksheet-extra.h gtksheet.c: Plugged memory leaks. Rationalised the way
+ that GtkSheetButtons are created.
+
Sat May 20 21:02:03 WST 2006 John Darrington <address@hidden>
* gsheetmodel.c gsheetmodel.h: Added columns-inserted and columns-deleted
Index: pspp/lib/gtksheet/gsheet-column-iface.c
diff -u pspp/lib/gtksheet/gsheet-column-iface.c:1.2
pspp/lib/gtksheet/gsheet-column-iface.c:1.3
--- pspp/lib/gtksheet/gsheet-column-iface.c:1.2 Tue Apr 4 12:43:21 2006
+++ pspp/lib/gtksheet/gsheet-column-iface.c Thu May 25 10:29:14 2006
@@ -25,7 +25,7 @@
#include <gobject/gvaluecollector.h>
#include "gsheet-column-iface.h"
#include "gtkextra-marshal.h"
-
+#include "gtkextra-sheet.h"
enum {
COLUMNS_CHANGED,
@@ -73,8 +73,6 @@
}
-static GtkSheetButton default_button;
-
static void
g_sheet_column_base_init (gpointer g_class)
{
@@ -95,12 +93,6 @@
G_TYPE_INT);
- default_button.state = GTK_STATE_NORMAL;
- default_button.label = NULL;
- default_button.label_visible = TRUE;
- default_button.child = NULL;
- default_button.justification = GTK_JUSTIFY_FILL;
-
initialized = TRUE;
}
}
@@ -159,21 +151,20 @@
}
-inline const GtkSheetButton *
+inline GtkSheetButton *
g_sheet_column_get_button(const GSheetColumn *column,
gint col, const GtkSheet *sheet)
{
- static GtkSheetButton button ;
+ GtkSheetButton *button = gtk_sheet_button_new();
+
GSheetColumnIface *iface = G_SHEET_COLUMN_GET_IFACE (column);
g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
- memcpy(&button, &default_button, sizeof (button));
-
if ( iface->get_button_label)
- button.label = iface->get_button_label(column, col, sheet);
+ button->label = iface->get_button_label(column, col, sheet);
- return &button;
+ return button;
}
inline GtkJustification
Index: pspp/lib/gtksheet/gsheet-column-iface.h
diff -u pspp/lib/gtksheet/gsheet-column-iface.h:1.1
pspp/lib/gtksheet/gsheet-column-iface.h:1.2
--- pspp/lib/gtksheet/gsheet-column-iface.h:1.1 Sat Mar 4 01:11:56 2006
+++ pspp/lib/gtksheet/gsheet-column-iface.h Thu May 25 10:29:14 2006
@@ -71,7 +71,7 @@
GtkStateType (*get_button_state)(const GSheetColumn *geo, gint col, const
GtkSheet *);
- const gchar * (*get_button_label)(const GSheetColumn *geo, gint col, const
GtkSheet *);
+ gchar * (*get_button_label)(const GSheetColumn *geo, gint col, const
GtkSheet *);
gboolean (*get_button_visibility)(const GSheetColumn *geo,
gint col, const GtkSheet *);
const GtkSheetChild * (*get_button_child)(const GSheetColumn *geo,
@@ -99,7 +99,7 @@
gint col, const GtkSheet *sheet);
-inline const GtkSheetButton *g_sheet_column_get_button(const GSheetColumn
*gcolumn,
+inline GtkSheetButton *g_sheet_column_get_button(const GSheetColumn *gcolumn,
gint col, const GtkSheet *sheet);
inline GtkJustification g_sheet_column_get_justification(const GSheetColumn
*gcolumn, gint col, const GtkSheet *sheet);
Index: pspp/lib/gtksheet/gsheet-hetero-column.c
diff -u pspp/lib/gtksheet/gsheet-hetero-column.c:1.3
pspp/lib/gtksheet/gsheet-hetero-column.c:1.4
--- pspp/lib/gtksheet/gsheet-hetero-column.c:1.3 Sun May 7 10:11:51 2006
+++ pspp/lib/gtksheet/gsheet-hetero-column.c Thu May 25 10:29:14 2006
@@ -128,12 +128,12 @@
-static const gchar *
+static gchar *
g_sheet_hetero_column_get_button_label(const GSheetColumn *geom, gint u)
{
GSheetHeteroColumn *hg = G_SHEET_HETERO_COLUMN(geom);
- return hg->col[u].button.label;
+ return g_locale_to_utf8(hg->col[u].button.label, -1, 0, 0, 0);
}
Index: pspp/lib/gtksheet/gsheet-row-iface.c
diff -u pspp/lib/gtksheet/gsheet-row-iface.c:1.2
pspp/lib/gtksheet/gsheet-row-iface.c:1.3
--- pspp/lib/gtksheet/gsheet-row-iface.c:1.2 Tue Apr 4 12:43:21 2006
+++ pspp/lib/gtksheet/gsheet-row-iface.c Thu May 25 10:29:14 2006
@@ -154,22 +154,20 @@
}
-const GtkSheetButton *
+GtkSheetButton *
g_sheet_row_get_button(const GSheetRow *row_geo,
gint row, const GtkSheet *sheet)
{
- static GtkSheetButton button ;
+ GtkSheetButton *button = gtk_sheet_button_new();
GSheetRowIface *iface = G_SHEET_ROW_GET_IFACE (row_geo);
g_return_val_if_fail (G_IS_SHEET_ROW (row_geo), FALSE);
- memcpy(&button, &default_button, sizeof (button));
-
if ( iface->get_button_label)
- button.label = iface->get_button_label(row_geo, row, sheet);
+ button->label = iface->get_button_label(row_geo, row, sheet);
- return &button;
+ return button;
}
Index: pspp/lib/gtksheet/gsheet-row-iface.h
diff -u pspp/lib/gtksheet/gsheet-row-iface.h:1.1
pspp/lib/gtksheet/gsheet-row-iface.h:1.2
--- pspp/lib/gtksheet/gsheet-row-iface.h:1.1 Sat Mar 4 01:11:56 2006
+++ pspp/lib/gtksheet/gsheet-row-iface.h Thu May 25 10:29:14 2006
@@ -69,8 +69,8 @@
GtkStateType (*get_button_state)(const GSheetRow *geo, gint row,
const GtkSheet *);
- const gchar * (*get_button_label)(const GSheetRow *geo, gint row,
- const GtkSheet *);
+ gchar * (*get_button_label)(const GSheetRow *geo, gint row,
+ const GtkSheet *);
gboolean (*get_button_visibility)(const GSheetRow *geo,
gint row, const GtkSheet *);
@@ -101,7 +101,7 @@
gint row, const GtkSheet *sheet);
-const GtkSheetButton *g_sheet_row_get_button(const GSheetRow *grow,
+GtkSheetButton *g_sheet_row_get_button(const GSheetRow *grow,
gint row, const GtkSheet *sheet);
Index: pspp/lib/gtksheet/gsheet-uniform-row.c
diff -u pspp/lib/gtksheet/gsheet-uniform-row.c:1.2
pspp/lib/gtksheet/gsheet-uniform-row.c:1.3
--- pspp/lib/gtksheet/gsheet-uniform-row.c:1.2 Sun May 7 10:11:51 2006
+++ pspp/lib/gtksheet/gsheet-uniform-row.c Thu May 25 10:29:14 2006
@@ -123,9 +123,7 @@
static const gchar *
g_sheet_uniform_row_get_button_label(const GSheetRow *geom, gint u)
{
- static gchar *label;
- g_free(label);
- label = g_strdup_printf("%d", u);
+ gchar *label = g_strdup_printf("%d", u);
return label;
}
Index: pspp/lib/gtksheet/gtkextra-sheet.h
diff -u pspp/lib/gtksheet/gtkextra-sheet.h:1.1
pspp/lib/gtksheet/gtkextra-sheet.h:1.2
--- pspp/lib/gtksheet/gtkextra-sheet.h:1.1 Sat Mar 4 01:11:56 2006
+++ pspp/lib/gtksheet/gtkextra-sheet.h Thu May 25 10:29:14 2006
@@ -68,6 +68,9 @@
+GtkSheetButton * gtk_sheet_button_new(void);
+
+inline void gtk_sheet_button_free(GtkSheetButton *button);
#endif /* __GTK_EXTRA_SHEET_H__ */
Index: pspp/lib/gtksheet/gtksheet.c
diff -u pspp/lib/gtksheet/gtksheet.c:1.7 pspp/lib/gtksheet/gtksheet.c:1.8
--- pspp/lib/gtksheet/gtksheet.c:1.7 Sat May 20 13:18:28 2006
+++ pspp/lib/gtksheet/gtksheet.c Thu May 25 10:29:14 2006
@@ -260,7 +260,7 @@
return (yyy_row_ypixel_to_row(sheet, y));
}
-static inline const GtkSheetButton *
+static inline GtkSheetButton *
xxx_column_button(GtkSheet *sheet, gint col)
{
GSheetColumn *col_geo = sheet->column_geometry;
@@ -408,7 +408,7 @@
}
-static inline const GtkSheetButton *
+static inline GtkSheetButton *
yyy_row_button(GtkSheet *sheet, gint row)
{
GSheetRow *row_geo = sheet->row_geometry;
@@ -1807,10 +1807,11 @@
col <= MAX_VISIBLE_COLUMN(sheet);
col++)
{
- const GtkSheetButton *button = xxx_column_button(sheet, col);
+ GtkSheetButton *button = xxx_column_button(sheet, col);
GtkSheetChild *child = button->child;
if(child)
gtk_sheet_child_show(child);
+ gtk_sheet_button_free(button);
}
adjust_scrollbars(sheet);
}
@@ -1881,10 +1882,11 @@
col <= MAX_VISIBLE_COLUMN(sheet);
col++)
{
- const GtkSheetButton *button = xxx_column_button(sheet, col);
+ GtkSheetButton *button = xxx_column_button(sheet, col);
GtkSheetChild *child = button->child;
if(child)
gtk_sheet_child_hide(child);
+ gtk_sheet_button_free(button);
}
adjust_scrollbars(sheet);
}
@@ -6248,6 +6250,7 @@
gint sizel=0, sizer=0;
gint row,col;
GtkJustification justification;
+ gchar *s = NULL;
row=sheet->active_cell.row;
col=sheet->active_cell.col;
@@ -6260,34 +6263,52 @@
case GTK_JUSTIFY_FILL:
case GTK_JUSTIFY_LEFT:
for(i=col+1; i<=MAX_VISIBLE_COLUMN(sheet); i++){
- if(gtk_sheet_cell_get_text(sheet, row, i)) break;
+ if((s = gtk_sheet_cell_get_text(sheet, row, i)))
+ {
+ g_free(s);
+ break;
+ }
size+=xxx_column_width(sheet, i);
}
size = MIN(size, sheet->sheet_window_width - COLUMN_LEFT_XPIXEL(sheet,
col));
break;
- case GTK_JUSTIFY_RIGHT:
- for(i=col-1; i>=MIN_VISIBLE_COLUMN(sheet); i--){
- if(gtk_sheet_cell_get_text(sheet, row, i)) break;
- size+=xxx_column_width(sheet, i);
- }
+ case GTK_JUSTIFY_RIGHT:
+ for(i=col-1; i>=MIN_VISIBLE_COLUMN(sheet); i--)
+ {
+ if((s = gtk_sheet_cell_get_text(sheet, row, i)))
+ {
+ g_free(s);
+ break;
+ }
+ size+=xxx_column_width(sheet, i);
+ }
break;
case GTK_JUSTIFY_CENTER:
for(i=col+1; i<=MAX_VISIBLE_COLUMN(sheet); i++){
-/* if(gtk_sheet_cell_get_text(sheet, row, i)) break;
+/* if((s = gtk_sheet_cell_get_text(sheet, row, i)))
+ {
+ g_free(s);
+ break;
+ }
*/
sizer+=xxx_column_width(sheet, i);
}
- for(i=col-1; i>=MIN_VISIBLE_COLUMN(sheet); i--){
- if(gtk_sheet_cell_get_text(sheet, row, i)) break;
- sizel+=xxx_column_width(sheet, i);
- }
+ for(i=col-1; i>=MIN_VISIBLE_COLUMN(sheet); i--)
+ {
+ if((s = gtk_sheet_cell_get_text(sheet, row, i)))
+ {
+ g_free(s);
+ break;
+ }
+ sizel+=xxx_column_width(sheet, i);
+ }
size=2*MIN(sizel, sizer);
break;
}
- if(size!=0) size+=xxx_column_width(sheet, col);
- GTK_ITEM_ENTRY(sheet->sheet_entry)->text_max_size=size;
-
+ if(size != 0)
+ size += xxx_column_width(sheet, col);
+ GTK_ITEM_ENTRY(sheet->sheet_entry)->text_max_size = size;
}
static void
@@ -6467,7 +6488,7 @@
gint x = 0, y = 0;
gint index = 0;
gint text_width = 0, text_height = 0;
- const GtkSheetButton *button = NULL;
+ GtkSheetButton *button = NULL;
GtkSheetChild *child = NULL;
GdkRectangle allocation;
gboolean is_sensitive = FALSE;
@@ -6642,6 +6663,8 @@
gtk_widget_queue_draw(child->widget);
}
}
+
+ gtk_sheet_button_free(button);
}
@@ -7886,3 +7909,25 @@
return sheet->model;
}
+
+GtkSheetButton *
+gtk_sheet_button_new(void)
+{
+ GtkSheetButton *button = g_slice_new(GtkSheetButton);
+
+ button->state = GTK_STATE_NORMAL;
+ button->label = NULL;
+ button->label_visible = TRUE;
+ button->child = NULL;
+ button->justification = GTK_JUSTIFY_FILL;
+
+ return button;
+}
+
+
+inline void
+gtk_sheet_button_free(GtkSheetButton *button)
+{
+ g_free(button->label);
+ g_slice_free(GtkSheetButton, button);
+}
Index: pspp/src/language/data-io/ChangeLog
diff -u pspp/src/language/data-io/ChangeLog:1.19
pspp/src/language/data-io/ChangeLog:1.20
--- pspp/src/language/data-io/ChangeLog:1.19 Wed May 10 03:56:04 2006
+++ pspp/src/language/data-io/ChangeLog Thu May 25 10:29:14 2006
@@ -1,3 +1,9 @@
+Thu May 25 18:26:26 WST 2006 John Darrington <address@hidden>
+
+ * print.c (print_trns_free): Made the code agree with the comment, by
+ not freeing PRT. Has the side effect that the command no longer
+ crashes on invalid syntax.
+
Tue May 9 20:55:46 2006 Ben Pfaff <address@hidden>
* get.c (cmd_match_files): Fix memory leak replacing default_dict.
Index: pspp/src/language/data-io/print.c
diff -u pspp/src/language/data-io/print.c:1.7
pspp/src/language/data-io/print.c:1.8
--- pspp/src/language/data-io/print.c:1.7 Fri May 5 04:53:12 2006
+++ pspp/src/language/data-io/print.c Thu May 25 10:29:14 2006
@@ -141,7 +141,7 @@
internal_cmd_print (int f)
{
int table = 0; /* Print table? */
- struct print_trns *trns; /* malloc()'d transformation. */
+ struct print_trns *trns = NULL; /* malloc()'d transformation. */
struct file_handle *fh = NULL;
/* Fill in prt to facilitate error-handling. */
@@ -966,7 +966,7 @@
return TRNS_CONTINUE;
}
-/* Frees all the data inside print_trns T. Does not free T. */
+/* Frees all the data inside print_trns PRT. Does not free PRT. */
static bool
print_trns_free (void *prt_)
{
@@ -996,7 +996,6 @@
if (prt->writer != NULL)
ok = dfm_close_writer (prt->writer);
free (prt->line);
- free (prt);
return ok;
}
Index: pspp/src/output/ChangeLog
diff -u pspp/src/output/ChangeLog:1.9 pspp/src/output/ChangeLog:1.10
--- pspp/src/output/ChangeLog:1.9 Sun May 14 21:05:13 2006
+++ pspp/src/output/ChangeLog Thu May 25 10:29:14 2006
@@ -1,3 +1,7 @@
+Thu May 25 18:02:53 WST 2006 John Darrington <address@hidden>
+
+ * table.c: Removed redundant extern declaration.
+
Sun May 14 14:03:56 2006 Ben Pfaff <address@hidden>
* output.c (outp_eject_page): Always make sure that a page is open
Index: pspp/src/output/table.h
diff -u pspp/src/output/table.h:1.4 pspp/src/output/table.h:1.5
--- pspp/src/output/table.h:1.4 Mon Apr 3 20:07:54 2006
+++ pspp/src/output/table.h Thu May 25 10:29:14 2006
@@ -102,8 +102,6 @@
int col_ofs, row_ofs; /* X and Y offsets. */
};
-extern int tab_hit;
-
/* Number of rows in TABLE. */
#define tab_nr(TABLE) ((TABLE)->nr)
Index: pspp/src/ui/gui/ChangeLog
diff -u pspp/src/ui/gui/ChangeLog:1.14 pspp/src/ui/gui/ChangeLog:1.15
--- pspp/src/ui/gui/ChangeLog:1.14 Sat May 20 13:18:28 2006
+++ pspp/src/ui/gui/ChangeLog Thu May 25 10:29:14 2006
@@ -1,3 +1,8 @@
+Thu May 25 18:01:17 WST 2006 John Darrington <address@hidden>
+
+ * psppire-var-store.c: Converted strings to utf8 and returned them on the
+ heap.
+
Sat May 20 21:08:18 WST 2006 John Darrington <address@hidden>
* data-sheet.c, menu-actions.c menu-actions: Fixed data sheet so that
Index: pspp/src/ui/gui/psppire-var-store.c
diff -u pspp/src/ui/gui/psppire-var-store.c:1.6
pspp/src/ui/gui/psppire-var-store.c:1.7
--- pspp/src/ui/gui/psppire-var-store.c:1.6 Sun May 14 00:01:39 2006
+++ pspp/src/ui/gui/psppire-var-store.c Thu May 25 10:29:14 2006
@@ -49,7 +49,7 @@
static void psppire_var_store_sheet_model_init (GSheetModelIface
*iface);
static void psppire_var_store_finalize (GObject
*object);
-static const gchar *psppire_var_store_get_string(GSheetModel *sheet_model,
gint row, gint column);
+static gchar *psppire_var_store_get_string(GSheetModel *sheet_model, gint row,
gint column);
static gboolean psppire_var_store_clear(GSheetModel *model, gint row, gint
col);
@@ -58,7 +58,7 @@
const gchar *text, gint row, gint
column);
-static const gchar *text_for_column(const struct PsppireVariable *pv, gint c);
+static gchar *text_for_column(const struct PsppireVariable *pv, gint c, GError
**err);
static GObjectClass *parent_class = NULL;
@@ -297,11 +297,9 @@
(* parent_class->finalize) (object);
}
-static const gchar *
+static gchar *
psppire_var_store_get_string(GSheetModel *model, gint row, gint column)
{
- const gchar *s ;
-
PsppireVarStore *store = PSPPIRE_VAR_STORE(model);
struct PsppireVariable *pv;
@@ -311,9 +309,7 @@
pv = psppire_dict_get_variable (store->dict, row);
- s = text_for_column(pv, column);
-
- return pspp_locale_to_utf8(s, -1, 0);
+ return text_for_column(pv, column, 0);
}
@@ -416,13 +412,9 @@
}
-#define MAX_CELL_TEXT_LEN 255
-
-static const gchar *
-text_for_column(const struct PsppireVariable *pv, gint c)
+static gchar *
+text_for_column(const struct PsppireVariable *pv, gint c, GError **err)
{
- static gchar buf[MAX_CELL_TEXT_LEN];
-
static gchar none[]=_("None");
static const gchar *const type_label[] =
@@ -444,23 +436,23 @@
switch (c)
{
case COL_NAME:
- return psppire_variable_get_name(pv);
+ return pspp_locale_to_utf8(psppire_variable_get_name(pv), -1, err);
break;
case COL_TYPE:
{
switch ( write_spec->type )
{
case FMT_F:
- return type_label[VT_NUMERIC];
+ return g_locale_to_utf8(type_label[VT_NUMERIC], -1, 0, 0, err);
break;
case FMT_COMMA:
- return type_label[VT_COMMA];
+ return g_locale_to_utf8(type_label[VT_COMMA], -1, 0, 0, err);
break;
case FMT_DOT:
- return type_label[VT_DOT];
+ return g_locale_to_utf8(type_label[VT_DOT], -1, 0, 0, err);
break;
case FMT_E:
- return type_label[VT_SCIENTIFIC];
+ return g_locale_to_utf8(type_label[VT_SCIENTIFIC], -1, 0, 0, err);
break;
case FMT_DATE:
case FMT_EDATE:
@@ -475,20 +467,20 @@
case FMT_DTIME:
case FMT_WKDAY:
case FMT_MONTH:
- return type_label[VT_DATE];
+ return g_locale_to_utf8(type_label[VT_DATE], -1, 0, 0, err);
break;
case FMT_DOLLAR:
- return type_label[VT_DOLLAR];
+ return g_locale_to_utf8(type_label[VT_DOLLAR], -1, 0, 0, err);
break;
case FMT_CCA:
case FMT_CCB:
case FMT_CCC:
case FMT_CCD:
case FMT_CCE:
- return type_label[VT_CUSTOM];
+ return g_locale_to_utf8(type_label[VT_CUSTOM], -1, 0, 0, err);
break;
case FMT_A:
- return type_label[VT_STRING];
+ return g_locale_to_utf8(type_label[VT_STRING], -1, 0, 0, err);
break;
default:
g_warning("Unknown format: \"%s\"\n",
@@ -499,93 +491,109 @@
break;
case COL_WIDTH:
{
- g_snprintf(buf, MAX_CELL_TEXT_LEN, "%d", write_spec->w);
- return buf;
+ gchar *s;
+ GString *gstr = g_string_sized_new(10);
+ g_string_printf(gstr, "%d", write_spec->w);
+ s = g_locale_to_utf8(gstr->str, gstr->len, 0, 0, err);
+ g_string_free(gstr, TRUE);
+ return s;
}
break;
case COL_DECIMALS:
{
- g_snprintf(buf, MAX_CELL_TEXT_LEN, "%d", write_spec->d);
- return buf;
+ gchar *s;
+ GString *gstr = g_string_sized_new(10);
+ g_string_printf(gstr, "%d", write_spec->d);
+ s = g_locale_to_utf8(gstr->str, gstr->len, 0, 0, err);
+ g_string_free(gstr, TRUE);
+ return s;
}
break;
case COL_COLUMNS:
{
- g_snprintf(buf, MAX_CELL_TEXT_LEN,
- "%d", psppire_variable_get_columns(pv));
- return buf;
+ gchar *s;
+ GString *gstr = g_string_sized_new(10);
+ g_string_printf(gstr, "%d", psppire_variable_get_columns(pv));
+ s = g_locale_to_utf8(gstr->str, gstr->len, 0, 0, err);
+ g_string_free(gstr, TRUE);
+ return s;
}
break;
case COL_LABEL:
- return psppire_variable_get_label(pv);
+ return g_locale_to_utf8(psppire_variable_get_label(pv), -1, 0, 0, err);
break;
+
case COL_MISSING:
{
- const struct missing_values *miss = psppire_variable_get_missing(pv);
- if ( mv_is_empty(miss))
- return none;
- else
- {
- if ( ! mv_has_range (miss))
- {
- const int n = mv_n_values(miss);
- gchar *mv[4] = {0,0,0,0};
- gint i;
- for(i = 0 ; i < n; ++i )
- {
- union value v;
- mv_peek_value(miss, &v, i);
- mv[i] = value_to_text(v, *write_spec);
- }
- g_stpcpy(buf, "");
- for(i = 0 ; i < n; ++i )
- {
- if ( i > 0)
- g_strlcat(buf, ", ", MAX_CELL_TEXT_LEN);
- g_strlcat(buf, mv[i], MAX_CELL_TEXT_LEN);
- g_free(mv[i]);
- }
- }
- else
- {
- gchar *l, *h;
- union value low, high;
- mv_peek_range(miss, &low.f, &high.f);
+ gchar *s;
+ const struct missing_values *miss = psppire_variable_get_missing(pv);
+ if ( mv_is_empty(miss))
+ return g_locale_to_utf8(none, -1, 0, 0, err);
+ else
+ {
+ if ( ! mv_has_range (miss))
+ {
+ GString *gstr = g_string_sized_new(10);
+ const int n = mv_n_values(miss);
+ gchar *mv[4] = {0,0,0,0};
+ gint i;
+ for(i = 0 ; i < n; ++i )
+ {
+ union value v;
+ mv_peek_value(miss, &v, i);
+ mv[i] = value_to_text(v, *write_spec);
+ if ( i > 0 )
+ g_string_append(gstr, ", ");
+ g_string_append(gstr, mv[i]);
+ g_free(mv[i]);
+ }
+ s = pspp_locale_to_utf8(gstr->str, gstr->len, err);
+ g_string_free(gstr, TRUE);
+ }
+ else
+ {
+ GString *gstr = g_string_sized_new(10);
+ gchar *l, *h;
+ union value low, high;
+ mv_peek_range(miss, &low.f, &high.f);
- l = value_to_text(low, *write_spec);
- h = value_to_text(high, *write_spec);
+ l = value_to_text(low, *write_spec);
+ h = value_to_text(high, *write_spec);
- g_snprintf(buf, MAX_CELL_TEXT_LEN, "%s - %s", l, h);
- g_free(l);
- g_free(h);
-
- if ( mv_has_value(miss))
- {
- gchar buf2[MAX_CELL_TEXT_LEN];
- gchar *s = 0;
- union value v;
- mv_peek_value(miss, &v, 0);
-
- s = value_to_text(v, *write_spec);
-
- g_snprintf(buf2, MAX_CELL_TEXT_LEN, "%s, %s", buf, s);
- free(s);
- g_stpcpy(buf, buf2);
- }
- }
+ g_string_printf(gstr, "%s - %s", l, h);
+ g_free(l);
+ g_free(h);
+
+ if ( mv_has_value(miss))
+ {
+ gchar *ss = 0;
+ union value v;
+ mv_peek_value(miss, &v, 0);
+
+ ss = value_to_text(v, *write_spec);
+
+ g_string_append(gstr, ", ");
+ g_string_append(gstr, ss);
+ free(ss);
+ }
+ s = pspp_locale_to_utf8(gstr->str, gstr->len, err);
+ g_string_free(gstr, TRUE);
+ }
- return buf;
- }
+ return s;
+ }
}
break;
case COL_VALUES:
{
const struct val_labs *vls = psppire_variable_get_value_labels(pv);
- if ( ! vls || 0 == val_labs_count(vls))
- return none;
+ if ( ! vls || 0 == val_labs_count(vls) )
+ return g_locale_to_utf8(none, -1, 0, 0, err);
else
{
- struct val_labs_iterator *ip=0;
+ gchar *ss;
+ GString *gstr = g_string_sized_new(10);
+ struct val_labs_iterator *ip = 0;
struct val_lab *vl = val_labs_first_sorted (vls, &ip);
g_assert(vl);
@@ -593,22 +601,27 @@
{
gchar *const vstr = value_to_text(vl->value, *write_spec);
- g_snprintf(buf, MAX_CELL_TEXT_LEN, "{%s,\"%s\"}_", vstr,
vl->label);
+ g_string_printf(gstr, "{%s,\"%s\"}_", vstr, vl->label);
g_free(vstr);
}
val_labs_done(&ip);
-
- return buf;
+
+ ss = pspp_locale_to_utf8(gstr->str, gstr->len, err);
+ g_string_free(gstr, TRUE);
+ return ss;
}
}
break;
case COL_ALIGN:
- return alignments[psppire_variable_get_alignment(pv)];
+ return g_locale_to_utf8(alignments[psppire_variable_get_alignment(pv)],
+ -1, -0, 0, err);
break;
case COL_MEASURE:
- return measures[psppire_variable_get_measure(pv)];
+ return g_locale_to_utf8(measures[psppire_variable_get_measure(pv)],
+ -1, -0, 0, err);
break;
+
}
return 0;
}
@@ -636,3 +649,4 @@
+
Index: pspp/tests/automake.mk
diff -u pspp/tests/automake.mk:1.5 pspp/tests/automake.mk:1.6
--- pspp/tests/automake.mk:1.5 Thu May 4 06:41:49 2006
+++ pspp/tests/automake.mk Thu May 25 10:29:14 2006
@@ -91,6 +91,7 @@
tests/bugs/computebug.sh \
tests/bugs/compute-lv.sh \
tests/bugs/temp-freq.sh \
+ tests/bugs/print-crash.sh \
tests/xforms/casefile.sh \
tests/stats/descript-basic.sh \
tests/stats/descript-missing.sh \