Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
c19fd75e
Commit
c19fd75e
authored
Jun 23, 2005
by
petr@mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix modify_defaults_file as agreed with monty (correct all occurences of an option in the section)
parent
71b425be
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
41 additions
and
16 deletions
+41
-16
mysys/default_modify.c
mysys/default_modify.c
+41
-16
No files found.
mysys/default_modify.c
View file @
c19fd75e
...
@@ -20,6 +20,8 @@
...
@@ -20,6 +20,8 @@
#include <my_dir.h>
#include <my_dir.h>
#define BUFF_SIZE 1024
#define BUFF_SIZE 1024
/* should be big enough to handle at least one line */
#define RESERVE 1024
#ifdef __WIN__
#ifdef __WIN__
#define NEWLINE "\r\n"
#define NEWLINE "\r\n"
...
@@ -66,8 +68,10 @@ int modify_defaults_file(const char *file_location, const char *option,
...
@@ -66,8 +68,10 @@ int modify_defaults_file(const char *file_location, const char *option,
FILE
*
cnf_file
;
FILE
*
cnf_file
;
MY_STAT
file_stat
;
MY_STAT
file_stat
;
char
linebuff
[
BUFF_SIZE
],
*
src_ptr
,
*
dst_ptr
,
*
file_buffer
;
char
linebuff
[
BUFF_SIZE
],
*
src_ptr
,
*
dst_ptr
,
*
file_buffer
;
uint
opt_len
,
optval_len
,
sect_len
,
nr_newlines
=
0
;
uint
opt_len
,
optval_len
,
sect_len
,
nr_newlines
=
0
,
buffer_size
;
my_bool
in_section
=
FALSE
,
opt_applied
=
0
;
my_bool
in_section
=
FALSE
,
opt_applied
=
0
;
int
reserve_occupied
=
0
,
reserve_extended
=
1
,
old_opt_len
;
int
new_opt_len
=
opt_len
+
1
+
optval_len
+
NEWLINE_LEN
;
DBUG_ENTER
(
"modify_defaults_file"
);
DBUG_ENTER
(
"modify_defaults_file"
);
if
(
!
(
cnf_file
=
my_fopen
(
file_location
,
O_RDWR
|
O_BINARY
,
MYF
(
0
))))
if
(
!
(
cnf_file
=
my_fopen
(
file_location
,
O_RDWR
|
O_BINARY
,
MYF
(
0
))))
...
@@ -80,23 +84,26 @@ int modify_defaults_file(const char *file_location, const char *option,
...
@@ -80,23 +84,26 @@ int modify_defaults_file(const char *file_location, const char *option,
opt_len
=
(
uint
)
strlen
(
option
);
opt_len
=
(
uint
)
strlen
(
option
);
optval_len
=
(
uint
)
strlen
(
option_value
);
optval_len
=
(
uint
)
strlen
(
option_value
);
/* calculate the size of the buffer we need */
buffer_size
=
sizeof
(
char
)
*
(
file_stat
.
st_size
+
/* option name len */
opt_len
+
/* reserve for '=' char */
1
+
/* option value len */
optval_len
+
/* reserve space for newline */
NEWLINE_LEN
+
/* The ending zero */
1
+
/* reserve some additional space */
RESERVE
);
/*
/*
Reserve space to read the contents of the file and some more
Reserve space to read the contents of the file and some more
for the option we want to add.
for the option we want to add.
*/
*/
if
(
!
(
file_buffer
=
(
char
*
)
my_malloc
(
sizeof
(
char
)
*
if
(
!
(
file_buffer
=
(
char
*
)
my_malloc
(
buffer_size
,
MYF
(
MY_WME
))))
(
file_stat
.
st_size
+
/* option name len */
opt_len
+
/* reserve space for newline */
NEWLINE_LEN
+
/* reserve for '=' char */
1
+
/* option value len */
optval_len
+
/* The ending zero */
1
),
MYF
(
MY_WME
))))
goto
malloc_err
;
goto
malloc_err
;
sect_len
=
(
uint
)
strlen
(
section_name
);
sect_len
=
(
uint
)
strlen
(
section_name
);
...
@@ -115,13 +122,31 @@ int modify_defaults_file(const char *file_location, const char *option,
...
@@ -115,13 +122,31 @@ int modify_defaults_file(const char *file_location, const char *option,
}
}
/* correct the option */
/* correct the option */
if
(
!
opt_applied
&&
in_section
&&
!
strncmp
(
src_ptr
,
option
,
opt_len
)
&&
if
(
in_section
&&
!
strncmp
(
src_ptr
,
option
,
opt_len
)
&&
(
*
(
src_ptr
+
opt_len
)
==
'='
||
(
*
(
src_ptr
+
opt_len
)
==
'='
||
my_isspace
(
&
my_charset_latin1
,
*
(
src_ptr
+
opt_len
))
||
my_isspace
(
&
my_charset_latin1
,
*
(
src_ptr
+
opt_len
))
||
*
(
src_ptr
+
opt_len
)
==
'\0'
))
*
(
src_ptr
+
opt_len
)
==
'\0'
))
{
{
/*
we should change all options. If opt_applied is set, we are running
into reserved memory area. Hence we should check for overruns.
*/
if
(
opt_applied
)
{
old_opt_len
=
strlen
(
linebuff
);
/* could be negative */
reserve_occupied
+=
new_opt_len
-
old_opt_len
;
if
(
reserve_occupied
>
RESERVE
*
reserve_extended
)
{
file_buffer
=
(
char
*
)
my_realloc
(
file_buffer
,
buffer_size
+
RESERVE
*
reserve_extended
,
MYF
(
MY_WME
));
reserve_extended
++
;
}
}
else
opt_applied
=
1
;
dst_ptr
=
add_option
(
dst_ptr
,
option_value
,
option
,
remove_option
);
dst_ptr
=
add_option
(
dst_ptr
,
option_value
,
option
,
remove_option
);
opt_applied
=
1
;
}
}
else
else
{
{
...
...
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