diff options
author | MySQL Team <mysql@php.net> | 2000-10-20 22:26:48 +0000 |
---|---|---|
committer | MySQL Team <mysql@php.net> | 2000-10-20 22:26:48 +0000 |
commit | a2dbb10eb14801370522ec248e1d819eb38a83a2 (patch) | |
tree | c3888dc986fa7baa6937b38d485af20d8ee81d9d /ext/mysql/libmysql/mf_pack.c | |
parent | ebaf484830ab5c7a0e14a9b43a174916330cd031 (diff) | |
download | php-git-a2dbb10eb14801370522ec248e1d819eb38a83a2.tar.gz |
Update libmysql to 3.23 version. No major changes visible to the user - mostly
bug fixes and other maintenance-oriented changes.
Diffstat (limited to 'ext/mysql/libmysql/mf_pack.c')
-rw-r--r-- | ext/mysql/libmysql/mf_pack.c | 60 |
1 files changed, 51 insertions, 9 deletions
diff --git a/ext/mysql/libmysql/mf_pack.c b/ext/mysql/libmysql/mf_pack.c index 3dab1621f5..030ca1dcad 100644 --- a/ext/mysql/libmysql/mf_pack.c +++ b/ext/mysql/libmysql/mf_pack.c @@ -1,5 +1,5 @@ -/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB - This file is public domain and comes with NO WARRANTY of any kind */ +/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB +This file is public domain and comes with NO WARRANTY of any kind */ #include "mysys_priv.h" #include <m_string.h> @@ -39,13 +39,13 @@ void pack_dirname(my_string to, const char *from) LINT_INIT(buff_length); if (!(cwd_err= my_getwd(buff,FN_REFLEN,MYF(0)))) { - buff_length=strlen(buff); + buff_length= (uint) strlen(buff); d_length=(uint) (start-to); if ((start == to || (buff_length == d_length && !bcmp(buff,start,d_length))) && *start != FN_LIBCHAR && *start) { /* Put current dir before */ - bchange(to,d_length,buff,buff_length,strlen(to)+1); + bchange(to,d_length,buff,buff_length,(uint) strlen(to)+1); } } @@ -54,7 +54,7 @@ void pack_dirname(my_string to, const char *from) length=0; if (home_dir) { - length=strlen(home_dir); + length= (uint) strlen(home_dir); if (home_dir[length-1] == FN_LIBCHAR) length--; /* Don't test last '/' */ } @@ -78,7 +78,7 @@ void pack_dirname(my_string to, const char *from) } if (is_prefix(to,buff)) { - length=strlen(buff); + length= (uint) strlen(buff); if (to[length]) (void) strmov_overlapp(to,to+length); /* Remove everything before */ else @@ -198,6 +198,44 @@ uint cleanup_dirname(register my_string to, const char *from) } /* cleanup_dirname */ + /* + On system where you don't have symbolic links, the following + code will allow you to create a file: + directory-name.lnk that should contain the real path + to the directory. This will be used if the directory name + doesn't exists + */ + + +my_bool my_use_symdir=0; /* Set this if you want to use symdirs */ + +#ifdef USE_SYMDIR +void symdirget(char *dir) +{ + char buff[FN_REFLEN]; + char *pos=strend(dir); + if (dir[0] && pos[-1] != FN_DEVCHAR && access(dir, F_OK)) + { + FILE *fp; + char temp= *(--pos); /* May be "/" or "\" */ + strmov(pos,".sym"); + fp = my_fopen(dir, O_RDONLY,MYF(0)); + *pos++=temp; *pos=0; /* Restore old filename */ + if (fp) + { + if (fgets(buff, sizeof(buff), fp)) + { + for (pos=strend(buff); + pos > buff && (iscntrl(pos[-1]) || isspace(pos[-1])) ; + pos --); + strmake(dir,buff, (uint) (pos-buff)); + } + my_fclose(fp,MYF(0)); + } + } +} +#endif /* USE_SYMDIR */ + /* Unpacks dirname to name that can be used by open... */ /* Make that last char of to is '/' if from not empty and from doesn't end in FN_DEVCHAR */ @@ -209,11 +247,11 @@ uint unpack_dirname(my_string to, const char *from) /* to may be == from */ { uint length,h_length; - char buff[FN_REFLEN+1],*suffix,*tilde_expansion; + char buff[FN_REFLEN+1+4],*suffix,*tilde_expansion; DBUG_ENTER("unpack_dirname"); (void) intern_filename(buff,from); /* Change to intern name */ - length=strlen(buff); /* Fix that '/' is last */ + length= (uint) strlen(buff); /* Fix that '/' is last */ if (length && #ifdef FN_DEVCHAR buff[length-1] != FN_DEVCHAR && @@ -231,7 +269,7 @@ uint unpack_dirname(my_string to, const char *from) if (tilde_expansion) { length-=(uint) (suffix-buff)-1; - if (length+(h_length=strlen(tilde_expansion)) <= FN_REFLEN) + if (length+(h_length= (uint) strlen(tilde_expansion)) <= FN_REFLEN) { if (tilde_expansion[h_length-1] == FN_LIBCHAR) h_length--; @@ -243,6 +281,10 @@ uint unpack_dirname(my_string to, const char *from) } } } +#ifdef USE_SYMDIR + if (my_use_symdir) + symdirget(buff); +#endif DBUG_RETURN(system_filename(to,buff)); /* Fix for open */ } /* unpack_dirname */ |