[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.3 and 1.4

version 1.3, 1993/08/26 00:44:36 version 1.4, 1995/02/27 04:12:20
Line 1 
Line 1 
   /*      $NetBSD$        */
   
 /*  /*
  * Copyright (c) 1989, 1991 The Regents of the University of California.   * Copyright (c) 1989, 1991, 1993
  * All rights reserved.   *      The Regents of the University of California.  All rights reserved.
  *   *
  * Redistribution and use in source and binary forms, with or without   * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions   * modification, are permitted provided that the following conditions
Line 32 
Line 34 
  */   */
   
 #if defined(LIBC_SCCS) && !defined(lint)  #if defined(LIBC_SCCS) && !defined(lint)
 /*static char *sccsid = "from: @(#)getcwd.c     5.11 (Berkeley) 2/24/91";*/  #if 0
 static char *rcsid = "$Id$";  static char sccsid[] = "@(#)getcwd.c    8.1 (Berkeley) 6/4/93";
   #else
   static char rcsid[] = "$NetBSD$";
   #endif
 #endif /* LIBC_SCCS and not lint */  #endif /* LIBC_SCCS and not lint */
   
 #include <sys/param.h>  #include <sys/param.h>
 #include <sys/stat.h>  #include <sys/stat.h>
   
 #include <errno.h>  #include <errno.h>
 #include <dirent.h>  #include <dirent.h>
 #include <stdio.h>  #include <stdio.h>
Line 76  getcwd(pt, size)
Line 82  getcwd(pt, size)
                 ptsize = 0;                  ptsize = 0;
                 if (!size) {                  if (!size) {
                         errno = EINVAL;                          errno = EINVAL;
                         return((char *)NULL);                          return (NULL);
                 }                  }
                 ept = pt + size;                  ept = pt + size;
         } else {          } else {
                 if (!(pt = (char *)malloc(ptsize = 1024 - 4)))                  if ((pt = malloc(ptsize = 1024 - 4)) == NULL)
                         return((char *)NULL);                          return (NULL);
                 ept = pt + ptsize;                  ept = pt + ptsize;
         }          }
         bpt = ept - 1;          bpt = ept - 1;
Line 92  getcwd(pt, size)
Line 98  getcwd(pt, size)
          * Should always be enough (it's 340 levels).  If it's not, allocate           * Should always be enough (it's 340 levels).  If it's not, allocate
          * as necessary.  Special * case the first stat, it's ".", not "..".           * as necessary.  Special * case the first stat, it's ".", not "..".
          */           */
         if (!(up = (char *)malloc(upsize = 1024 - 4)))          if ((up = malloc(upsize = 1024 - 4)) == NULL)
                 goto err;                  goto err;
         eup = up + MAXPATHLEN;          eup = up + MAXPATHLEN;
         bup = up;          bup = up;
Line 126  getcwd(pt, size)
Line 132  getcwd(pt, size)
                          */                           */
                         (void)bcopy(bpt, pt, ept - bpt);                          (void)bcopy(bpt, pt, ept - bpt);
                         free(up);                          free(up);
                         return(pt);                          return (pt);
                 }                  }
   
                 /*                  /*
Line 135  getcwd(pt, size)
Line 141  getcwd(pt, size)
                  * possible component name, plus a trailing NULL.                   * possible component name, plus a trailing NULL.
                  */                   */
                 if (bup + 3  + MAXNAMLEN + 1 >= eup) {                  if (bup + 3  + MAXNAMLEN + 1 >= eup) {
                         if (!(up = (char *)realloc(up, upsize *= 2)))                          if ((up = realloc(up, upsize *= 2)) == NULL)
                                 goto err;                                  goto err;
                           bup = up;
                         eup = up + upsize;                          eup = up + upsize;
                 }                  }
                 *bup++ = '.';                  *bup++ = '.';
Line 195  getcwd(pt, size)
Line 202  getcwd(pt, size)
                         }                          }
                         off = bpt - pt;                          off = bpt - pt;
                         len = ept - bpt;                          len = ept - bpt;
                         if (!(pt = (char *)realloc(pt, ptsize *= 2)))                          if ((pt = realloc(pt, ptsize *= 2)) == NULL)
                                 goto err;                                  goto err;
                         bpt = pt + off;                          bpt = pt + off;
                         ept = pt + ptsize;                          ept = pt + ptsize;
Line 225  err:
Line 232  err:
         if (ptsize)          if (ptsize)
                 free(pt);                  free(pt);
         free(up);          free(up);
         return((char *)NULL);          return (NULL);
 }  }

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

CVSweb <webmaster@jp.NetBSD.org>