[BACK]Return to getcwd.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / gen

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/lib/libc/gen/getcwd.c between version 1.11 and 1.12

version 1.11, 1998/02/26 02:49:21 version 1.12, 1998/03/14 03:27:59
Line 62  __weak_alias(getcwd,_getcwd);
Line 62  __weak_alias(getcwd,_getcwd);
 __weak_alias(realpath,_realpath);  __weak_alias(realpath,_realpath);
 #endif  #endif
   
 static char *getcwd_physical __P((char *, size_t));  
   
 #define ISDOT(dp) \  #define ISDOT(dp) \
         (dp->d_name[0] == '.' && (dp->d_name[1] == '\0' || \          (dp->d_name[0] == '.' && (dp->d_name[1] == '\0' || \
             (dp->d_name[1] == '.' && dp->d_name[2] == '\0')))              (dp->d_name[1] == '.' && dp->d_name[2] == '\0')))
   
 char *  
 getcwd(pt, size)  
         char *pt;  
         size_t size;  
 {  
         char *pwd;  
         size_t pwdlen;  
         dev_t dev;  
         ino_t ino;  
         struct stat s;  
   
         /* Check $PWD -- if it's right, it's fast. */  
         if ((pwd = getenv("PWD")) != NULL && pwd[0] == '/' && !stat(pwd, &s)) {  
                 dev = s.st_dev;  
                 ino = s.st_ino;  
                 if (!stat(".", &s) && dev == s.st_dev && ino == s.st_ino) {  
                         pwdlen = strlen(pwd);  
                         if (size != 0) {  
                                 if (pwdlen + 1 > size) {  
                                         errno = ERANGE;  
                                         return (NULL);  
                                 }  
                         } else if ((pt = malloc(pwdlen + 1)) == NULL)  
                                 return (NULL);  
                         memmove(pt, pwd, pwdlen);  
                         pt[pwdlen] = '\0';  
                         return (pt);  
                 }  
         }  
   
         return (getcwd_physical(pt, size));  
 }  
   
 /*  /*
  * char *realpath(const char *path, char resolved_path[MAXPATHLEN]);   * char *realpath(const char *path, char resolved_path[MAXPATHLEN]);
Line 177  loop:
Line 143  loop:
          * Call the inernal internal version of getcwd which           * Call the inernal internal version of getcwd which
          * does a physical search rather than using the $PWD short-cut           * does a physical search rather than using the $PWD short-cut
          */           */
         if (getcwd_physical(resolved, MAXPATHLEN) == 0)          if (getcwd(resolved, MAXPATHLEN) == 0)
                 goto err1;                  goto err1;
   
         /*          /*
Line 216  err2: (void)close(fd);
Line 182  err2: (void)close(fd);
         return (NULL);          return (NULL);
 }  }
   
 static char *  char *
 getcwd_physical(pt, size)  getcwd(pt, size)
         char *pt;          char *pt;
         size_t size;          size_t size;
 {  {

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.12

CVSweb <webmaster@jp.NetBSD.org>