33 *
44 * Copyright (c) 2000-2006, PostgreSQL Global Development Group
55 *
6- * $PostgreSQL: pgsql/src/bin/psql/variables.c,v 1.24 2006/06/14 16:49:03 tgl Exp $
6+ * $PostgreSQL: pgsql/src/bin/psql/variables.c,v 1.25 2006/06/21 16:05:11 tgl Exp $
77 */
88#include "postgres_fe.h"
99#include "common.h"
@@ -29,15 +29,13 @@ GetVariable(VariableSpace space, const char *name)
2929if (!space )
3030return NULL ;
3131
32- if (strspn (name ,VALID_VARIABLE_CHARS )!= strlen (name ))
33- return NULL ;
34-
35- for (current = space ;current ;current = current -> next )
32+ for (current = space -> next ;current ;current = current -> next )
3633{
37- psql_assert (current -> name );
38- psql_assert (current -> value );
3934if (strcmp (current -> name ,name )== 0 )
35+ {
36+ psql_assert (current -> value );
4037return current -> value ;
38+ }
4139}
4240
4341return NULL ;
@@ -126,6 +124,9 @@ PrintVariables(VariableSpace space)
126124{
127125struct _variable * ptr ;
128126
127+ if (!space )
128+ return ;
129+
129130for (ptr = space -> next ;ptr ;ptr = ptr -> next )
130131{
131132printf ("%s = '%s'\n" ,ptr -> name ,ptr -> value );
@@ -143,18 +144,19 @@ SetVariable(VariableSpace space, const char *name, const char *value)
143144if (!space )
144145return false;
145146
146- if (!value )
147- return DeleteVariable (space ,name );
148-
149147if (strspn (name ,VALID_VARIABLE_CHARS )!= strlen (name ))
150148return false;
151149
152- for (current = space ,previous = NULL ;current ;previous = current ,current = current -> next )
150+ if (!value )
151+ return DeleteVariable (space ,name );
152+
153+ for (previous = space ,current = space -> next ;
154+ current ;
155+ previous = current ,current = current -> next )
153156{
154- psql_assert (current -> name );
155- psql_assert (current -> value );
156157if (strcmp (current -> name ,name )== 0 )
157158{
159+ psql_assert (current -> value );
158160free (current -> value );
159161current -> value = pg_strdup (value );
160162return true;
@@ -182,19 +184,16 @@ DeleteVariable(VariableSpace space, const char *name)
182184if (!space )
183185return false;
184186
185- if (strspn (name ,VALID_VARIABLE_CHARS )!= strlen (name ))
186- return false;
187-
188- for (current = space ,previous = NULL ;current ;previous = current ,current = current -> next )
187+ for (previous = space ,current = space -> next ;
188+ current ;
189+ previous = current ,current = current -> next )
189190{
190- psql_assert (current -> name );
191- psql_assert (current -> value );
192191if (strcmp (current -> name ,name )== 0 )
193192{
193+ psql_assert (current -> value );
194+ previous -> next = current -> next ;
194195free (current -> name );
195196free (current -> value );
196- if (previous )
197- previous -> next = current -> next ;
198197free (current );
199198return true;
200199}