Imported Upstream version 2.5.1
[debian/amanda] / common-src / getcwd.c
1 /* 
2  * getcwd.c --
3  *
4  *      This file provides an implementation of the getcwd procedure
5  *      that uses getwd, for systems with getwd but without getcwd.
6  *
7  * Copyright (c) 1993 The Regents of the University of California.
8  * All rights reserved.
9  *
10  * Permission is hereby granted, without written agreement and without
11  * license or royalty fees, to use, copy, modify, and distribute this
12  * software and its documentation for any purpose, provided that the
13  * above copyright notice and the following two paragraphs appear in
14  * all copies of this software.
15  * 
16  * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
17  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
18  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
19  * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
20  *
21  * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
22  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
23  * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
24  * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
25  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
26  */
27
28 /* $Id: getcwd.c,v 1.5 2006/05/25 01:47:12 johnfranks Exp $ */
29
30 #ifndef lint
31 static char rcsid[] = "$Header: /cvsroot/amanda/amanda/common-src/getcwd.c,v 1.5 2006/05/25 01:47:12 johnfranks Exp $ SPRITE (Berkeley)";
32 #endif /* not lint */
33
34 #include "amanda.h"
35
36 extern char *getwd();
37 extern int errno;
38
39 char *
40 getcwd(buf, size)
41     char *buf;                  /* Where to put path for current directory. */
42     size_t size;                        /* Number of bytes at buf. */
43 {
44     char realBuffer[MAXPATHLEN+1];
45     int length;
46
47     if (getwd(realBuffer) == NULL) {
48         /*
49          * There's not much we can do besides guess at an errno to
50          * use for the result (the error message in realBuffer isn't
51          * much use...).
52          */
53
54         errno = EACCES;
55         return NULL;
56     }
57     length = strlen(realBuffer);
58     if (length >= size) {
59         errno = ERANGE;
60         return NULL;
61     }
62     strncpy(buf, realBuffer, size-1);
63     buf[size-1] = '\0';
64     return buf;
65 }