Move ftime to a compatibility symbol

It was made deprecated on 2.31, so it moves to compat symbol after
two releases.  It was also removed from exported symbol for riscv32
(since ABI will be supported on for 2.33).

Checked on x86_64-linux-gnu and i686-linux-gnu.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
This commit is contained in:
Adhemerval Zanella 2020-07-24 13:42:01 -03:00
parent 01f33a9acc
commit 14633d3e56
6 changed files with 50 additions and 79 deletions

View File

@ -1 +0,0 @@
#include <time/sys/timeb.h>

View File

@ -795,7 +795,6 @@ GLIBC_2.33 fsync F
GLIBC_2.33 ftell F
GLIBC_2.33 ftello F
GLIBC_2.33 ftello64 F
GLIBC_2.33 ftime F
GLIBC_2.33 ftok F
GLIBC_2.33 ftruncate F
GLIBC_2.33 ftruncate64 F

View File

@ -22,7 +22,7 @@ subdir := time
include ../Makeconfig
headers := time.h sys/time.h sys/timeb.h bits/time.h \
headers := time.h sys/time.h bits/time.h \
bits/types/clockid_t.h bits/types/clock_t.h \
bits/types/struct_itimerspec.h \
bits/types/struct_timespec.h bits/types/struct_timeval.h \
@ -45,9 +45,10 @@ aux := era alt_digit lc-time-cleanup
tests := test_time clocktest tst-posixtz tst-strptime tst_wcsftime \
tst-getdate tst-mktime tst-mktime2 tst-ftime_l tst-strftime \
tst-mktime3 tst-strptime2 bug-asctime bug-asctime_r bug-mktime1 \
tst-strptime3 bug-getdate1 tst-strptime-whitespace tst-ftime \
tst-strptime3 bug-getdate1 tst-strptime-whitespace \
tst-tzname tst-y2039 bug-mktime4 tst-strftime2 tst-strftime3 \
tst-clock tst-clock2 tst-clock_nanosleep tst-cpuclock1
tests-internal := tst-ftime
include ../Rules

View File

@ -16,11 +16,23 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <sys/timeb.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_33)
#include <time.h>
struct timeb
{
time_t time; /* Seconds since epoch, as from `time'. */
unsigned short int millitm; /* Additional milliseconds. */
short int timezone; /* Minutes west of GMT. */
short int dstflag; /* Nonzero if Daylight Savings Time used. */
};
int
ftime (struct timeb *timebuf)
attribute_compat_text_section
__ftime (struct timeb *timebuf)
{
struct timespec ts;
__clock_gettime (CLOCK_REALTIME, &ts);
@ -31,3 +43,6 @@ ftime (struct timeb *timebuf)
timebuf->dstflag = 0;
return 0;
}
compat_symbol (libc, __ftime, ftime, GLIBC_2_0);
#endif

View File

@ -1,44 +0,0 @@
/* Copyright (C) 1994-2020 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#ifndef _SYS_TIMEB_H
#define _SYS_TIMEB_H 1
#include <features.h>
#include <bits/types/time_t.h>
__BEGIN_DECLS
/* Structure returned by the `ftime' function. */
struct timeb
{
time_t time; /* Seconds since epoch, as from `time'. */
unsigned short int millitm; /* Additional milliseconds. */
short int timezone; /* Minutes west of GMT. */
short int dstflag; /* Nonzero if Daylight Savings Time used. */
};
/* Fill in TIMEBUF with information about the current time. */
extern int ftime (struct timeb *__timebuf)
__nonnull ((1)) __attribute_deprecated__;
__END_DECLS
#endif /* sys/timeb.h */

View File

@ -16,9 +16,23 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <sys/timeb.h>
#include <stdio.h>
#include <libc-diag.h>
#include <shlib-compat.h>
#if TEST_COMPAT (libc, GLIBC_2_0, GLIBC_2_33)
#include <time.h>
#include <support/check.h>
compat_symbol_reference (libc, ftime, ftime, GLIBC_2_0);
struct timeb
{
time_t time;
unsigned short int millitm;
short int timezone;
short int dstflag;
};
extern int ftime (struct timeb *__timebuf);
static int
do_test (void)
@ -30,36 +44,23 @@ do_test (void)
{
prev = curr;
/* ftime was deprecated on 2.31. */
DIAG_PUSH_NEEDS_COMMENT;
DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wdeprecated-declarations");
if (ftime (&curr))
{
printf ("ftime returned an error\n");
return 1;
}
DIAG_POP_NEEDS_COMMENT;
if (curr.time < prev.time)
{
printf ("ftime's time flowed backwards\n");
return 1;
}
if (curr.time == prev.time
&& curr.millitm < prev.millitm)
{
printf ("ftime's millitm flowed backwards\n");
return 1;
}
/* ftime was deprecated on 2.31 and removed on 2.33. */
TEST_COMPARE (ftime (&curr), 0);
TEST_VERIFY_EXIT (curr.time >= prev.time);
if (curr.time == prev.time)
TEST_VERIFY_EXIT (curr.millitm >= prev.millitm);
if (curr.time > prev.time)
sec ++;
}
return 0;
}
#else
static int
do_test (void)
{
return EXIT_UNSUPPORTED;
}
#endif
#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"
#include <support/test-driver.c>