diff options
author | unknown <monty@hundin.mysql.fi> | 2001-10-08 04:58:07 +0300 |
---|---|---|
committer | unknown <monty@hundin.mysql.fi> | 2001-10-08 04:58:07 +0300 |
commit | cef1d752497f81229788e56abaf7fa62c1ab31a9 (patch) | |
tree | f8a3cf3164d5a5550378074ac8d3bf4afe105683 /mysys | |
parent | bd7b4aaa7dac716bb6d54b3d1dd355f78b68f0f2 (diff) | |
download | mariadb-git-cef1d752497f81229788e56abaf7fa62c1ab31a9.tar.gz |
Updated manual about embedded version.
Speed up column-completion in 'mysql'
Don't use ISAM if HAVE_ISAM is not defined
A lot of fixes for the embedded version. All libraries are now included in libmysqld.a
Changed arguments to convert_dirname() to make it more general.
Renamed files in the 'merge' directory to all use a common prefix.
Don't compile both assembler and C functions on x86
BitKeeper/deleted/.del-mf_pack2.c~f07795bbcf57be7:
Delete: mysys/mf_pack2.c
Docs/manual.texi:
Updated chapter about embedded version
acinclude.m4:
Fix for using BDB and InnoDB with embedded
client/completion_hash.cc:
Speed up memory allocation
client/completion_hash.h:
Speed up memory allocation
client/mysql.cc:
Speed up memory allocation
client/mysqldump.c:
Fix to use now convert_dirname
client/mysqltest.c:
Fixed memory allocation bugs.
Added --basedir=#, --compress=#, --server-arg, --server-file.
Fixes for embedded version
Changed silent mode to -s instead of -q
include/my_global.h:
Update to use HAVE_ISAM
include/my_sys.h:
Cleanup of fn_format()
include/mysql.h:
Prepare FIELD struct for 4.1
include/mysql_embed.h:
Don't use ISAM in embedded version
innobase/include/srv0srv.h:
Make InnoDB startup/shutdown silent in embedded version
innobase/log/log0log.c:
Make InnoDB startup/shutdown silent in embedded version
innobase/srv/srv0srv.c:
Make InnoDB startup/shutdown silent in embedded version
innobase/srv/srv0start.c:
Make InnoDB startup/shutdown silent in embedded version
isam/isamlog.c:
new convert_dirname
libmysql/libmysql.c:
Prepare for 4.1
libmysqld/Makefile.am:
Changed to create one libmysqld.a file that includes all other libraries.
libmysqld/examples/Makefile.am:
Changed to use new libmysqld.a
libmysqld/examples/test-run:
Lot's of fixes to get new mysqltest with embedded MySQL to work.
libmysqld/lib_sql.cc:
Changed type of arguments for mysql_server_init() to make code more portable.
libmysqld/libmysqld.c:
Cleanup
merge/Makefile.am:
Rename to use common prefix.
merge/mrg_close.c:
Rename to use common prefix.
merge/mrg_create.c:
Rename to use common prefix.
merge/mrg_def.h:
Rename to use common prefix.
merge/mrg_delete.c:
Rename to use common prefix.
merge/mrg_extra.c:
Rename to use common prefix.
merge/mrg_info.c:
Rename to use common prefix.
merge/mrg_locking.c:
Rename to use common prefix.
merge/mrg_open.c:
Rename to use common prefix.
merge/mrg_panic.c:
Rename to use common prefix.
merge/mrg_rrnd.c:
Rename to use common prefix.
merge/mrg_rsame.c:
Rename to use common prefix.
merge/mrg_static.c:
Rename to use common prefix.
merge/mrg_update.c:
Rename to use common prefix.
myisam/myisamlog.c:
Use new convert_dirname
myisammrg/Makefile.am:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_close.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_create.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_def.h:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_delete.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_extra.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_info.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_locking.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_open.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_panic.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_queue.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_rfirst.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_rkey.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_rlast.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_rnext.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_rprev.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_rrnd.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_rsame.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_static.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_update.c:
Renamed mymrgdef.h -> myrg_def.h
myisammrg/myrg_write.c:
Renamed mymrgdef.h -> myrg_def.h
mysql-test/include/master-slave.inc:
Use short filenames for sockets (portability problem on Mac OS X)
mysql-test/mysql-test-run.sh:
cleanup
mysql-test/r/auto_increment.result:
Cleanup of tests for embedded version
mysql-test/r/func_system.result:
Cleanup of tests for embedded version
mysql-test/r/isam.result:
Cleanup of tests for embedded version
mysql-test/r/lock.result:
Cleanup of tests for embedded version
mysql-test/r/show_check.result:
Cleanup of tests for embedded version
mysql-test/t/auto_increment.test:
Cleanup of tests for embedded version
mysql-test/t/backup.test:
Cleanup of tests for embedded version
mysql-test/t/count_distinct2-master.opt:
Cleanup of tests for embedded version
mysql-test/t/count_distinct2.test:
Cleanup of tests for embedded version
mysql-test/t/create.test:
Cleanup of tests for embedded version
mysql-test/t/flush.test:
Cleanup of tests for embedded version
mysql-test/t/func_system.test:
Cleanup of tests for embedded version
mysql-test/t/isam.test:
Cleanup of tests for embedded version
mysql-test/t/kill.test:
Cleanup of tests for embedded version
mysql-test/t/lock.test:
Cleanup of tests for embedded version
mysql-test/t/order_fill_sortbuf-master.opt:
Cleanup of tests for embedded version
mysql-test/t/rpl000015.test:
Use short filenames for sockets (portability problem on Mac OS X)
mysql-test/t/rpl000016.test:
Use short filenames for sockets (portability problem on Mac OS X)
mysql-test/t/rpl000017.test:
Use short filenames for sockets (portability problem on Mac OS X)
mysql-test/t/rpl000018.test:
Use short filenames for sockets (portability problem on Mac OS X)
mysql-test/t/show_check.test:
Move ISAM specific tests to isam.test
mysql-test/t/status.test:
Cleanup of tests for embedded version
mysql-test/t/tablelock.test:
Cleanup
mysys/Makefile.am:
Removed not used mf_pack2.c
mysys/charset.c:
new convert_dirname
mysys/default.c:
new convert_dirname
mysys/mf_dirname.c:
Changed convert_dirname() to be more general
mysys/mf_format.c:
Changed bit flags to fn_format() to defines.
Added handling of relative filenames
BitKeeper/etc/ignore:
Added libmysqld/examples/test-gdbinit scripts/mysql_explain_log to the ignore list
mysys/mf_pack.c:
new convert_dirname
mysys/mf_tempfile.c:
new convert_dirname
scripts/Makefile.am:
Adde mysql_explain_log
scripts/mysql_config.sh:
Added support of --libmysqld-libs
sql/Makefile.am:
Fix to use 'innodb_system_libs'
sql/ha_innobase.cc:
Make InnoDB startup/shutdown silent in embedded version
sql/ha_isam.cc:
Added handling of HAVE_ISAM
sql/ha_isammrg.cc:
Added handling of HAVE_ISAM
sql/ha_myisam.cc:
Handle relative paths; Needed to support BACKUP TABLE in embedded version
sql/ha_myisammrg.cc:
Rename of filenames
sql/handler.cc:
Added handling of HAVE_ISAM
sql/item_func.cc:
Fix for ecc (Intel Compiler)
sql/mysql_priv.h:
Added global variable 'mysql_embedded'
sql/mysqld.cc:
Use HAVE_ISAM
sql/sql_parse.cc:
Use new convert_dirname
sql/sql_select.cc:
Fix for ecc (Intel Compiler)
sql/sql_table.cc:
Added handling of relative filenames
strings/Makefile.am:
Don't compile both assembler and C functions on x86
strings/bchange.c:
cleanup
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/Makefile.am | 2 | ||||
-rw-r--r-- | mysys/charset.c | 2 | ||||
-rw-r--r-- | mysys/default.c | 19 | ||||
-rw-r--r-- | mysys/mf_dirname.c | 84 | ||||
-rw-r--r-- | mysys/mf_format.c | 75 | ||||
-rw-r--r-- | mysys/mf_pack.c | 3 | ||||
-rw-r--r-- | mysys/mf_pack2.c | 53 | ||||
-rw-r--r-- | mysys/mf_tempfile.c | 3 |
8 files changed, 104 insertions, 137 deletions
diff --git a/mysys/Makefile.am b/mysys/Makefile.am index 2a9841975ed..19f60e49711 100644 --- a/mysys/Makefile.am +++ b/mysys/Makefile.am @@ -34,7 +34,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\ my_error.c errors.c my_div.c my_messnc.c \ mf_format.c mf_same.c mf_dirname.c mf_fn_ext.c \ my_symlink.c my_symlink2.c \ - mf_pack.c mf_pack2.c mf_unixpath.c mf_stripp.c \ + mf_pack.c mf_unixpath.c mf_stripp.c \ mf_casecnv.c mf_soundex.c mf_wcomp.c mf_wfile.c \ mf_qsort.c mf_qsort2.c mf_sort.c \ ptr_cmp.c mf_radix.c queues.c \ diff --git a/mysys/charset.c b/mysys/charset.c index ddabb22539e..47eaf3587d5 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -103,7 +103,7 @@ char *get_charsets_dir(char *buf) strxmov(buf, DEFAULT_CHARSET_HOME, "/", sharedir, "/", CHARSET_DIR, NullS); } - convert_dirname(buf); + convert_dirname(buf,buf,NullS); DBUG_PRINT("info",("charsets dir='%s'", buf)); DBUG_RETURN(strend(buf)); } diff --git a/mysys/default.c b/mysys/default.c index e2e80f36a68..920a3a5e70b 100644 --- a/mysys/default.c +++ b/mysys/default.c @@ -231,11 +231,10 @@ static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc, return 0; /* Ignore wrong paths */ if (dir) { - strmov(name,dir); - convert_dirname(name); + end=convert_dirname(name, dir, NullS); if (dir[0] == FN_HOMELIB) /* Add . to filenames in home */ - strcat(name,"."); - strxmov(strend(name),config_file,ext,NullS); + *end++='.'; + strxmov(end,config_file,ext,NullS); } else { @@ -369,16 +368,18 @@ void print_defaults(const char *conf_file, const char **groups) #endif for (dirs=default_directories ; *dirs; dirs++) { + const char *pos; + char *end; if (**dirs) - strmov(name,*dirs); + pos= *dirs; else if (defaults_extra_file) - strmov(name,defaults_extra_file); + pos= defaults_extra_file; else continue; - convert_dirname(name); + end=convert_dirname(name, pos, NullS); if (name[0] == FN_HOMELIB) /* Add . to filenames in home */ - strcat(name,"."); - strxmov(strend(name),conf_file,default_ext," ",NullS); + *end++='.'; + strxmov(end,conf_file,default_ext," ",NullS); fputs(name,stdout); } puts(""); diff --git a/mysys/mf_dirname.c b/mysys/mf_dirname.c index 399082a238b..fb5d77d8ab8 100644 --- a/mysys/mf_dirname.c +++ b/mysys/mf_dirname.c @@ -50,57 +50,69 @@ uint dirname_part(my_string to, const char *name) DBUG_PRINT("enter",("'%s'",name)); length=dirname_length(name); - (void) strmake(to,(char*) name,min(length,FN_REFLEN-2)); - convert_dirname(to); /* Convert chars */ + convert_dirname(to, name, name+length); DBUG_RETURN(length); } /* dirname */ - /* convert dirname to use under this system */ - /* If MSDOS converts '/' to '\' */ - /* If VMS converts '<' to '[' and '>' to ']' */ - /* Adds a '/' to end if there isn't one and the last isn't a dev_char */ - /* ARGSUSED */ + /* + Convert directory name to use under this system + If MSDOS converts '/' to '\' + If VMS converts '<' to '[' and '>' to ']' + Adds a FN_LIBCHAR to end if the result string if there isn't one + and the last isn't dev_char. + Copies data from 'from' until ASCII(0) for until from == from_end + If you want to use the whole 'from' string, just send NullS as the + last argument. + If the result string is larger than FN_REFLEN -1, then it's cut. + + Returns pointer to end \0 + */ #ifndef FN_DEVCHAR #define FN_DEVCHAR '\0' /* For easier code */ #endif -char *convert_dirname(my_string to) +char *convert_dirname(char *to, const char *from, const char *from_end) { - reg1 char *pos; -#ifdef FN_UPPER_CASE - caseup_str(to); -#endif -#ifdef FN_LOWER_CASE - casedn_str(to); -#endif -#if FN_LIBCHAR != '/' - { - pos=to-1; /* Change from '/' */ - while ((pos=strchr(pos+1,'/')) != 0) - *pos=FN_LIBCHAR; - } -#endif -#ifdef FN_C_BEFORE_DIR_2 + char *to_org=to; + + /* We use -2 here, becasue we need place for the last FN_LIBCHAR */ + if (!from_end || (from_end - from) > FN_REFLEN-2) + from_end=from+FN_REFLEN -2; + +#if FN_LIBCHAR != '/' || defined(FN_C_BEFORE_DIR_2) { - for (pos=to ; *pos ; pos++) + while (*from && *from != end) { - if (*pos == FN_C_BEFORE_DIR_2) - *pos=FN_C_BEFORE_DIR; - if (*pos == FN_C_AFTER_DIR_2) - *pos=FN_C_AFTER_DIR; + if (*from == '/') + *to++= FN_LIBCHAR; +#ifdef FN_C_BEFORE_DIR_2 + else if (*from == FN_C_BEFORE_DIR_2) + *to++= FN_C_BEFORE_DIR; + else if (*from == FN_C_AFTER_DIR_2) + *to++= FN_C_AFTER_DIR; +#endif + else + *to++= *from++; } } #else - { /* Append FN_LIBCHAR if not there */ - pos=strend(to); - if (pos != to && (pos[-1] != FN_LIBCHAR && pos[-1] != FN_DEVCHAR)) - { - *pos++=FN_LIBCHAR; - *pos=0; - } + /* This is ok even if to == from, becasue we need to cut the string */ + to= strmake(to, from, (uint) (from_end-from)); +#endif + + /* Add FN_LIBCHAR to the end of directory path */ + if (to != to_org && (to[-1] != FN_LIBCHAR && to[-1] != FN_DEVCHAR)) + { + *to++=FN_LIBCHAR; + *to=0; } +#ifdef FN_UPPER_CASE + caseup_str(to_org); +#endif +#ifdef FN_LOWER_CASE + casedn_str(to_org); #endif - return pos; /* Pointer to end of dir */ + return to; /* Pointer to end of dir */ } /* convert_dirname */ diff --git a/mysys/mf_format.c b/mysys/mf_format.c index 5063d6ca831..d7d2af608e8 100644 --- a/mysys/mf_format.c +++ b/mysys/mf_format.c @@ -18,64 +18,68 @@ #include "mysys_priv.h" #include <m_string.h> - /* format a filename with replace of library and extension */ - /* params to and name may be identicall */ - /* function doesn't change name if name != to */ - /* Flag may be: 1 replace filenames library with 'dsk' */ - /* 2 replace extension with 'form' */ - /* 4 Unpack filename (replace ~ with home) */ - /* 8 Pack filename as short as possibly */ - /* 16 Resolve symbolic links for filename */ - /* 32 Resolve filename to full path */ - /* 64 Return NULL if too long path */ + /* + Formats a filename with possible replace of directory of extension + Function can handle the case where 'to' == 'name' + For a description of the flag values, consult my_sys.h + The arguments should be in unix format. + */ -my_string fn_format(my_string to, const char *name, const char *dsk, - const char *form, int flag) +my_string fn_format(my_string to, const char *name, const char *dir, + const char *extension, uint flag) { reg1 uint length; char dev[FN_REFLEN], buff[FN_REFLEN], *pos, *startpos; const char *ext; DBUG_ENTER("fn_format"); - DBUG_PRINT("enter",("name: %s dsk: %s form: %s flag: %d", - name,dsk,form,flag)); + DBUG_PRINT("enter",("name: %s dir: %s extension: %s flag: %d", + name,dir,extension,flag)); - /* Kopiera & skippa enheten */ + /* Copy and skip directory */ name+=(length=dirname_part(dev,(startpos=(my_string) name))); - if (length == 0 || flag & 1) + if (length == 0 || (flag & MY_REPLACE_DIR)) + { + /* Use given directory */ + convert_dirname(dev,dir,NullS); /* Fix to this OS */ + } + else if ((flag & MY_RELATIVE_PATH) && !test_if_hard_path(name)) { - (void) strmake(dev,dsk, sizeof(dev) - 2); - /* Use given directory */ - convert_dirname(dev); /* Fix to this OS */ + /* Put 'dir' before the given path */ + strmake(buff,dev,sizeof(buff)-1); + pos=convert_dirname(dev,dir,NullS); + strmake(pos,buff,sizeof(buff)-1- (int) (pos-dev)); } - if (flag & 8) + + if (flag & MY_PACK_FILENAME) pack_dirname(dev,dev); /* Put in ./.. and ~/.. */ - if (flag & 4) + if (flag & MY_UNPACK_FILENAME) (void) unpack_dirname(dev,dev); /* Replace ~/.. with dir */ - if ((pos=(char*)strchr(name,FN_EXTCHAR)) != NullS) + if ((pos= (char*) strchr(name,FN_EXTCHAR)) != NullS) { - if ((flag & 2) == 0) /* Skall vi byta extension ? */ + if ((flag & MY_REPLACE_EXT) == 0) /* If we should keep old ext */ { - length=strlength(name); /* Old extension */ + length=strlength(name); /* Use old extension */ ext = ""; } else { length=(uint) (pos-(char*) name); /* Change extension */ - ext= form; + ext= extension; } } else { - length=strlength(name); /* Har ingen ext- tag nya */ - ext=form; + length=strlength(name); /* No ext, use the now one */ + ext=extension; } if (strlen(dev)+length+strlen(ext) >= FN_REFLEN || length >= FN_LEN ) - { /* To long path, return original */ + { + /* To long path, return original or NULL */ uint tmp_length; - if (flag & 64) - return 0; + if (flag & MY_SAFE_PATH) + return NullS; tmp_length=strlength(startpos); DBUG_PRINT("error",("dev: '%s' ext: '%s' length: %d",dev,ext,length)); (void) strmake(to,startpos,min(tmp_length,FN_REFLEN-1)); @@ -96,9 +100,14 @@ my_string fn_format(my_string to, const char *name, const char *dsk, #endif (void) strmov(pos,ext); /* Don't convert extension */ } - if (flag & 32) - (void) my_realpath(to, to, MYF(flag & 32 ? 0 : MY_RESOLVE_LINK)); - else if (flag & 16) + /* + If MY_RETURN_REAL_PATH and MY_RESOLVE_SYMLINK is given, only do + realpath if the file is a symbolic link + */ + if (flag & MY_RETURN_REAL_PATH) + (void) my_realpath(to, to, MYF(flag & MY_RESOLVE_SYMLINKS ? + MY_RESOLVE_LINK: 0)); + else if (flag & MY_RESOLVE_SYMLINKS) { strmov(buff,to); (void) my_readlink(to, buff, MYF(0)); diff --git a/mysys/mf_pack.c b/mysys/mf_pack.c index 62394050261..c8b01ce700c 100644 --- a/mysys/mf_pack.c +++ b/mysys/mf_pack.c @@ -459,8 +459,7 @@ my_string intern_filename(my_string to, const char *from) my_string pos,from_pos,to_pos,end_pos; char buff[FN_REFLEN]; - (void) strmov(buff,from); - convert_dirname(buff); /* change '<>' to '[]' */ + convert_dirname(buff,from,NullS); /* change '<>' to '[]' */ from_pos=buff; if ((pos=strrchr(from_pos,FN_DEVCHAR))) /* Skipp device part */ { diff --git a/mysys/mf_pack2.c b/mysys/mf_pack2.c deleted file mode 100644 index 1cda7797457..00000000000 --- a/mysys/mf_pack2.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA */ - -#include "mysys_priv.h" -#include <m_string.h> - - /* Pack a filename for output on screen */ - /* Changes long paths to .../ */ - /* Removes pathname and extension */ - /* If not possibly to pack returns '?' in to and returns 1*/ - -int pack_filename(my_string to, const char *name, size_s max_length) - /* to may be name */ - -{ - int i; - char buff[FN_REFLEN]; - - if (strlen(fn_format(to,name,"","",0)) <= max_length) - return 0; - if (strlen(fn_format(to,name,"","",8)) <= max_length) - return 0; - if (strlen(fn_format(buff,name,".../","",1)) <= max_length) - { - VOID(strmov(to,buff)); - return 0; - } - for (i= 0 ; i < 3 ; i++) - { - if (strlen(fn_format(buff,to,"","", i == 0 ? 2 : i == 1 ? 1 : 3 )) - <= max_length) - { - VOID(strmov(to,buff)); - return 0; - } - } - to[0]='?'; to[1]=0; /* Can't pack filename */ - return 1; -} /* pack_filename */ diff --git a/mysys/mf_tempfile.c b/mysys/mf_tempfile.c index a724d22964d..d8a67990a52 100644 --- a/mysys/mf_tempfile.c +++ b/mysys/mf_tempfile.c @@ -101,8 +101,7 @@ File create_temp_file(char *to, const char *dir, const char *prefix, errno=my_errno= ENAMETOOLONG; return 1; } - strmov(to,dir); - strmov(convert_dirname(to),prefix_buff); + strmov(convert_dirname(to,dir,NullS),prefix_buff); org_file=mkstemp(to); file=my_register_filename(org_file, to, FILE_BY_MKSTEMP, EE_CANTCREATEFILE, MyFlags); |