home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / gnu / uucp-1.04 / unix / getcwd.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-02-13  |  865 b   |  60 lines

  1. /* getcwd.c
  2.    Replacement for the getcwd function that just calls /bin/pwd.  */
  3.  
  4. #include "uucp.h"
  5.  
  6. #include "sysdep.h"
  7.  
  8. #include <errno.h>
  9.  
  10. char *
  11. getcwd (zbuf, cbuf)
  12.      char *zbuf;
  13.      size_t cbuf;
  14. {
  15.   const char *azargs[2];
  16.   FILE *e;
  17.   pid_t ipid;
  18.   int cread;
  19.   int ierr;
  20.  
  21.   azargs[0] = PWD_PROGRAM;
  22.   azargs[1] = NULL;
  23.   e = espopen (azargs, TRUE, &ipid);
  24.   if (e == NULL)
  25.     return NULL;
  26.  
  27.   ierr = 0;
  28.  
  29.   cread = fread (zbuf, sizeof (char), cbuf, e);
  30.   if (cread == 0)
  31.     ierr = errno;
  32.  
  33.   (void) fclose (e);
  34.  
  35.   if (ixswait ((unsigned long) ipid, (const char *) NULL) != 0)
  36.     {
  37.       ierr = EACCES;
  38.       cread = 0;
  39.     }
  40.  
  41.   if (cread != 0)
  42.     {
  43.       if (zbuf[cread - 1] == '\n')
  44.     zbuf[cread - 1] = '\0';
  45.       else
  46.     {
  47.       ierr = ERANGE;
  48.       cread = 0;
  49.     }
  50.     }
  51.   
  52.   if (cread == 0)
  53.     {
  54.       errno = ierr;
  55.       return NULL;
  56.     }
  57.  
  58.   return zbuf;
  59. }
  60.