~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to mysys/my_symlink.cc

  • Committer: Eric Lambert
  • Date: 2009-06-16 01:36:01 UTC
  • mto: This revision was merged to the branch mainline in revision 1069.
  • Revision ID: eric.d.lambert@gmail.com-20090616013601-puy8xj5wv8lrxkha
-removed my_realpath from my_symlink and replaced it with calls to posix realpath

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
#include "mysys/mysys_err.h"
18
18
#include <mystrings/m_string.h>
19
19
#include <errno.h>
20
 
#ifdef HAVE_REALPATH
21
 
#include <sys/param.h>
22
 
#include <sys/stat.h>
23
 
#endif
24
 
 
25
 
/*
26
 
  Resolve all symbolic links in path
27
 
  'to' may be equal to 'filename'
28
 
 
29
 
  Because purify gives a lot of UMR errors when using realpath(),
30
 
  this code is disabled when using purify.
31
 
 
32
 
  If MY_RESOLVE_LINK is given, only do realpath if the file is a link.
33
 
*/
34
 
 
35
 
#if defined(SCO)
36
 
#define BUFF_LEN 4097
37
 
#elif defined(MAXPATHLEN)
38
 
#define BUFF_LEN MAXPATHLEN
39
 
#else
40
 
#define BUFF_LEN FN_LEN
41
 
#endif
42
 
 
43
 
int my_realpath(char *to, const char *filename, myf MyFlags)
44
 
{
45
 
#if defined(HAVE_REALPATH) &&  !defined(HAVE_BROKEN_REALPATH)
46
 
  int result=0;
47
 
  char buff[BUFF_LEN];
48
 
  struct stat stat_buff;
49
 
 
50
 
  if (!(MyFlags & MY_RESOLVE_LINK) ||
51
 
      (!lstat(filename,&stat_buff) && S_ISLNK(stat_buff.st_mode)))
52
 
  {
53
 
    char *ptr;
54
 
    if ((ptr=realpath(filename,buff)))
55
 
    {
56
 
      strncpy(to,ptr,FN_REFLEN-1);
57
 
    }
58
 
    else
59
 
    {
60
 
      /*
61
 
        Realpath didn't work;  Use my_load_path() which is a poor substitute
62
 
        original name but will at least be able to resolve paths that starts
63
 
        with '.'.
64
 
      */
65
 
      my_errno=errno;
66
 
      if (MyFlags & MY_WME)
67
 
        my_error(EE_REALPATH, MYF(0), filename, my_errno);
68
 
      my_load_path(to, filename, NULL);
69
 
      result= -1;
70
 
    }
71
 
  }
72
 
  return(result);
73
 
#else
74
 
  my_load_path(to, filename, NULL);
75
 
  return 0;
76
 
#endif
77
 
}
78
20
 
79
21
bool test_if_hard_path(const char *dir_name)
80
22
{