]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/groff/src/libs/libgroff/getcwd.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / groff / src / libs / libgroff / getcwd.c
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
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 }