f06e641327909d2349f50d7f4c23b7ebaf900c41
[platform/upstream/groff.git] / src / libs / libgroff / getcwd.c
1 /* Copyright (C) 2000-2014  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 3 of the License, or
9 (at your option) any later 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
17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
18
19 /* Partial emulation of getcwd in terms of getwd. */
20
21 #include <sys/param.h>
22 #include <string.h>
23 #include <errno.h>
24
25 char *getwd();
26
27 char *getcwd(buf, size)
28      char *buf;
29      int size;                  /* POSIX says this should be size_t */
30 {
31   if (size <= 0) {
32     errno = EINVAL;
33     return 0;
34   }
35   else {
36     char mybuf[MAXPATHLEN];
37     int saved_errno = errno;
38
39     errno = 0;
40     if (!getwd(mybuf)) {
41       if (errno == 0)
42         ;       /* what to do? */
43       return 0;
44     }
45     errno = saved_errno;
46     if (strlen(mybuf) + 1 > size) {
47       errno = ERANGE;
48       return 0;
49     }
50     strcpy(buf, mybuf);
51     return buf;
52   }
53 }