diff options
author | petr@mysql.com <> | 2005-06-22 05:40:06 +0400 |
---|---|---|
committer | petr@mysql.com <> | 2005-06-22 05:40:06 +0400 |
commit | cb44682a357447fbe6df28ac1dff8d7dac8c6dcc (patch) | |
tree | e0964be403055e8c76f5cfccc94d859a73a0d11d /mysys | |
parent | 30a0ad3a6809e12750f9c344a0d29b82d8c05236 (diff) | |
download | mariadb-git-cb44682a357447fbe6df28ac1dff8d7dac8c6dcc.tar.gz |
Add a missing statement, add licensing info and correct coding style
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/default_modify.c | 118 |
1 files changed, 70 insertions, 48 deletions
diff --git a/mysys/default_modify.c b/mysys/default_modify.c index fe784c7a44b..00caa7beed6 100644 --- a/mysys/default_modify.c +++ b/mysys/default_modify.c @@ -1,3 +1,38 @@ +/* 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. @@ -15,6 +50,8 @@ 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 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 0 - ok @@ -22,24 +59,6 @@ 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, const char *option_value, const char *section_name, int remove_option) @@ -47,7 +66,7 @@ int modify_defaults_file(const char *file_location, const char *option, FILE *cnf_file; MY_STAT file_stat; 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; DBUG_ENTER("modify_defaults_file"); @@ -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))) goto err; - optlen= (uint) strlen(option); + opt_len= (uint) strlen(option); optval_len= (uint) strlen(option_value); /* @@ -66,17 +85,18 @@ int modify_defaults_file(const char *file_location, const char *option, for the option we want to add. */ if (!(file_buffer= (char*) my_malloc(sizeof(char) * - (file_stat.st_size + - /* option name len */ - optlen + - /* reserve space for newline */ - NEWLINE_LEN + - /* reserve for '=' char */ - 1 + - /* option value len */ - optval_len + - /* The ending zero plus some safety */ - FN_REFLEN), 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; sect_len= (uint) strlen(section_name); @@ -94,10 +114,11 @@ int modify_defaults_file(const char *file_location, const char *option, continue; } - if (!opt_applied && in_section && !strncmp(src_ptr, option, optlen) && - (*(src_ptr + optlen) == '=' || - my_isspace(&my_charset_latin1, *(src_ptr + optlen)) || - *(src_ptr + optlen) == '\0')) + /* correct the option */ + if (!opt_applied && in_section && !strncmp(src_ptr, option, opt_len) && + (*(src_ptr + opt_len) == '=' || + 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); opt_applied= 1; @@ -107,11 +128,12 @@ int modify_defaults_file(const char *file_location, const char *option, /* If going to new group and we have option to apply, do it now */ 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--) - dst_ptr= strmov(dst_ptr, NEWLINE); + dst_ptr= strmov(dst_ptr, NEWLINE); dst_ptr= strmov(dst_ptr, linebuff); } /* Look for a section */ @@ -120,13 +142,13 @@ int modify_defaults_file(const char *file_location, const char *option, /* Copy the line to the buffer */ if (!strncmp(++src_ptr, section_name, sect_len)) { - src_ptr+= sect_len; - /* Skip over whitespaces. They are allowed after section name */ - for (; my_isspace(&my_charset_latin1, *src_ptr); src_ptr++) - {} + src_ptr+= sect_len; + /* Skip over whitespaces. They are allowed after section name */ + for (; my_isspace(&my_charset_latin1, *src_ptr); src_ptr++) + {} - if (*src_ptr != ']') - continue; /* Missing closing parenthesis. Assume this was no group */ + if (*src_ptr != ']') + continue; /* Missing closing parenthesis. Assume this was no group */ in_section= TRUE; } else @@ -149,10 +171,10 @@ int modify_defaults_file(const char *file_location, const char *option, { /* Don't write the file if there are no changes to be made */ if (my_chsize(fileno(cnf_file), (my_off_t) (dst_ptr - file_buffer), 0, - MYF(MY_WME)) || - my_fseek(cnf_file, 0, MY_SEEK_SET, MYF(0)) || - my_fwrite(cnf_file, file_buffer, (uint) (dst_ptr - file_buffer), - MYF(MY_NABP))) + MYF(MY_WME)) || + my_fseek(cnf_file, 0, MY_SEEK_SET, MYF(0)) || + my_fwrite(cnf_file, file_buffer, (uint) (dst_ptr - file_buffer), + MYF(MY_NABP))) goto err; } if (my_fclose(cnf_file, MYF(MY_WME))) |