Skip to content

Commit

Permalink
pythongh-108765: Python.h no longer includes <sys/time.h> (python#108775
Browse files Browse the repository at this point in the history
)

Python.h no longer includes <time.h>, <sys/select.h> and <sys/time.h>
standard header files.

* Add <time.h> include to xxsubtype.c.
* Add <sys/time.h> include to posixmodule.c and semaphore.c.
* readline.c includes <sys/select.h> instead of <sys/time.h>.
* resource.c no longer includes <time.h> and <sys/time.h>.
  • Loading branch information
vstinner committed Sep 2, 2023
1 parent bdc3c88 commit e7de0c5
Show file tree
Hide file tree
Showing 11 changed files with 43 additions and 37 deletions.
8 changes: 8 additions & 0 deletions Doc/whatsnew/3.13.rst
Original file line number Diff line number Diff line change
Expand Up @@ -934,6 +934,14 @@ Porting to Python 3.13
functions: ``close()``, ``getpagesize()``, ``getpid()`` and ``sysconf()``.
(Contributed by Victor Stinner in :gh:`108765`.)

* ``Python.h`` no longer includes these standard header files: ``<time.h>``,
``<sys/select.h>`` and ``<sys/time.h>``. If needed, they should now be
included explicitly. For example, ``<time.h>`` provides the ``clock()`` and
``gmtime()`` functions, ``<sys/select.h>`` provides the ``select()``
function, and ``<sys/time.h>`` provides the ``futimes()``, ``gettimeofday()``
and ``setitimer()`` functions.
(Contributed by Victor Stinner in :gh:`108765`.)

Deprecated
----------

Expand Down
19 changes: 0 additions & 19 deletions Include/pyport.h
Original file line number Diff line number Diff line change
Expand Up @@ -184,25 +184,6 @@ typedef Py_ssize_t Py_ssize_clean_t;
# define Py_MEMCPY memcpy
#endif

/********************************************
* WRAPPER FOR <time.h> and/or <sys/time.h> *
********************************************/

#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#include <time.h>

/******************************
* WRAPPER FOR <sys/select.h> *
******************************/

/* NB caller must include <sys/types.h> */

#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif /* !HAVE_SYS_SELECT_H */

/*******************************
* stat() and fstat() fiddling *
*******************************/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
``Python.h`` no longer includes these standard header files: ``<time.h>``,
``<sys/select.h>`` and ``<sys/time.h>``. If needed, they should now be included
explicitly. For example, ``<time.h>`` provides the ``clock()`` and ``gmtime()``
functions, ``<sys/select.h>`` provides the ``select()`` function, and
``<sys/time.h>`` provides the ``futimes()``, ``gettimeofday()`` and
``setitimer()`` functions. Patch by Victor Stinner.
4 changes: 4 additions & 0 deletions Modules/_multiprocessing/semaphore.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@

#include "multiprocessing.h"

#ifdef HAVE_SYS_TIME_H
# include <sys/time.h> // gettimeofday()
#endif

#ifdef HAVE_MP_SEMAPHORE

enum { RECURSIVE_MUTEX, SEMAPHORE };
Expand Down
4 changes: 4 additions & 0 deletions Modules/posixmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@

#include <stdio.h> // ctermid()
#include <stdlib.h> // system()
#ifdef HAVE_SYS_TIME_H
# include <sys/time.h> // futimes()
#endif


// SGI apparently needs this forward declaration
#ifdef HAVE__GETPTY
Expand Down
16 changes: 8 additions & 8 deletions Modules/readline.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,21 @@
#include "Python.h"
#include "pycore_pylifecycle.h" // _Py_SetLocaleFromEnv()

#include <errno.h>
#include <signal.h>
#include <stddef.h>
#include <errno.h> // errno
#include <signal.h> // SIGWINCH
#include <stdlib.h> // free()
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#include <string.h> // strdup()
#ifdef HAVE_SYS_SELECT_H
# include <sys/select.h> // select()
#endif
#include <time.h>

#if defined(HAVE_SETLOCALE)
/* GNU readline() mistakenly sets the LC_CTYPE locale.
* This is evil. Only the user or the app's main() should do this!
* We must save and restore the locale around the rl_initialize() call.
*/
#define SAVE_LOCALE
#include <locale.h>
# include <locale.h> // setlocale()
#endif

#ifdef SAVE_LOCALE
Expand Down Expand Up @@ -1333,7 +1332,8 @@ readline_until_enter_or_signal(const char *prompt, int *signal)
int has_input = 0, err = 0;

while (!has_input)
{ struct timeval timeout = {0, 100000}; /* 0.1 seconds */
{
struct timeval timeout = {0, 100000}; // 100 ms (0.1 seconds)

/* [Bug #1552726] Only limit the pause if an input hook has been
defined. */
Expand Down
4 changes: 0 additions & 4 deletions Modules/resource.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@
#include <errno.h> // errno
#include <string.h>
#include <sys/resource.h> // getrusage()
#ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
#endif
#include <time.h>
#include <unistd.h> // getpagesize()

/* On some systems, these aren't in any header file.
Expand Down
10 changes: 5 additions & 5 deletions Modules/signalmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@
#include "pycore_signal.h" // _Py_RestoreSignals()

#ifndef MS_WINDOWS
# include "posixmodule.h"
# include "posixmodule.h" // _PyLong_FromUid()
#endif
#ifdef MS_WINDOWS
# include "socketmodule.h" /* needed for SOCKET_T */
# include "socketmodule.h" // SOCKET_T
#endif

#ifdef MS_WINDOWS
Expand All @@ -29,16 +29,16 @@
#endif

#ifdef HAVE_SIGNAL_H
# include <signal.h>
# include <signal.h> // sigaction()
#endif
#ifdef HAVE_SYS_SYSCALL_H
# include <sys/syscall.h>
# include <sys/syscall.h> // __NR_pidfd_send_signal
#endif
#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
#ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
# include <sys/time.h> // setitimer()
#endif

#if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK)
Expand Down
2 changes: 1 addition & 1 deletion Modules/timemodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include "pycore_runtime.h" // _Py_ID()

#include <ctype.h>

#include <time.h> // clock()
#ifdef HAVE_SYS_TIMES_H
# include <sys/times.h>
#endif
Expand Down
2 changes: 2 additions & 0 deletions Modules/xxsubtype.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#include "Python.h"

#include <stddef.h> // offsetof()
#include <time.h> // clock()


PyDoc_STRVAR(xxsubtype__doc__,
Expand Down
5 changes: 5 additions & 0 deletions Python/pytime.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
#include "Python.h"
#include "pycore_time.h" // _PyTime_t

#include <time.h> // gmtime_r()
#ifdef HAVE_SYS_TIME_H
# include <sys/time.h> // gettimeofday()
#endif
#ifdef MS_WINDOWS
# include <winsock2.h> // struct timeval
#endif
Expand Down

0 comments on commit e7de0c5

Please sign in to comment.