Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
8f17e00c
Commit
8f17e00c
authored
Feb 24, 2011
by
Janne Blomqvist
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
PR 47802 Use strftime for CTIME and FDATE intrinsics
From-SVN: r170478
parent
ef795fc2
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
91 additions
and
127 deletions
+91
-127
libgfortran/ChangeLog
+18
-0
libgfortran/config.h.in
+3
-6
libgfortran/configure
+8
-6
libgfortran/configure.ac
+3
-3
libgfortran/intrinsics/ctime.c
+35
-94
libgfortran/intrinsics/date_and_time.c
+4
-18
libgfortran/intrinsics/time_1.h
+20
-0
No files found.
libgfortran/ChangeLog
View file @
8f17e00c
2011-02-24 Janne Blomqvist <jb@gcc.gnu.org>
PR libfortran/47802
* config.h.in: Regenerated.
* configure: Regenerated.
* configure.ac: Remove checks for ctime and ctime_r, add check for
strftime.
* intrinsics/date_and_time.c (localtime_r): Move fallback
implementation to time_1.h.
* intrinsics/time_1.h (localtime_r): Fallback implementation.
* intrinsics/ctime.c: Include time_1.h.
(ctime_r): Remove fallback implementation.
(strctime): New function.
(fdate): Use strctime instead of ctime_r.
(fdate_sub): Likewise.
(ctime): Likewise.
(ctime_sub): Likewise.
2011-02-24 Jakub Jelinek <jakub@redhat.com>
PR fortran/47878
...
...
libgfortran/config.h.in
View file @
8f17e00c
...
...
@@ -318,12 +318,6 @@
/* libm includes ctanl */
#undef HAVE_CTANL
/* Define to 1 if you have the `ctime' function. */
#undef HAVE_CTIME
/* Define to 1 if you have the `ctime_r' function. */
#undef HAVE_CTIME_R
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
...
...
@@ -723,6 +717,9 @@
/* Define to 1 if you have the `strerror_r' function. */
#undef HAVE_STRERROR_R
/* Define to 1 if you have the `strftime' function. */
#undef HAVE_STRFTIME
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
...
...
libgfortran/configure
View file @
8f17e00c
...
...
@@ -16312,7 +16312,7 @@ _ACEOF
fi
done
for
ac_func
in
sleep
time
ttyname signal alarm c
time c
lock access fork execl
for
ac_func
in
sleep
time
ttyname signal alarm clock access fork execl
do
:
as_ac_var
=
`
$as_echo
"ac_cv_func_
$ac_func
"
|
$as_tr_sh
`
ac_fn_c_check_func
"
$LINENO
"
"
$ac_func
"
"
$as_ac_var
"
...
...
@@ -16351,7 +16351,7 @@ _ACEOF
fi
done
for
ac_func
in
localtime_r gmtime_r strerror_r getpwuid_r ttyname_r
ctime_r
for
ac_func
in
localtime_r gmtime_r strerror_r getpwuid_r ttyname_r
do
:
as_ac_var
=
`
$as_echo
"ac_cv_func_
$ac_func
"
|
$as_tr_sh
`
ac_fn_c_check_func
"
$LINENO
"
"
$ac_func
"
"
$as_ac_var
"
...
...
@@ -16364,12 +16364,14 @@ _ACEOF
fi
done
for
ac_func
in
clock_gettime
for
ac_func
in
clock_gettime
strftime
do
:
ac_fn_c_check_func
"
$LINENO
"
"clock_gettime"
"ac_cv_func_clock_gettime"
if
test
"x
$ac_cv_func_clock_gettime
"
=
x
""
yes
;
then
:
as_ac_var
=
`
$as_echo
"ac_cv_func_
$ac_func
"
|
$as_tr_sh
`
ac_fn_c_check_func
"
$LINENO
"
"
$ac_func
"
"
$as_ac_var
"
eval
as_val
=
\$
$as_ac_var
if
test
"x
$as_val
"
=
x
""
yes
;
then
:
cat
>>
confdefs.h
<<
_ACEOF
#define
HAVE_CLOCK_GETTIME
1
#define
`
$as_echo
"HAVE_
$ac_func
" |
$as_tr_cpp
`
1
_ACEOF
fi
...
...
libgfortran/configure.ac
View file @
8f17e00c
...
...
@@ -248,11 +248,11 @@ AC_CHECK_MEMBERS([struct stat.st_rdev])
# Check for library functions.
AC_CHECK_FUNCS(getrusage times mkstemp strtof strtold snprintf ftruncate chsize)
AC_CHECK_FUNCS(chdir strerror getlogin gethostname kill link symlink perror)
AC_CHECK_FUNCS(sleep time ttyname signal alarm c
time c
lock access fork execl)
AC_CHECK_FUNCS(sleep time ttyname signal alarm clock access fork execl)
AC_CHECK_FUNCS(wait setmode execvp pipe dup2 close fdopen strcasestr getrlimit)
AC_CHECK_FUNCS(gettimeofday stat fstat lstat getpwuid vsnprintf dup getcwd)
AC_CHECK_FUNCS(localtime_r gmtime_r strerror_r getpwuid_r ttyname_r
ctime_r
)
AC_CHECK_FUNCS(clock_gettime)
AC_CHECK_FUNCS(localtime_r gmtime_r strerror_r getpwuid_r ttyname_r)
AC_CHECK_FUNCS(clock_gettime
strftime
)
# Check for glibc backtrace functions
AC_CHECK_FUNCS(backtrace backtrace_symbols)
...
...
libgfortran/intrinsics/ctime.c
View file @
8f17e00c
...
...
@@ -25,42 +25,31 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "libgfortran.h"
#ifdef TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# ifdef HAVE_TIME_H
# include <time.h>
# endif
# endif
#endif
#include "time_1.h"
#include <string.h>
#ifndef HAVE_CTIME_R
/* Make sure we don't see here a macro. */
#undef ctime_r
/* strftime-like function that fills a C string with %c format which
is identical to ctime in the default locale. As ctime and ctime_r
are poorly specified and their usage not recommended, the
implementation instead uses strftime. */
static
char
*
ctime_r
(
const
time_t
*
timep
,
char
*
buf
__attribute__
((
unused
))
)
static
size_t
strctime
(
char
*
s
,
size_t
max
,
const
time_t
*
timep
)
{
#ifdef HAVE_CTIME
char
*
tmp
=
ctime
(
timep
);
if
(
tmp
)
tmp
=
strcpy
(
buf
,
tmp
);
return
tmp
;
#ifdef HAVE_STRFTIME
struct
tm
res
;
struct
tm
*
ltm
=
localtime_r
(
timep
,
&
res
);
return
strftime
(
s
,
max
,
"%c"
,
ltm
);
#else
return
NULL
;
return
0
;
#endif
}
#endif
/* ctime_r() buffer size needs to be at least 26 bytes. */
#define CSZ 26
/* In the default locale, the date and time representation fits in 26
bytes. However, other locales might need more space. */
#define CSZ 100
extern
void
fdate
(
char
**
,
gfc_charlen_type
*
);
export_proto
(
fdate
);
...
...
@@ -68,29 +57,15 @@ export_proto(fdate);
void
fdate
(
char
**
date
,
gfc_charlen_type
*
date_len
)
{
#if defined(HAVE_TIME) && defined(HAVE_CTIME)
char
cbuf
[
CSZ
];
int
i
;
#if defined(HAVE_TIME)
time_t
now
=
time
(
NULL
);
*
date
=
ctime_r
(
&
now
,
cbuf
);
if
(
*
date
!=
NULL
)
{
*
date
=
strdup
(
*
date
);
*
date_len
=
strlen
(
*
date
);
i
=
0
;
while
((
*
date
)[
i
])
{
if
((
*
date
)[
i
]
==
'\n'
)
(
*
date
)[
i
]
=
' '
;
i
++
;
}
return
;
}
#endif
*
date
=
get_mem
(
CSZ
);
*
date_len
=
strctime
(
*
date
,
CSZ
,
&
now
);
#else
*
date
=
NULL
;
*
date_len
=
0
;
#endif
}
...
...
@@ -100,22 +75,14 @@ export_proto(fdate_sub);
void
fdate_sub
(
char
*
date
,
gfc_charlen_type
date_len
)
{
#if defined(HAVE_TIME) && defined(HAVE_CTIME)
char
cbuf
[
CSZ
];
int
i
;
char
*
d
;
#if defined(HAVE_TIME)
time_t
now
=
time
(
NULL
);
#endif
char
*
s
=
get_mem
(
date_len
+
1
);
size_t
n
=
strctime
(
s
,
date_len
+
1
,
&
now
);
fstrcpy
(
date
,
date_len
,
s
,
n
);
free
(
s
);
#else
memset
(
date
,
' '
,
date_len
);
#if defined(HAVE_TIME) && defined(HAVE_CTIME)
d
=
ctime_r
(
&
now
,
cbuf
);
if
(
d
!=
NULL
)
{
i
=
0
;
while
(
*
d
&&
*
d
!=
'\n'
&&
i
<
date_len
)
date
[
i
++
]
=
*
(
d
++
);
}
#endif
}
...
...
@@ -127,29 +94,15 @@ export_proto_np(PREFIX(ctime));
void
PREFIX
(
ctime
)
(
char
**
date
,
gfc_charlen_type
*
date_len
,
GFC_INTEGER_8
t
)
{
#if defined(HAVE_CTIME)
char
cbuf
[
CSZ
];
#if defined(HAVE_TIME)
time_t
now
=
t
;
int
i
;
*
date
=
ctime_r
(
&
now
,
cbuf
);
if
(
*
date
!=
NULL
)
{
*
date
=
strdup
(
*
date
);
*
date_len
=
strlen
(
*
date
);
i
=
0
;
while
((
*
date
)[
i
])
{
if
((
*
date
)[
i
]
==
'\n'
)
(
*
date
)[
i
]
=
' '
;
i
++
;
}
return
;
}
#endif
*
date
=
get_mem
(
CSZ
);
*
date_len
=
strctime
(
*
date
,
CSZ
,
&
now
);
#else
*
date
=
NULL
;
*
date_len
=
0
;
#endif
}
...
...
@@ -159,21 +112,9 @@ export_proto(ctime_sub);
void
ctime_sub
(
GFC_INTEGER_8
*
t
,
char
*
date
,
gfc_charlen_type
date_len
)
{
#if defined(HAVE_CTIME)
char
cbuf
[
CSZ
];
int
i
;
char
*
d
;
time_t
now
=
*
t
;
#endif
memset
(
date
,
' '
,
date_len
);
#if defined(HAVE_CTIME)
d
=
ctime_r
(
&
now
,
cbuf
);
if
(
d
!=
NULL
)
{
i
=
0
;
while
(
*
d
&&
*
d
!=
'\n'
&&
i
<
date_len
)
date
[
i
++
]
=
*
(
d
++
);
}
#endif
char
*
s
=
get_mem
(
date_len
+
1
);
size_t
n
=
strctime
(
s
,
date_len
+
1
,
&
now
);
fstrcpy
(
date
,
date_len
,
s
,
n
);
free
(
s
);
}
libgfortran/intrinsics/date_and_time.c
View file @
8f17e00c
...
...
@@ -36,24 +36,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#endif
/* If the re-entrant versions of localtime and gmtime are not
available, provide fallback implementations. On some targets where
the _r versions are not available, localtime and gmtime use
thread-local storage so they are threadsafe. */
#ifndef HAVE_LOCALTIME_R
/* If _POSIX is defined localtime_r gets defined by mingw-w64 headers. */
#ifdef localtime_r
#undef localtime_r
#endif
static
struct
tm
*
localtime_r
(
const
time_t
*
timep
,
struct
tm
*
result
)
{
*
result
=
*
localtime
(
timep
);
return
result
;
}
#endif
/* If the re-entrant version of gmtime is not available, provide a
fallback implementation. On some targets where the _r version is
not available, gmtime uses thread-local storage so it's
threadsafe. */
#ifndef HAVE_GMTIME_R
/* If _POSIX is defined gmtime_r gets defined by mingw-w64 headers. */
...
...
libgfortran/intrinsics/time_1.h
View file @
8f17e00c
...
...
@@ -84,6 +84,26 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#endif
/* !HAVE_GETRUSAGE || !HAVE_SYS_RESOURCE_H */
/* If the re-entrant version of localtime is not available, provide a
fallback implementation. On some targets where the _r version is
not available, localtime uses thread-local storage so it's
threadsafe. */
#ifndef HAVE_LOCALTIME_R
/* If _POSIX is defined localtime_r gets defined by mingw-w64 headers. */
#ifdef localtime_r
#undef localtime_r
#endif
static
inline
struct
tm
*
localtime_r
(
const
time_t
*
timep
,
struct
tm
*
result
)
{
*
result
=
*
localtime
(
timep
);
return
result
;
}
#endif
#if defined (__GNUC__) && (__GNUC__ >= 3)
# define ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__))
#else
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment