From 9b55c770e627dd87c84ef64d8589a80fdf6b7431 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Tue, 20 Mar 2012 21:18:32 -0700 Subject: [PATCH] psppire-dict: Get rid of static var in auto_generate_var_name(). This isn't a big deal at the moment but I intend to add new users of this function in future commits, so then it becomes more important. --- src/ui/gui/psppire-dict.c | 50 +++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/src/ui/gui/psppire-dict.c b/src/ui/gui/psppire-dict.c index ea67c85ce5..b3a2483858 100644 --- a/src/ui/gui/psppire-dict.c +++ b/src/ui/gui/psppire-dict.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2004, 2006, 2007, 2009, 2010, 2011 Free Software Foundation + Copyright (C) 2004, 2006, 2007, 2009, 2010, 2011, 2012 Free Software Foundation This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -350,24 +350,31 @@ psppire_dict_replace_dictionary (PsppireDict *dict, struct dictionary *d) } -/* Returns a valid name for a new variable in DICT. - The return value is statically allocated */ -static gchar * -auto_generate_var_name (PsppireDict *dict) +/* Stores a valid name for a new variable in DICT into the SIZE bytes in NAME. + Returns true if successful, false if SIZE is insufficient. */ +static bool +auto_generate_var_name (const PsppireDict *dict, char *name, size_t size) { - gint d = 0; - static gchar name[10]; + gint d; - /* TRANSLATORS: This string must be a valid variable name. That means: - - The string must be at most 64 bytes (not characters) long. - - The string may not contain whitespace. - - The first character may not be '$' - - The first character may not be a digit - - The final charactor may not be '.' or '_' - */ - while (g_snprintf (name, 10, _("VAR%05d"), d++), - psppire_dict_lookup_var (dict, name)) - ; + for (d = 1; ; d++) + { + int len; + + /* TRANSLATORS: This string must be a valid variable name. That means: + - The string must be at most 64 bytes (not characters) long. + - The string may not contain whitespace. + - The first character may not be '$' + - The first character may not be a digit + - The final charactor may not be '.' or '_' + */ + len = snprintf (name, size, _("Var%04d"), d); + if (len + 1 >= size) + return false; + + if (psppire_dict_lookup_var (dict, name) == NULL) + return true; + } return name; } @@ -379,12 +386,19 @@ void psppire_dict_insert_variable (PsppireDict *d, gint idx, const gchar *name) { struct variable *var ; + char tmpname[64]; + g_return_if_fail (idx >= 0); g_return_if_fail (d); g_return_if_fail (PSPPIRE_IS_DICT (d)); if ( ! name ) - name = auto_generate_var_name (d); + { + if (!auto_generate_var_name (d, tmpname, sizeof tmpname)) + g_return_if_reached (); + + name = tmpname; + } d->disable_insert_signal = TRUE; -- 2.30.2