xref: /NextBSD/contrib/groff/src/libs/libgroff/getcwd.c (revision eb1a5f8de9f7ea602c373a710f531abbf81141c4)
1 /* Copyright (C) 2000 Free Software Foundation, Inc.
2      Written by James Clark (jjc@jclark.com)
3 
4 This file is part of groff.
5 
6 groff is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 2, or (at your option) any later
9 version.
10 
11 groff is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 for more details.
15 
16 You should have received a copy of the GNU General Public License along
17 with groff; see the file COPYING.  If not, write to the Free Software
18 Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
19 
20 /* Partial emulation of getcwd in terms of getwd. */
21 
22 #include <sys/param.h>
23 #include <string.h>
24 #include <errno.h>
25 
26 char *getwd();
27 
getcwd(buf,size)28 char *getcwd(buf, size)
29      char *buf;
30      int size;			/* POSIX says this should be size_t */
31 {
32   if (size <= 0) {
33     errno = EINVAL;
34     return 0;
35   }
36   else {
37     char mybuf[MAXPATHLEN];
38     int saved_errno = errno;
39 
40     errno = 0;
41     if (!getwd(mybuf)) {
42       if (errno == 0)
43 	;       /* what to do? */
44       return 0;
45     }
46     errno = saved_errno;
47     if (strlen(mybuf) + 1 > size) {
48       errno = ERANGE;
49       return 0;
50     }
51     strcpy(buf, mybuf);
52     return buf;
53   }
54 }
55