]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgfortran/intrinsics/getcwd.c
Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception.
[thirdparty/gcc.git] / libgfortran / intrinsics / getcwd.c
CommitLineData
a8c60d7f 1/* Implementation of the GETCWD intrinsic.
748086b7 2 Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
a8c60d7f
SK
3 Contributed by Steven G. Kargl <kargls@comcast.net>.
4
5This file is part of the GNU Fortran 95 runtime library (libgfortran).
6
7Libgfortran is free software; you can redistribute it and/or
57dea9f6 8modify it under the terms of the GNU General Public
a8c60d7f 9License as published by the Free Software Foundation; either
748086b7 10version 3 of the License, or (at your option) any later version.
a8c60d7f
SK
11
12Libgfortran is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
57dea9f6 15GNU General Public License for more details.
a8c60d7f 16
748086b7
JJ
17Under Section 7 of GPL version 3, you are granted additional
18permissions described in the GCC Runtime Library Exception, version
193.1, as published by the Free Software Foundation.
20
21You should have received a copy of the GNU General Public License and
22a copy of the GCC Runtime Library Exception along with this program;
23see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
24<http://www.gnu.org/licenses/>. */
a8c60d7f 25
a8c60d7f
SK
26#include "libgfortran.h"
27
36ae8a61
FXC
28#include <string.h>
29#include <errno.h>
30
a8c60d7f
SK
31#ifdef HAVE_UNISTD_H
32#include <unistd.h>
33#endif
a8c60d7f 34
2515e5a7
FXC
35#ifdef HAVE_GETCWD
36
7d7b8bfe
RH
37extern void getcwd_i4_sub (char *, GFC_INTEGER_4 *, gfc_charlen_type);
38iexport_proto(getcwd_i4_sub);
39
a8c60d7f 40void
7d7b8bfe 41getcwd_i4_sub (char *cwd, GFC_INTEGER_4 *status, gfc_charlen_type cwd_len)
a8c60d7f 42{
deeab820 43 char str[cwd_len + 1];
a8c60d7f
SK
44 GFC_INTEGER_4 stat;
45
46 memset(cwd, ' ', (size_t) cwd_len);
47
48 if (!getcwd (str, (size_t) cwd_len + 1))
49 stat = errno;
50 else
51 {
52 stat = 0;
53 memcpy (cwd, str, strlen (str));
54 }
deeab820 55 if (status != NULL)
a8c60d7f
SK
56 *status = stat;
57}
7d7b8bfe
RH
58iexport(getcwd_i4_sub);
59
60extern void getcwd_i8_sub (char *, GFC_INTEGER_8 *, gfc_charlen_type);
61export_proto(getcwd_i8_sub);
a8c60d7f
SK
62
63void
7d7b8bfe 64getcwd_i8_sub (char *cwd, GFC_INTEGER_8 *status, gfc_charlen_type cwd_len)
a8c60d7f
SK
65{
66 GFC_INTEGER_4 status4;
7d7b8bfe 67 getcwd_i4_sub (cwd, &status4, cwd_len);
a8c60d7f
SK
68 if (status)
69 *status = status4;
70}
71
7d7b8bfe
RH
72extern GFC_INTEGER_4 PREFIX(getcwd) (char *, gfc_charlen_type);
73export_proto_np(PREFIX(getcwd));
74
a8c60d7f 75GFC_INTEGER_4
7d7b8bfe 76PREFIX(getcwd) (char *cwd, gfc_charlen_type cwd_len)
a8c60d7f
SK
77{
78 GFC_INTEGER_4 status;
7d7b8bfe 79 getcwd_i4_sub (cwd, &status, cwd_len);
a8c60d7f
SK
80 return status;
81}
2515e5a7
FXC
82
83#endif