]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgfortran/intrinsics/gerror.c
re PR c++/47041 (Internal compiler error in build_data_member_initialization, add...
[thirdparty/gcc.git] / libgfortran / intrinsics / gerror.c
CommitLineData
f77b6ca3 1/* Implementation of the GERROR g77 intrinsic.
748086b7 2 Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc.
f77b6ca3
FXC
3 Contributed by François-Xavier Coudert <coudert@clipper.ens.fr>
4
5This file is part of the GNU Fortran 95 runtime library (libgfortran).
6
7Libgfortran is free software; you can redistribute it and/or
8modify it under the terms of the GNU General Public
9License as published by the Free Software Foundation; either
748086b7 10version 3 of the License, or (at your option) any later version.
f77b6ca3
FXC
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
15GNU General Public License for more details.
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/>. */
f77b6ca3 25
f77b6ca3
FXC
26#include "libgfortran.h"
27
28#include <errno.h>
f77b6ca3 29#include <string.h>
f77b6ca3
FXC
30
31
32/* GERROR (MESSAGE), g77 intrinsic for retrieving the system error
33 message corresponding to the last system error (C errno).
34 CHARACTER(len=*), INTENT(OUT) :: MESSAGE */
35
36#ifdef HAVE_STRERROR
37void PREFIX(gerror) (char *, gfc_charlen_type);
38export_proto_np(PREFIX(gerror));
39
40void
41PREFIX(gerror) (char * msg, gfc_charlen_type msg_len)
42{
43 int p_len;
44 char *p;
45
46 memset (msg, ' ', msg_len); /* Blank the string. */
47
48 p = strerror (errno);
49 if (p == NULL)
50 return;
51
52 p_len = strlen (p);
53 if (msg_len < p_len)
54 memcpy (msg, p, msg_len);
55 else
56 memcpy (msg, p, p_len);
57}
58#endif