]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Create a new section of pyport.h to hold all external function declarations
authorThomas Wouters <thomas@python.org>
Mon, 24 Jul 2000 16:06:23 +0000 (16:06 +0000)
committerThomas Wouters <thomas@python.org>
Mon, 24 Jul 2000 16:06:23 +0000 (16:06 +0000)
for systems that are missing those declarations from system include files.
Start by moving a pointy-haired ones from their previous locations to the
new section.

(The gethostname() one, for instance, breaks on several systems, because
some define it as (char *, size_t) and some as (char *, int).)

I purposely decided not to include the summary of used #defines like Tim did
in the first section of pyport.h. In my opinion, the number of #defines
likedly to be used by this section would make such an overview unwieldy. I
would suggest documenting the non-obvious ones, though.

Include/pyport.h
Modules/posixmodule.c
Modules/resource.c
Modules/socketmodule.c
Python/sysmodule.c

index 52807a910839918ff82121cd509d355b127077d2..f4daebc6c5b0a7625059e3ad3ee9fadc22294b33 100644 (file)
@@ -74,6 +74,68 @@ extern "C" {
 #define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) (NARROW)(VALUE)
 #endif
 
+
+
+/**************************************************************************
+Prototypes that are missing from the standard include files on some systems
+(and possibly only some versions of such systems.)
+
+Please be conservative with adding new ones, document them and enclose them
+in platform-specific #ifdefs.
+**************************************************************************/
+
+#ifdef SOLARIS
+/* Unchecked */
+extern int gethostname(char *, int);
+#endif
+
+#ifdef __BEOS__
+/* Unchecked */
+/* It's in the libs, but not the headers... - [cjh] */
+int shutdown( int, int ); 
+#endif
+
+#ifdef HAVE__GETPTY
+/* Unchecked */
+extern char * _getpty(int *, int, mode_t, int);
+#endif
+
+#if defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY)
+#if !defined(HAVE_PTY_H) && !defined(HAVE_LIBUTIL_H)
+/* BSDI does not supply a prototype for the 'openpty' and 'forkpty'
+   functions, even though they are included in libutil. */
+#include <termios.h>
+extern int openpty(int *, int *, char *, struct termios *, struct winsize *);
+extern int forkpty(int *, char *, struct termios *, struct winsize *);
+#endif /* !defined(HAVE_PTY_H) && !defined(HAVE_LIBUTIL_H) */
+#endif /* defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) */
+
+
+/* These are pulled from various places. It isn't obvious on what platforms
+   they are necessary, nor what the exact prototype should look like (which
+   is likely to vary between platforms!) If you find you need one of these
+   declarations, please move them to a platform-specific block and include
+   proper prototypes. */
+#if 0
+
+/* From Modules/resource.c */
+extern int getrusage();
+extern int getpagesize();
+
+/* From Python/sysmodule.c and Modules/posixmodule.c */
+extern int fclose(FILE *);
+
+/* From Modules/posixmodule.c */
+extern int fdatasync(int);
+/* XXX These are supposedly for SunOS4.1.3 but "shouldn't hurt elsewhere" */
+extern int rename(const char *, const char *);
+extern int pclose(FILE *);
+extern int lstat(const char *, struct stat *);
+extern int symlink(const char *, const char *);
+extern int fsync(int fd);
+
+#endif /* 0 */
+
 #ifdef __cplusplus
 }
 #endif
index c342dcffb720f1a7c7041f64beca7eb6236f9553..5c94e29ab7cfe29b0527996b0495ec6fec8c5c1e 100644 (file)
@@ -128,14 +128,7 @@ corresponding Unix manual entries for more information on calls.";
 #define UNION_WAIT /* This should really be checked for by autoconf */
 #endif
 
-#ifdef HAVE_UNISTD_H
-/* XXX These are for SunOS4.1.3 but shouldn't hurt elsewhere */
-extern int rename(const char *, const char *);
-extern int pclose(FILE *);
-extern int lstat(const char *, struct stat *);
-extern int symlink(const char *, const char *);
-extern int fsync(int fd);
-#else /* !HAVE_UNISTD_H */
+#ifndef HAVE_UNISTD_H
 #if defined(PYCC_VACPP)
 extern int mkdir(char *);
 #else
@@ -721,8 +714,6 @@ static char posix_fdatasync__doc__[] =
 force write of file with filedescriptor to disk.\n\
  does not force update of metadata.";
 
-extern int fdatasync(int); /* Prototype just in case */
-
 static PyObject *
 posix_fdatasync(PyObject *self, PyObject *args)
 {
@@ -1680,12 +1671,6 @@ posix_fork(PyObject *self, PyObject *args)
 #else
 #ifdef HAVE_LIBUTIL_H
 #include <libutil.h>
-#else
-/* BSDI does not supply a prototype for the 'openpty' and 'forkpty'
-   functions, even though they are included in libutil. */
-#include <termios.h>
-extern int openpty(int *, int *, char *, struct termios *, struct winsize *);
-extern int forkpty(int *, char *, struct termios *, struct winsize *);
 #endif /* HAVE_LIBUTIL_H */
 #endif /* HAVE_PTY_H */
 #endif /* defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) */
@@ -1701,8 +1686,6 @@ posix_openpty(PyObject *self, PyObject *args)
        int master_fd, slave_fd;
 #ifndef HAVE_OPENPTY
        char * slave_name;
-       /* SGI apparently needs this forward declaration */
-       extern char * _getpty(int *, int, mode_t, int);
 #endif
 
        if (!PyArg_ParseTuple(args, ":openpty"))
@@ -1719,7 +1702,7 @@ posix_openpty(PyObject *self, PyObject *args)
        slave_fd = open(slave_name, O_RDWR);
        if (slave_fd < 0)
                return posix_error();
-#endif /* defined(HAVE_OPENPTY) */
+#endif /* HAVE_OPENPTY */
 
        return Py_BuildValue("(ii)", master_fd, slave_fd);
 
@@ -3286,7 +3269,6 @@ Return an open file object connected to a file descriptor.";
 static PyObject *
 posix_fdopen(PyObject *self, PyObject *args)
 {
-       extern int fclose(FILE *);
        int fd;
        char *mode = "r";
        int bufsize = -1;
index 9da87af88d0a46e1865243479f6c073dc75d78f1..76fd73122b7d68968dab493b6ce936bf0b516d3f 100644 (file)
@@ -22,10 +22,6 @@ redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
    but we can't declare the prototype, to avoid errors
    when the header files declare it different.
    Worse, on some Linuxes, getpagesize() returns a size_t... */
-#ifndef linux
-int getrusage();
-int getpagesize();
-#endif
 
 #define doubletime(TV) ((double)(TV).tv_sec + (TV).tv_usec * 0.000001)
 
index 914931fd5f38e0714d74f9b4b19621703555d379..a9bfb26ac4faf985864c7b54cf4ca1a5196bf80e 100644 (file)
@@ -110,10 +110,6 @@ Socket methods:
 #include <unistd.h>
 #endif
 
-#if !defined(MS_WINDOWS) && !defined(PYOS_OS2) && !defined(__BEOS__)
-extern int gethostname(char *, size_t); /* For Solaris, at least */
-#endif
-
 #if defined(PYCC_VACPP)
 #include <types.h>
 #include <io.h>
@@ -129,11 +125,6 @@ extern int gethostname(char *, size_t); /* For Solaris, at least */
 #include <os2.h>
 #endif
 
-#if defined(__BEOS__)
-/* It's in the libs, but not the headers... - [cjh] */
-int shutdown( int, int );
-#endif
-
 #include <sys/types.h>
 #include "mytime.h"
 
@@ -2407,9 +2398,9 @@ shutdown() -- shut down traffic in one or both directions\n\
 
 DL_EXPORT(void)
 #if defined(MS_WINDOWS) || defined(PYOS_OS2) || defined(__BEOS__)
-init_socket()
+init_socket(void)
 #else
-initsocket()
+initsocket(void)
 #endif
 {
        PyObject *m, *d;
index 85118f8f0fe25fb233e9356d95e0a7ff46c7b1ac..8883ba1d87e291b7f7a67afbb88b68ca63e246e0 100644 (file)
@@ -385,7 +385,6 @@ settrace() -- set the global debug tracing function\n\
 PyObject *
 _PySys_Init(void)
 {
-       extern int fclose(FILE *);
        PyObject *m, *v, *sysdict;
        PyObject *sysin, *sysout, *syserr;
        char *s;