Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
ab50ed8f
Commit
ab50ed8f
authored
Jul 05, 2004
by
Tom Lane
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix unchecked mallocs/strdups added by recent placeholder-config-vars
patch. Thomas Hallgren
parent
1fcaceea
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
116 additions
and
87 deletions
+116
-87
src/backend/utils/misc/guc.c
src/backend/utils/misc/guc.c
+116
-87
No files found.
src/backend/utils/misc/guc.c
View file @
ab50ed8f
...
@@ -10,7 +10,7 @@
...
@@ -10,7 +10,7 @@
* Written by Peter Eisentraut <peter_e@gmx.net>.
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
*
* IDENTIFICATION
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.21
2 2004/07/01 00:51:2
4 tgl Exp $
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.21
3 2004/07/05 23:14:1
4 tgl Exp $
*
*
*--------------------------------------------------------------------
*--------------------------------------------------------------------
*/
*/
...
@@ -1608,7 +1608,7 @@ static struct config_string ConfigureNamesString[] =
...
@@ -1608,7 +1608,7 @@ static struct config_string ConfigureNamesString[] =
gettext_noop
(
"Sets the target for log output."
),
gettext_noop
(
"Sets the target for log output."
),
gettext_noop
(
"Valid values are combinations of stderr, syslog "
gettext_noop
(
"Valid values are combinations of stderr, syslog "
"and eventlog, depending on platform."
),
"and eventlog, depending on platform."
),
GUC_LIST_INPUT
|
GUC_REPORT
GUC_LIST_INPUT
},
},
&
log_destination_string
,
&
log_destination_string
,
"stderr"
,
assign_log_destination
,
NULL
"stderr"
,
assign_log_destination
,
NULL
...
@@ -1749,6 +1749,49 @@ static void ReportGUCOption(struct config_generic * record);
...
@@ -1749,6 +1749,49 @@ static void ReportGUCOption(struct config_generic * record);
static
char
*
_ShowOption
(
struct
config_generic
*
record
);
static
char
*
_ShowOption
(
struct
config_generic
*
record
);
/*
* Some infrastructure for checking malloc/strdup/realloc calls
*/
static
void
*
guc_malloc
(
int
elevel
,
size_t
size
)
{
void
*
data
;
data
=
malloc
(
size
);
if
(
data
==
NULL
)
ereport
(
elevel
,
(
errcode
(
ERRCODE_OUT_OF_MEMORY
),
errmsg
(
"out of memory"
)));
return
data
;
}
static
void
*
guc_realloc
(
int
elevel
,
void
*
old
,
size_t
size
)
{
void
*
data
;
data
=
realloc
(
old
,
size
);
if
(
data
==
NULL
)
ereport
(
elevel
,
(
errcode
(
ERRCODE_OUT_OF_MEMORY
),
errmsg
(
"out of memory"
)));
return
data
;
}
static
char
*
guc_strdup
(
int
elevel
,
const
char
*
src
)
{
char
*
data
;
data
=
strdup
(
src
);
if
(
data
==
NULL
)
ereport
(
elevel
,
(
errcode
(
ERRCODE_OUT_OF_MEMORY
),
errmsg
(
"out of memory"
)));
return
data
;
}
/*
/*
* Support for assigning to a field of a string GUC item. Free the prior
* Support for assigning to a field of a string GUC item. Free the prior
* value if it's not referenced anywhere else in the item (including stacked
* value if it's not referenced anywhere else in the item (including stacked
...
@@ -1860,11 +1903,7 @@ build_guc_variables(void)
...
@@ -1860,11 +1903,7 @@ build_guc_variables(void)
size_vars
=
num_vars
+
num_vars
/
4
;
size_vars
=
num_vars
+
num_vars
/
4
;
guc_vars
=
(
struct
config_generic
**
)
guc_vars
=
(
struct
config_generic
**
)
malloc
(
size_vars
*
sizeof
(
struct
config_generic
*
));
guc_malloc
(
FATAL
,
size_vars
*
sizeof
(
struct
config_generic
*
));
if
(
!
guc_vars
)
ereport
(
FATAL
,
(
errcode
(
ERRCODE_OUT_OF_MEMORY
),
errmsg
(
"out of memory"
)));
num_vars
=
0
;
num_vars
=
0
;
...
@@ -1923,51 +1962,65 @@ is_custom_class(const char *name, int dotPos)
...
@@ -1923,51 +1962,65 @@ is_custom_class(const char *name, int dotPos)
* Add a new GUC variable to the list of known variables. The
* Add a new GUC variable to the list of known variables. The
* list is expanded if needed.
* list is expanded if needed.
*/
*/
static
void
static
bool
add_guc_variable
(
struct
config_generic
*
var
)
add_guc_variable
(
struct
config_generic
*
var
,
int
elevel
)
{
{
if
(
num_guc_variables
+
1
>=
size_guc_variables
)
if
(
num_guc_variables
+
1
>=
size_guc_variables
)
{
{
/* Increase the vector
with 20
%
/* Increase the vector
by 25
%
*/
*/
int
size_vars
=
size_guc_variables
+
size_guc_variables
/
4
;
int
size_vars
=
size_guc_variables
+
size_guc_variables
/
4
;
struct
config_generic
**
guc_vars
;
struct
config_generic
**
guc_vars
;
if
(
size_vars
==
0
)
if
(
size_vars
==
0
)
{
size_vars
=
100
;
size_vars
=
100
;
guc_vars
=
(
struct
config_generic
**
)
guc_vars
=
(
struct
config_generic
**
)
guc_malloc
(
elevel
,
size_vars
*
sizeof
(
struct
config_generic
*
));
malloc
(
size_vars
*
sizeof
(
struct
config_generic
*
));
}
else
if
(
guc_variables
!=
NULL
)
{
{
memcpy
(
guc_vars
,
guc_variables
,
guc_vars
=
(
struct
config_generic
**
)
num_guc_variables
*
sizeof
(
struct
config_generic
*
));
guc_realloc
(
elevel
,
guc_variables
,
size_vars
*
sizeof
(
struct
config_generic
*
));
free
(
guc_variables
);
}
}
if
(
guc_vars
==
NULL
)
return
false
;
/* out of memory */
guc_variables
=
guc_vars
;
guc_variables
=
guc_vars
;
size_guc_variables
=
size_vars
;
size_guc_variables
=
size_vars
;
}
}
guc_variables
[
num_guc_variables
++
]
=
var
;
guc_variables
[
num_guc_variables
++
]
=
var
;
qsort
((
void
*
)
guc_variables
,
num_guc_variables
,
qsort
((
void
*
)
guc_variables
,
num_guc_variables
,
sizeof
(
struct
config_generic
*
),
guc_var_compare
);
sizeof
(
struct
config_generic
*
),
guc_var_compare
);
return
true
;
}
}
/*
/*
* Create and add a placeholder variable. Its presumed to belong
* Create and add a placeholder variable. It
'
s presumed to belong
* to a valid custom variable class at this point.
* to a valid custom variable class at this point.
*/
*/
static
struct
config_string
*
static
struct
config_string
*
add_placeholder_variable
(
const
char
*
name
)
add_placeholder_variable
(
const
char
*
name
,
int
elevel
)
{
{
size_t
sz
=
sizeof
(
struct
config_string
)
+
sizeof
(
char
*
);
size_t
sz
=
sizeof
(
struct
config_string
)
+
sizeof
(
char
*
);
struct
config_string
*
var
=
(
struct
config_string
*
)
malloc
(
sz
)
;
struct
config_string
*
var
;
struct
config_generic
*
gen
=
&
var
->
gen
;
struct
config_generic
*
gen
;
var
=
(
struct
config_string
*
)
guc_malloc
(
elevel
,
sz
);
if
(
var
==
NULL
)
return
NULL
;
gen
=
&
var
->
gen
;
memset
(
var
,
0
,
sz
);
memset
(
var
,
0
,
sz
);
gen
->
name
=
strdup
(
name
);
gen
->
name
=
guc_strdup
(
elevel
,
name
);
if
(
gen
->
name
==
NULL
)
{
free
(
var
);
return
NULL
;
}
gen
->
context
=
PGC_USERSET
;
gen
->
context
=
PGC_USERSET
;
gen
->
group
=
CUSTOM_OPTIONS
;
gen
->
group
=
CUSTOM_OPTIONS
;
gen
->
short_desc
=
"GUC placeholder variable"
;
gen
->
short_desc
=
"GUC placeholder variable"
;
...
@@ -1978,7 +2031,14 @@ add_placeholder_variable(const char *name)
...
@@ -1978,7 +2031,14 @@ add_placeholder_variable(const char *name)
* no 'static' place to point to.
* no 'static' place to point to.
*/
*/
var
->
variable
=
(
char
**
)(
var
+
1
);
var
->
variable
=
(
char
**
)(
var
+
1
);
add_guc_variable
((
struct
config_generic
*
)
var
);
if
(
!
add_guc_variable
((
struct
config_generic
*
)
var
,
elevel
))
{
free
((
void
*
)
gen
->
name
);
free
(
var
);
return
NULL
;
}
return
var
;
return
var
;
}
}
...
@@ -1987,7 +2047,7 @@ add_placeholder_variable(const char *name)
...
@@ -1987,7 +2047,7 @@ add_placeholder_variable(const char *name)
* else return NULL.
* else return NULL.
*/
*/
static
struct
config_generic
*
static
struct
config_generic
*
find_option
(
const
char
*
name
)
find_option
(
const
char
*
name
,
int
elevel
)
{
{
const
char
*
dot
;
const
char
*
dot
;
const
char
**
key
=
&
name
;
const
char
**
key
=
&
name
;
...
@@ -2016,7 +2076,7 @@ find_option(const char *name)
...
@@ -2016,7 +2076,7 @@ find_option(const char *name)
for
(
i
=
0
;
map_old_guc_names
[
i
]
!=
NULL
;
i
+=
2
)
for
(
i
=
0
;
map_old_guc_names
[
i
]
!=
NULL
;
i
+=
2
)
{
{
if
(
guc_name_compare
(
name
,
map_old_guc_names
[
i
])
==
0
)
if
(
guc_name_compare
(
name
,
map_old_guc_names
[
i
])
==
0
)
return
find_option
(
map_old_guc_names
[
i
+
1
]);
return
find_option
(
map_old_guc_names
[
i
+
1
]
,
elevel
);
}
}
/*
/*
...
@@ -2026,7 +2086,7 @@ find_option(const char *name)
...
@@ -2026,7 +2086,7 @@ find_option(const char *name)
dot
=
strchr
(
name
,
GUC_QUALIFIER_SEPARATOR
);
dot
=
strchr
(
name
,
GUC_QUALIFIER_SEPARATOR
);
if
(
dot
!=
NULL
&&
is_custom_class
(
name
,
dot
-
name
))
if
(
dot
!=
NULL
&&
is_custom_class
(
name
,
dot
-
name
))
/* Add a placeholder variable for this name */
/* Add a placeholder variable for this name */
return
(
struct
config_generic
*
)
add_placeholder_variable
(
name
);
return
(
struct
config_generic
*
)
add_placeholder_variable
(
name
,
elevel
);
/* Unknown name */
/* Unknown name */
return
NULL
;
return
NULL
;
...
@@ -2172,11 +2232,7 @@ InitializeGUCOptions(void)
...
@@ -2172,11 +2232,7 @@ InitializeGUCOptions(void)
break
;
break
;
}
}
str
=
strdup
(
conf
->
boot_val
);
str
=
guc_strdup
(
FATAL
,
conf
->
boot_val
);
if
(
str
==
NULL
)
ereport
(
FATAL
,
(
errcode
(
ERRCODE_OUT_OF_MEMORY
),
errmsg
(
"out of memory"
)));
conf
->
reset_val
=
str
;
conf
->
reset_val
=
str
;
if
(
conf
->
assign_hook
)
if
(
conf
->
assign_hook
)
...
@@ -2912,7 +2968,7 @@ set_config_option(const char *name, const char *value,
...
@@ -2912,7 +2968,7 @@ set_config_option(const char *name, const char *value,
else
else
elevel
=
ERROR
;
elevel
=
ERROR
;
record
=
find_option
(
name
);
record
=
find_option
(
name
,
elevel
);
if
(
record
==
NULL
)
if
(
record
==
NULL
)
{
{
ereport
(
elevel
,
ereport
(
elevel
,
...
@@ -3368,14 +3424,9 @@ set_config_option(const char *name, const char *value,
...
@@ -3368,14 +3424,9 @@ set_config_option(const char *name, const char *value,
if
(
value
)
if
(
value
)
{
{
newval
=
strdup
(
value
);
newval
=
guc_strdup
(
elevel
,
value
);
if
(
newval
==
NULL
)
if
(
newval
==
NULL
)
{
ereport
(
elevel
,
(
errcode
(
ERRCODE_OUT_OF_MEMORY
),
errmsg
(
"out of memory"
)));
return
false
;
return
false
;
}
if
(
record
->
context
==
PGC_USERLIMIT
)
if
(
record
->
context
==
PGC_USERLIMIT
)
{
{
...
@@ -3426,14 +3477,9 @@ set_config_option(const char *name, const char *value,
...
@@ -3426,14 +3477,9 @@ set_config_option(const char *name, const char *value,
* make this case work the same as the normal
* make this case work the same as the normal
* assignment case.
* assignment case.
*/
*/
newval
=
strdup
(
conf
->
reset_val
);
newval
=
guc_strdup
(
elevel
,
conf
->
reset_val
);
if
(
newval
==
NULL
)
if
(
newval
==
NULL
)
{
ereport
(
elevel
,
(
errcode
(
ERRCODE_OUT_OF_MEMORY
),
errmsg
(
"out of memory"
)));
return
false
;
return
false
;
}
source
=
conf
->
gen
.
reset_source
;
source
=
conf
->
gen
.
reset_source
;
}
}
else
else
...
@@ -3571,7 +3617,7 @@ GetConfigOption(const char *name)
...
@@ -3571,7 +3617,7 @@ GetConfigOption(const char *name)
struct
config_generic
*
record
;
struct
config_generic
*
record
;
static
char
buffer
[
256
];
static
char
buffer
[
256
];
record
=
find_option
(
name
);
record
=
find_option
(
name
,
ERROR
);
if
(
record
==
NULL
)
if
(
record
==
NULL
)
ereport
(
ERROR
,
ereport
(
ERROR
,
(
errcode
(
ERRCODE_UNDEFINED_OBJECT
),
(
errcode
(
ERRCODE_UNDEFINED_OBJECT
),
...
@@ -3607,7 +3653,7 @@ GetConfigOptionResetString(const char *name)
...
@@ -3607,7 +3653,7 @@ GetConfigOptionResetString(const char *name)
struct
config_generic
*
record
;
struct
config_generic
*
record
;
static
char
buffer
[
256
];
static
char
buffer
[
256
];
record
=
find_option
(
name
);
record
=
find_option
(
name
,
ERROR
);
if
(
record
==
NULL
)
if
(
record
==
NULL
)
ereport
(
ERROR
,
ereport
(
ERROR
,
(
errcode
(
ERRCODE_UNDEFINED_OBJECT
),
(
errcode
(
ERRCODE_UNDEFINED_OBJECT
),
...
@@ -3663,7 +3709,7 @@ flatten_set_variable_args(const char *name, List *args)
...
@@ -3663,7 +3709,7 @@ flatten_set_variable_args(const char *name, List *args)
return
NULL
;
return
NULL
;
/* Else get flags for the variable */
/* Else get flags for the variable */
record
=
find_option
(
name
);
record
=
find_option
(
name
,
ERROR
);
if
(
record
==
NULL
)
if
(
record
==
NULL
)
ereport
(
ERROR
,
ereport
(
ERROR
,
(
errcode
(
ERRCODE_UNDEFINED_OBJECT
),
(
errcode
(
ERRCODE_UNDEFINED_OBJECT
),
...
@@ -3834,7 +3880,7 @@ define_custom_variable(struct config_generic* variable)
...
@@ -3834,7 +3880,7 @@ define_custom_variable(struct config_generic* variable)
if
(
res
==
NULL
)
if
(
res
==
NULL
)
{
{
add_guc_variable
(
variable
);
add_guc_variable
(
variable
,
ERROR
);
return
;
return
;
}
}
...
@@ -3883,7 +3929,7 @@ static void init_custom_variable(
...
@@ -3883,7 +3929,7 @@ static void init_custom_variable(
GucContext
context
,
GucContext
context
,
enum
config_type
type
)
enum
config_type
type
)
{
{
gen
->
name
=
strdup
(
name
);
gen
->
name
=
guc_strdup
(
ERROR
,
name
);
gen
->
context
=
context
;
gen
->
context
=
context
;
gen
->
group
=
CUSTOM_OPTIONS
;
gen
->
group
=
CUSTOM_OPTIONS
;
gen
->
short_desc
=
short_desc
;
gen
->
short_desc
=
short_desc
;
...
@@ -3901,7 +3947,7 @@ void DefineCustomBoolVariable(
...
@@ -3901,7 +3947,7 @@ void DefineCustomBoolVariable(
GucShowHook
show_hook
)
GucShowHook
show_hook
)
{
{
size_t
sz
=
sizeof
(
struct
config_bool
);
size_t
sz
=
sizeof
(
struct
config_bool
);
struct
config_bool
*
var
=
(
struct
config_bool
*
)
malloc
(
sz
);
struct
config_bool
*
var
=
(
struct
config_bool
*
)
guc_malloc
(
ERROR
,
sz
);
memset
(
var
,
0
,
sz
);
memset
(
var
,
0
,
sz
);
init_custom_variable
(
&
var
->
gen
,
name
,
short_desc
,
long_desc
,
context
,
PGC_BOOL
);
init_custom_variable
(
&
var
->
gen
,
name
,
short_desc
,
long_desc
,
context
,
PGC_BOOL
);
...
@@ -3923,7 +3969,7 @@ void DefineCustomIntVariable(
...
@@ -3923,7 +3969,7 @@ void DefineCustomIntVariable(
GucShowHook
show_hook
)
GucShowHook
show_hook
)
{
{
size_t
sz
=
sizeof
(
struct
config_int
);
size_t
sz
=
sizeof
(
struct
config_int
);
struct
config_int
*
var
=
(
struct
config_int
*
)
malloc
(
sz
);
struct
config_int
*
var
=
(
struct
config_int
*
)
guc_malloc
(
ERROR
,
sz
);
memset
(
var
,
0
,
sz
);
memset
(
var
,
0
,
sz
);
init_custom_variable
(
&
var
->
gen
,
name
,
short_desc
,
long_desc
,
context
,
PGC_INT
);
init_custom_variable
(
&
var
->
gen
,
name
,
short_desc
,
long_desc
,
context
,
PGC_INT
);
...
@@ -3945,7 +3991,7 @@ void DefineCustomRealVariable(
...
@@ -3945,7 +3991,7 @@ void DefineCustomRealVariable(
GucShowHook
show_hook
)
GucShowHook
show_hook
)
{
{
size_t
sz
=
sizeof
(
struct
config_real
);
size_t
sz
=
sizeof
(
struct
config_real
);
struct
config_real
*
var
=
(
struct
config_real
*
)
malloc
(
sz
);
struct
config_real
*
var
=
(
struct
config_real
*
)
guc_malloc
(
ERROR
,
sz
);
memset
(
var
,
0
,
sz
);
memset
(
var
,
0
,
sz
);
init_custom_variable
(
&
var
->
gen
,
name
,
short_desc
,
long_desc
,
context
,
PGC_REAL
);
init_custom_variable
(
&
var
->
gen
,
name
,
short_desc
,
long_desc
,
context
,
PGC_REAL
);
...
@@ -3967,7 +4013,7 @@ void DefineCustomStringVariable(
...
@@ -3967,7 +4013,7 @@ void DefineCustomStringVariable(
GucShowHook
show_hook
)
GucShowHook
show_hook
)
{
{
size_t
sz
=
sizeof
(
struct
config_string
);
size_t
sz
=
sizeof
(
struct
config_string
);
struct
config_string
*
var
=
(
struct
config_string
*
)
malloc
(
sz
);
struct
config_string
*
var
=
(
struct
config_string
*
)
guc_malloc
(
ERROR
,
sz
);
memset
(
var
,
0
,
sz
);
memset
(
var
,
0
,
sz
);
init_custom_variable
(
&
var
->
gen
,
name
,
short_desc
,
long_desc
,
context
,
PGC_STRING
);
init_custom_variable
(
&
var
->
gen
,
name
,
short_desc
,
long_desc
,
context
,
PGC_STRING
);
...
@@ -4139,7 +4185,7 @@ GetConfigOptionByName(const char *name, const char **varname)
...
@@ -4139,7 +4185,7 @@ GetConfigOptionByName(const char *name, const char **varname)
{
{
struct
config_generic
*
record
;
struct
config_generic
*
record
;
record
=
find_option
(
name
);
record
=
find_option
(
name
,
ERROR
);
if
(
record
==
NULL
)
if
(
record
==
NULL
)
ereport
(
ERROR
,
ereport
(
ERROR
,
(
errcode
(
ERRCODE_UNDEFINED_OBJECT
),
(
errcode
(
ERRCODE_UNDEFINED_OBJECT
),
...
@@ -4506,16 +4552,18 @@ write_nondefault_variables(GucContext context)
...
@@ -4506,16 +4552,18 @@ write_nondefault_variables(GucContext context)
/*
/*
* Open file
* Open file
*/
*/
new_filename
=
malloc
(
strlen
(
DataDir
)
+
strlen
(
CONFIG_EXEC_PARAMS
)
+
new_filename
=
guc_malloc
(
elevel
,
strlen
(
DataDir
)
+
strlen
(
CONFIG_EXEC_PARAMS
)
+
strlen
(
".new"
)
+
2
);
strlen
(
".new"
)
+
2
);
filename
=
malloc
(
strlen
(
DataDir
)
+
strlen
(
CONFIG_EXEC_PARAMS
)
+
2
);
if
(
new_filename
==
NULL
)
if
(
new_filename
==
NULL
||
filename
==
NULL
)
return
;
filename
=
guc_malloc
(
elevel
,
strlen
(
DataDir
)
+
strlen
(
CONFIG_EXEC_PARAMS
)
+
2
);
if
(
filename
==
NULL
)
{
{
ereport
(
elevel
,
free
(
new_filename
);
(
errcode
(
ERRCODE_OUT_OF_MEMORY
),
errmsg
(
"out of memory"
)));
return
;
return
;
}
}
sprintf
(
new_filename
,
"%s/"
CONFIG_EXEC_PARAMS
".new"
,
DataDir
);
sprintf
(
new_filename
,
"%s/"
CONFIG_EXEC_PARAMS
".new"
,
DataDir
);
sprintf
(
filename
,
"%s/"
CONFIG_EXEC_PARAMS
,
DataDir
);
sprintf
(
filename
,
"%s/"
CONFIG_EXEC_PARAMS
,
DataDir
);
...
@@ -4627,9 +4675,9 @@ read_string_with_null(FILE *fp)
...
@@ -4627,9 +4675,9 @@ read_string_with_null(FILE *fp)
elog
(
FATAL
,
"invalid format of exec config params file"
);
elog
(
FATAL
,
"invalid format of exec config params file"
);
}
}
if
(
i
==
0
)
if
(
i
==
0
)
str
=
malloc
(
maxlen
);
str
=
guc_malloc
(
FATAL
,
maxlen
);
else
if
(
i
==
maxlen
)
else
if
(
i
==
maxlen
)
str
=
realloc
(
str
,
maxlen
*=
2
);
str
=
guc_realloc
(
FATAL
,
str
,
maxlen
*=
2
);
str
[
i
++
]
=
ch
;
str
[
i
++
]
=
ch
;
}
while
(
ch
!=
0
);
}
while
(
ch
!=
0
);
...
@@ -4655,14 +4703,7 @@ read_nondefault_variables(void)
...
@@ -4655,14 +4703,7 @@ read_nondefault_variables(void)
/*
/*
* Open file
* Open file
*/
*/
filename
=
malloc
(
strlen
(
DataDir
)
+
strlen
(
CONFIG_EXEC_PARAMS
)
+
2
);
filename
=
guc_malloc
(
FATAL
,
strlen
(
DataDir
)
+
strlen
(
CONFIG_EXEC_PARAMS
)
+
2
);
if
(
filename
==
NULL
)
{
ereport
(
ERROR
,
(
errcode
(
ERRCODE_OUT_OF_MEMORY
),
errmsg
(
"out of memory"
)));
return
;
}
sprintf
(
filename
,
"%s/"
CONFIG_EXEC_PARAMS
,
DataDir
);
sprintf
(
filename
,
"%s/"
CONFIG_EXEC_PARAMS
,
DataDir
);
fp
=
AllocateFile
(
filename
,
"r"
);
fp
=
AllocateFile
(
filename
,
"r"
);
...
@@ -4684,7 +4725,7 @@ read_nondefault_variables(void)
...
@@ -4684,7 +4725,7 @@ read_nondefault_variables(void)
if
((
varname
=
read_string_with_null
(
fp
))
==
NULL
)
if
((
varname
=
read_string_with_null
(
fp
))
==
NULL
)
break
;
break
;
if
((
record
=
find_option
(
varname
))
==
NULL
)
if
((
record
=
find_option
(
varname
,
FATAL
))
==
NULL
)
elog
(
FATAL
,
"failed to locate variable %s in exec config params file"
,
varname
);
elog
(
FATAL
,
"failed to locate variable %s in exec config params file"
,
varname
);
if
((
varvalue
=
read_string_with_null
(
fp
))
==
NULL
)
if
((
varvalue
=
read_string_with_null
(
fp
))
==
NULL
)
elog
(
FATAL
,
"invalid format of exec config params file"
);
elog
(
FATAL
,
"invalid format of exec config params file"
);
...
@@ -4725,28 +4766,16 @@ ParseLongOption(const char *string, char **name, char **value)
...
@@ -4725,28 +4766,16 @@ ParseLongOption(const char *string, char **name, char **value)
if
(
string
[
equal_pos
]
==
'='
)
if
(
string
[
equal_pos
]
==
'='
)
{
{
*
name
=
malloc
(
equal_pos
+
1
);
*
name
=
guc_malloc
(
FATAL
,
equal_pos
+
1
);
if
(
!*
name
)
ereport
(
FATAL
,
(
errcode
(
ERRCODE_OUT_OF_MEMORY
),
errmsg
(
"out of memory"
)));
strncpy
(
*
name
,
string
,
equal_pos
);
strncpy
(
*
name
,
string
,
equal_pos
);
(
*
name
)[
equal_pos
]
=
'\0'
;
(
*
name
)[
equal_pos
]
=
'\0'
;
*
value
=
strdup
(
&
string
[
equal_pos
+
1
]);
*
value
=
guc_strdup
(
FATAL
,
&
string
[
equal_pos
+
1
]);
if
(
!*
value
)
ereport
(
FATAL
,
(
errcode
(
ERRCODE_OUT_OF_MEMORY
),
errmsg
(
"out of memory"
)));
}
}
else
else
{
{
/* no equal sign in string */
/* no equal sign in string */
*
name
=
strdup
(
string
);
*
name
=
guc_strdup
(
FATAL
,
string
);
if
(
!*
name
)
ereport
(
FATAL
,
(
errcode
(
ERRCODE_OUT_OF_MEMORY
),
errmsg
(
"out of memory"
)));
*
value
=
NULL
;
*
value
=
NULL
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment