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
1ac58893
Commit
1ac58893
authored
Jun 29, 2005
by
petr@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge pchardin@bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/cps/mysql/trees/mysql-5.0
parents
f2e358d9
5e72092e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
51 additions
and
17 deletions
+51
-17
mysys/default_modify.c
mysys/default_modify.c
+51
-17
No files found.
mysys/default_modify.c
View file @
1ac58893
...
@@ -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,11 @@ int modify_defaults_file(const char *file_location, const char *option,
...
@@ -66,8 +68,11 @@ 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
;
uint
reserve_extended
=
1
,
old_opt_len
=
0
;
uint
new_opt_len
;
int
reserve_occupied
=
0
;
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
))))
...
@@ -75,28 +80,33 @@ int modify_defaults_file(const char *file_location, const char *option,
...
@@ -75,28 +80,33 @@ int modify_defaults_file(const char *file_location, const char *option,
/* my_fstat doesn't use the flag parameter */
/* my_fstat doesn't use the flag parameter */
if
(
my_fstat
(
fileno
(
cnf_file
),
&
file_stat
,
MYF
(
0
)))
if
(
my_fstat
(
fileno
(
cnf_file
),
&
file_stat
,
MYF
(
0
)))
goto
err
;
goto
malloc_
err
;
opt_len
=
(
uint
)
strlen
(
option
);
opt_len
=
(
uint
)
strlen
(
option
);
optval_len
=
(
uint
)
strlen
(
option_value
);
optval_len
=
(
uint
)
strlen
(
option_value
);
new_opt_len
=
opt_len
+
1
+
optval_len
+
NEWLINE_LEN
;
/* 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 +125,37 @@ int modify_defaults_file(const char *file_location, const char *option,
...
@@ -115,13 +125,37 @@ 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
)
{
src_ptr
+=
opt_len
;
/* If we correct an option, we know it's name */
old_opt_len
=
opt_len
;
while
(
*
src_ptr
++
)
/* Find the end of the line */
old_opt_len
++
;
/* could be negative */
reserve_occupied
+=
(
int
)
new_opt_len
-
(
int
)
old_opt_len
;
if
((
int
)
reserve_occupied
>
(
int
)
(
RESERVE
*
reserve_extended
))
{
if
(
!
(
file_buffer
=
(
char
*
)
my_realloc
(
file_buffer
,
buffer_size
+
RESERVE
*
reserve_extended
,
MYF
(
MY_WME
|
MY_FREE_ON_ERROR
))))
goto
malloc_err
;
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