]> granicus.if.org Git - vim/commitdiff
patch 8.1.0371: argument types for select() may be wrong v8.1.0371
authorBram Moolenaar <Bram@vim.org>
Wed, 12 Sep 2018 18:29:09 +0000 (20:29 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 12 Sep 2018 18:29:09 +0000 (20:29 +0200)
Problem:    Argument types for select() may be wrong.
Solution:   Use a configure macro. (Tobias Ulmer)

src/auto/configure
src/config.h.in
src/configure.ac
src/os_unix.c
src/version.c

index 0ab7e2302057cd857139e7d9c1dc8c5d53569b05..74d3e7219717306733dbec87ba2e7bd88d6e8f0f 100755 (executable)
@@ -12630,6 +12630,81 @@ _ACEOF
 fi
 done
 
+for ac_header in sys/select.h sys/socket.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for select" >&5
+$as_echo_n "checking types of arguments for select... " >&6; }
+if ${ac_cv_func_select_args+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  for ac_arg234 in 'fd_set *' 'int *' 'void *'; do
+ for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do
+  for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+#ifdef HAVE_SYS_SELECT_H
+# include <sys/select.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+
+int
+main ()
+{
+extern int select ($ac_arg1,
+                                           $ac_arg234, $ac_arg234, $ac_arg234,
+                                           $ac_arg5);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+ done
+done
+# Provide a safe default value.
+: "${ac_cv_func_select_args=int,int *,struct timeval *}"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_select_args" >&5
+$as_echo "$ac_cv_func_select_args" >&6; }
+ac_save_IFS=$IFS; IFS=','
+set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'`
+IFS=$ac_save_IFS
+shift
+
+cat >>confdefs.h <<_ACEOF
+#define SELECT_TYPE_ARG1 $1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define SELECT_TYPE_ARG234 ($2)
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define SELECT_TYPE_ARG5 ($3)
+_ACEOF
+
+rm -f conftest*
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5
 $as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; }
 if ${ac_cv_sys_largefile_source+:} false; then :
index 00117cf8ca13dd9c74323f45b1d76456ef4b0054..09420d2112f0b582591bb65ed95f5aa956760a58 100644 (file)
 /* Define if you can safely include both <sys/time.h> and <sys/select.h>.  */
 #undef SYS_SELECT_WITH_SYS_TIME
 
+/* Define to a typecast for select() arguments 2, 3 and 4. */
+#undef SELECT_TYPE_ARG234
+
 /* Define if you have /dev/ptc */
 #undef HAVE_DEV_PTC
 
index 8994f3c90a12d86ec2367beb68af52f451508e39..9f17b9c7008fae6039776126bb6be001d22f7111 100644 (file)
@@ -3721,6 +3721,7 @@ AC_CHECK_FUNCS(fchdir fchown fchmod fsync getcwd getpseudotty \
        sigprocmask sigvec strcasecmp strerror strftime stricmp strncasecmp \
        strnicmp strpbrk strtol tgetent towlower towupper iswupper \
        usleep utime utimes mblen ftruncate unsetenv)
+AC_FUNC_SELECT_ARGTYPES
 AC_FUNC_FSEEKO
 
 dnl define _LARGE_FILES, _FILE_OFFSET_BITS and _LARGEFILE_SOURCE when
index f33042675da49772d9fed13bc7bde7d51d9bf219..aee3a35ff7b1b7030559e2fe7f3b030653474af0 100644 (file)
  * changed beyond recognition.
  */
 
-/*
- * Some systems have a prototype for select() that has (int *) instead of
- * (fd_set *), which is wrong. This define removes that prototype. We define
- * our own prototype below.
- * Don't use it for the Mac, it causes a warning for precompiled headers.
- * TODO: use a configure check for precompiled headers?
- */
-#if !defined(__APPLE__) && !defined(__TANDEM)
-# define select select_declared_wrong
-#endif
-
 #include "vim.h"
 
 #ifdef FEAT_MZSCHEME
@@ -54,14 +43,9 @@ static int selinux_enabled = -1;
 # endif
 #endif
 
-/*
- * Use this prototype for select, some include files have a wrong prototype
- */
-#ifndef __TANDEM
+#ifdef __BEOS__
 # undef select
-# ifdef __BEOS__
-#  define select       beos_select
-# endif
+# define select        beos_select
 #endif
 
 #ifdef __CYGWIN__
@@ -77,10 +61,6 @@ static int selinux_enabled = -1;
 # endif
 #endif
 
-#if defined(HAVE_SELECT)
-extern int   select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
-#endif
-
 #ifdef FEAT_MOUSE_GPM
 # include <gpm.h>
 /* <linux/keyboard.h> contains defines conflicting with "keymap.h",
@@ -6316,7 +6296,8 @@ select_eintr:
        if (interrupted != NULL)
            *interrupted = FALSE;
 
-       ret = select(maxfd + 1, &rfds, &wfds, &efds, tvp);
+       ret = select(maxfd + 1, SELECT_TYPE_ARG234 &rfds,
+                     SELECT_TYPE_ARG234 &wfds, SELECT_TYPE_ARG234 &efds, tvp);
        result = ret > 0 && FD_ISSET(fd, &rfds);
        if (result)
            --ret;
index fc93cbf67a8f382fa08ae032b0068254acb50315..88e50c1d14030f7ae57c22e642b95e486fd1f582 100644 (file)
@@ -794,6 +794,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    371,
 /**/
     370,
 /**/