Commit 093faea6 authored by unknown's avatar unknown

Merge pchardin@bk-internal.mysql.com:/home/bk/mysql-5.0

into mysql.com:/home/cps/mysql/trees/mysql-5.0
parents 18242cfc b09aecd8
/* Copyright (C) 2005 MySQL AB
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
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include "my_global.h"
#include "mysys_priv.h"
#include "m_string.h"
#include <my_dir.h>
#define BUFF_SIZE 1024
#ifdef __WIN__
#define NEWLINE "\r\n"
#define NEWLINE_LEN 2
#else
#define NEWLINE "\n"
#define NEWLINE_LEN 1
#endif
static char *add_option(char *dst, const char *option_value,
const char *option, int remove_option);
/* /*
Add/remove option to the option file section. Add/remove option to the option file section.
...@@ -15,6 +50,8 @@ ...@@ -15,6 +50,8 @@
into a buffer. Then we look for the option within this section and into a buffer. Then we look for the option within this section and
change/remove it. In the end we get a buffer with modified version of the change/remove it. In the end we get a buffer with modified version of the
file. Then we write it to the file, truncate it if needed and close it. file. Then we write it to the file, truncate it if needed and close it.
Note that there is a small time gap, when the file is incomplete,
and this theoretically might introduce a problem.
RETURN RETURN
0 - ok 0 - ok
...@@ -22,24 +59,6 @@ ...@@ -22,24 +59,6 @@
2 - cannot open the file 2 - cannot open the file
*/ */
#include "my_global.h"
#include "mysys_priv.h"
#include "m_string.h"
#include <my_dir.h>
#define BUFF_SIZE 1024
#ifdef __WIN__
#define NEWLINE "\r\n"
#define NEWLINE_LEN 2
#else
#define NEWLINE "\n"
#define NEWLINE_LEN 1
#endif
static char *add_option(char *dst, const char *option_value,
const char *option, int remove_option);
int modify_defaults_file(const char *file_location, const char *option, int modify_defaults_file(const char *file_location, const char *option,
const char *option_value, const char *option_value,
const char *section_name, int remove_option) const char *section_name, int remove_option)
...@@ -47,7 +66,7 @@ int modify_defaults_file(const char *file_location, const char *option, ...@@ -47,7 +66,7 @@ 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 optlen, optval_len, sect_len, nr_newlines= 0; uint opt_len, optval_len, sect_len, nr_newlines= 0;
my_bool in_section= FALSE, opt_applied= 0; my_bool in_section= FALSE, opt_applied= 0;
DBUG_ENTER("modify_defaults_file"); DBUG_ENTER("modify_defaults_file");
...@@ -58,7 +77,7 @@ int modify_defaults_file(const char *file_location, const char *option, ...@@ -58,7 +77,7 @@ int modify_defaults_file(const char *file_location, const char *option,
if (my_fstat(fileno(cnf_file), &file_stat, MYF(0))) if (my_fstat(fileno(cnf_file), &file_stat, MYF(0)))
goto err; goto err;
optlen= (uint) strlen(option); opt_len= (uint) strlen(option);
optval_len= (uint) strlen(option_value); optval_len= (uint) strlen(option_value);
/* /*
...@@ -68,15 +87,16 @@ int modify_defaults_file(const char *file_location, const char *option, ...@@ -68,15 +87,16 @@ int modify_defaults_file(const char *file_location, const char *option,
if (!(file_buffer= (char*) my_malloc(sizeof(char) * if (!(file_buffer= (char*) my_malloc(sizeof(char) *
(file_stat.st_size + (file_stat.st_size +
/* option name len */ /* option name len */
optlen + opt_len +
/* reserve space for newline */ /* reserve space for newline */
NEWLINE_LEN + NEWLINE_LEN +
/* reserve for '=' char */ /* reserve for '=' char */
1 + 1 +
/* option value len */ /* option value len */
optval_len + optval_len +
/* The ending zero plus some safety */ /* The ending zero */
FN_REFLEN), MYF(MY_WME)))) 1), MYF(MY_WME))))
goto malloc_err; goto malloc_err;
sect_len= (uint) strlen(section_name); sect_len= (uint) strlen(section_name);
...@@ -94,10 +114,11 @@ int modify_defaults_file(const char *file_location, const char *option, ...@@ -94,10 +114,11 @@ int modify_defaults_file(const char *file_location, const char *option,
continue; continue;
} }
if (!opt_applied && in_section && !strncmp(src_ptr, option, optlen) && /* correct the option */
(*(src_ptr + optlen) == '=' || if (!opt_applied && in_section && !strncmp(src_ptr, option, opt_len) &&
my_isspace(&my_charset_latin1, *(src_ptr + optlen)) || (*(src_ptr + opt_len) == '=' ||
*(src_ptr + optlen) == '\0')) my_isspace(&my_charset_latin1, *(src_ptr + opt_len)) ||
*(src_ptr + opt_len) == '\0'))
{ {
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; opt_applied= 1;
...@@ -108,8 +129,9 @@ int modify_defaults_file(const char *file_location, const char *option, ...@@ -108,8 +129,9 @@ int modify_defaults_file(const char *file_location, const char *option,
if (in_section && !opt_applied && *src_ptr == '[') if (in_section && !opt_applied && *src_ptr == '[')
{ {
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; /* set the flag to do write() later */
} }
for (; nr_newlines; nr_newlines--) for (; nr_newlines; nr_newlines--)
dst_ptr= strmov(dst_ptr, NEWLINE); dst_ptr= strmov(dst_ptr, NEWLINE);
dst_ptr= strmov(dst_ptr, linebuff); dst_ptr= strmov(dst_ptr, linebuff);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment