(root)/
binutils-2.41/
libiberty/
getcwd.c
       1  /* Emulate getcwd using getwd.
       2     This function is in the public domain. */
       3  
       4  /*
       5  
       6  @deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len})
       7  
       8  Copy the absolute pathname for the current working directory into
       9  @var{pathname}, which is assumed to point to a buffer of at least
      10  @var{len} bytes, and return a pointer to the buffer.  If the current
      11  directory's path doesn't fit in @var{len} characters, the result is
      12  @code{NULL} and @code{errno} is set.  If @var{pathname} is a null pointer,
      13  @code{getcwd} will obtain @var{len} bytes of space using
      14  @code{malloc}.
      15  
      16  @end deftypefn
      17  
      18  */
      19  
      20  #include "config.h"
      21  
      22  #ifdef HAVE_SYS_PARAM_H
      23  #include <sys/param.h>
      24  #endif
      25  #include <errno.h>
      26  #ifdef HAVE_STRING_H
      27  #include <string.h>
      28  #endif
      29  #ifdef HAVE_STDLIB_H
      30  #include <stdlib.h>
      31  #endif
      32  
      33  extern char *getwd ();
      34  extern int errno;
      35  
      36  #ifndef MAXPATHLEN
      37  #define MAXPATHLEN 1024
      38  #endif
      39  
      40  char *
      41  getcwd (char *buf, size_t len)
      42  {
      43    char ourbuf[MAXPATHLEN];
      44    char *result;
      45  
      46    result = getwd (ourbuf);
      47    if (result) {
      48      if (strlen (ourbuf) >= len) {
      49        errno = ERANGE;
      50        return 0;
      51      }
      52      if (!buf) {
      53         buf = (char*)malloc(len);
      54         if (!buf) {
      55             errno = ENOMEM;
      56  	   return 0;
      57         }
      58      }
      59      strcpy (buf, ourbuf);
      60    }
      61    return buf;
      62  }