mariadb/mysys/mf_path.c
unknown 8b3993bc01 Fixed for Ia64 + delayed key creation + a lot of small bug fixes
Docs/Makefile.am:
  Removed typo
Docs/internals.texi:
  Added documentation about filesort
Docs/manual.texi:
  Lots of changes, including information about the password in the mysql.user table
config.h.in:
  ***MISSING WEAVE***
heap/hp_rnext.c:
  Fix of reading of read-next
include/config-win.h:
  Fix for Ia64
include/global.h:
  Fix for Ia64
include/my_base.h:
  Fix for Ia64
include/myisam.h:
  New repair options
isam/_dynrec.c:
  Typo fixes
isam/_search.c:
  Fix for Ia64
merge/rrnd.c:
  Fix of ORDER BY for MERGE tables
myisam/ft_eval.c:
  Fix for Ia64
myisam/ft_parser.c:
  Fix for Ia64
myisam/ft_static.c:
  Portability fixes
myisam/mi_check.c:
  Fix for Ia64 + delay key creation
myisam/mi_locking.c:
  Portability fixes
myisam/myisamdef.h:
  Fixes for automatic table repair
myisam/myisampack.c:
  Version number increment
myisammrg/myrg_rrnd.c:
  Fix of ORDER BY for mymerge tables
mysql.proj:
  Updated
mysys/charset.c:
  Fix for Ia64
mysys/mf_casecnv.c:
  Fix for Ia64
mysys/mf_pack.c:
  Fix for Ia64
mysys/mf_path.c:
  Fix for Ia64
mysys/mf_wfile.c:
  Fix for Ia64
mysys/my_alloc.c:
  Fix for Ia64
mysys/my_lib.c:
  Fix for Ia64
mysys/my_lread.c:
  Fix for Ia64
mysys/my_lwrite.c:
  Fix for Ia64
mysys/my_winthread.c:
  Fix for Ia64
mysys/string.c:
  Fix for Ia64
mysys/thr_alarm.c:
  Fix for Ia64
mysys/thr_rwlock.c:
  Fix of scheduler bug for systems without rw_locks
regex/regcomp.c:
  Fix for Ia64
regex/regex.h:
  Fix for Ia64
regex/regex2.h:
  Fix for Ia64
scripts/mysqlhotcopy.sh:
  Explicit version number (because of bitkeeper)
sql-bench/bench-init.pl.sh:
  New help message
sql-bench/server-cfg.sh:
  Updates for postgreSQL 7.0
sql/ChangeLog:
  Changelog
sql/field.cc:
  Fix of datetime function handling
sql/filesort.cc:
  More comments
sql/gen_lex_hash.cc:
  More options
sql/ha_berkeley.cc:
  Fix for part key reading
sql/ha_berkeley.h:
  Indentation
sql/ha_myisam.cc:
  Fix for delayed key creation
sql/ha_myisam.h:
  Fix for delayed key creation
sql/handler.h:
  Fix for delayed key creation
sql/item_func.cc:
  Fix of crash when using constant expression with UDF functions in WHERE
sql/item_timefunc.cc:
  Fix of datetime function handling
sql/mini_client.cc:
  Portability fix
sql/mysql_priv.h:
  Optimization of select initialization
sql/mysqld.cc:
  Portability fixes, thread cache and min argument for connect_timeout
sql/sql_load.cc:
  Delayed key handling
sql/sql_parse.cc:
  Portability fixes and select initialization optimization
sql/sql_select.cc:
  Small optimization + more comments
sql/sql_table.cc:
  Fix default value adding to blob with alter table + delayed index creation
sql/sql_yacc.yy:
  Optimized select initialization
sql/structs.h:
  Fix for part key read
strings/ctype-sjis.c:
  Fix for Ia64
strings/ctype-tis620.c:
  Fix for Ia64
strings/t_ctype.h:
  bk fix
support-files/mysql.spec.sh:
  Added comment
vio/viotest-ssl.cc:
  bk fix
vio/viotest-sslconnect.cc:
  bk fix
vio/viotest.cc:
  bk fix
BitKeeper/etc/logging_ok:
  Logging to logging@openlogging.org accepted
2000-08-15 20:09:37 +03:00

120 lines
3.4 KiB
C

/* 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>
static char *find_file_in_path(char *to,const char *name);
/* Finds where program can find it's files.
pre_pathname is found by first locking at progname (argv[0]).
if progname contains path the path is returned.
else if progname is found in path, return it
else if progname is given and POSIX environment variable "_" is set
then path is taken from "_".
If filename doesn't contain a path append MY_BASEDIR_VERSION or
MY_BASEDIR if defined, else append "/my/running".
own_path_name_part is concatinated to result.
my_path puts result in to and returns to */
my_string my_path(my_string to, const char *progname,
const char *own_pathname_part)
{
my_string start,end,prog;
DBUG_ENTER("my_path");
start=to; /* Return this */
if (progname && (dirname_part(to, progname) ||
find_file_in_path(to,progname) ||
((prog=getenv("_")) != 0 && dirname_part(to,prog))))
{
VOID(intern_filename(to,to));
if (!test_if_hard_path(to))
{
if (!my_getwd(curr_dir,FN_REFLEN,MYF(0)))
bchange(to,0,curr_dir, (uint) strlen(curr_dir), (uint) strlen(to)+1);
}
}
else
{
if ((end = getenv("MY_BASEDIR_VERSION")) == 0 &&
(end = getenv("MY_BASEDIR")) == 0)
{
#ifdef DEFAULT_BASEDIR
end= (char*) DEFAULT_BASEDIR;
#else
end= (char*) "/my/";
#endif
}
VOID(intern_filename(to,end));
to=strend(to);
if (to != start && to[-1] != FN_LIBCHAR)
*to++ = FN_LIBCHAR;
VOID(strmov(to,own_pathname_part));
}
DBUG_PRINT("exit",("to: '%s'",start));
DBUG_RETURN(start);
} /* my_path */
/* test if file without filename is found in path */
/* Returns to if found and to has dirpart if found, else NullS */
#if defined(MSDOS) || defined(__WIN__)
#define F_OK 0
#define PATH_SEP ';'
#define PROGRAM_EXTENSION ".exe"
#else
#define PATH_SEP ':'
#endif
static char *find_file_in_path(char *to, const char *name)
{
char *path,*pos,dir[2];
const char *ext="";
if (!(path=getenv("PATH")))
return NullS;
dir[0]=FN_LIBCHAR; dir[1]=0;
#ifdef PROGRAM_EXTENSION
if (!fn_ext(name)[0])
ext=PROGRAM_EXTENSION;
#endif
for (pos=path ; (pos=strchr(pos,PATH_SEP)) ; path= ++pos)
{
if (path != pos)
{
strxmov(strnmov(to,path,(uint) (pos-path)),dir,name,ext,NullS);
if (!access(to,F_OK))
{
to[(uint) (pos-path)+1]=0; /* Return path only */
return to;
}
}
}
#ifdef __WIN__
to[0]=FN_CURLIB;
strxmov(to+1,dir,name,ext,NullS);
if (!access(to,F_OK)) /* Test in current dir */
{
to[2]=0; /* Leave ".\" */
return to;
}
#endif
return NullS; /* File not found */
}