[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 08/11] psppire-dict: Get rid of static var in auto_generate_var_n
From: |
Ben Pfaff |
Subject: |
[PATCH 08/11] psppire-dict: Get rid of static var in auto_generate_var_name(). |
Date: |
Sun, 15 Apr 2012 16:58:30 -0700 |
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 | 52 ++++++++++++++++++++++++++++----------------
1 files changed, 33 insertions(+), 19 deletions(-)
diff --git a/src/ui/gui/psppire-dict.c b/src/ui/gui/psppire-dict.c
index ea67c85..b3a2483 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;
--
1.7.2.5
- [PATCH 00/11] first batch of psppsheet changes, Ben Pfaff, 2012/04/15
- [PATCH 01/11] psppire-data-editor: Drop psppire_data_editor_set_font() redundancy., Ben Pfaff, 2012/04/15
- [PATCH 04/11] psppire-buttonbox: Fix style in header file., Ben Pfaff, 2012/04/15
- [PATCH 03/11] psppire-data-store: Use NULL for a null pointer., Ben Pfaff, 2012/04/15
- [PATCH 02/11] psppire-data-store: Use PSPPIRE namespace instead of GTK+'s., Ben Pfaff, 2012/04/15
- [PATCH 06/11] find-dialog: Change "Cancel" button to "Close" button., Ben Pfaff, 2012/04/15
- [PATCH 05/11] gtkxpaned: Remove write-only variables., Ben Pfaff, 2012/04/15
- [PATCH 08/11] psppire-dict: Get rid of static var in auto_generate_var_name().,
Ben Pfaff <=
- [PATCH 07/11] Allow dictionary 'var_deleted' callback to examine the deleted var., Ben Pfaff, 2012/04/15
- [PATCH 09/11] psppire-dict: Make auto_generate_var_name() public, and rename., Ben Pfaff, 2012/04/15
- [PATCH 10/11] psppire-dict: Return new var from psppire_dict_insert_variable()., Ben Pfaff, 2012/04/15
- [PATCH 11/11] psppire-dict: Better validate idx arg in psppire_dict_get_variable()., Ben Pfaff, 2012/04/15
- Re: [PATCH 00/11] first batch of psppsheet changes, John Darrington, 2012/04/16