apparently we now want the checked out tree to be the patched tree?
authorBdale Garbee <bdale@gag.com>
Fri, 15 Jul 2011 20:05:33 +0000 (14:05 -0600)
committerBdale Garbee <bdale@gag.com>
Fri, 15 Jul 2011 20:05:33 +0000 (14:05 -0600)
configure.ac
debian/patches/series
lib/getdtablesize.c [new file with mode: 0644]
m4/.gitignore
m4/getdtablesize.m4 [new file with mode: 0644]
zless.in

index 818dbd9a724c387b4edd7005202b6f57a1c04093..0919132cc5a43de9621a237c6bf589ef12c01dff 100644 (file)
@@ -129,6 +129,12 @@ if test "$gl_gcc_warnings" = yes; then
   AC_SUBST([GNULIB_WARN_CFLAGS])
 fi
 
+gl_FUNC_GETDTABLESIZE
+if test $HAVE_GETDTABLESIZE = 0; then
+  AC_LIBOBJ([getdtablesize])
+fi
+gl_UNISTD_MODULE_INDICATOR([getdtablesize])
+
 # cc -E produces incorrect asm files on SVR4, so postprocess it.
 ASCPPPOST="sed '/^ *#/d; s,//.*,,; s/% /%/g; s/\\. /./g'"
 AC_SUBST([ASCPPPOST])
index f0089155aa528527523f290968f3237b5980db65..6015402a801eff3a1bf5ddcfaa213736ec7ad38b 100644 (file)
@@ -1,2 +1 @@
-getdtablesize-missing.diff
 zless-LESSOPEN.diff
diff --git a/lib/getdtablesize.c b/lib/getdtablesize.c
new file mode 100644 (file)
index 0000000..60e7f5a
--- /dev/null
@@ -0,0 +1,63 @@
+/* getdtablesize() function for platforms that don't have it.
+   Copyright (C) 2008-2011 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <unistd.h>
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+#include <stdio.h>
+
+/* Cache for the previous getdtablesize () result.  */
+static int dtablesize;
+
+int
+getdtablesize (void)
+{
+  if (dtablesize == 0)
+    {
+      /* We are looking for the number N such that the valid file descriptors
+         are 0..N-1.  It can be obtained through a loop as follows:
+           {
+             int fd;
+             for (fd = 3; fd < 65536; fd++)
+               if (dup2 (0, fd) == -1)
+                 break;
+             return fd;
+           }
+         On Windows XP, the result is 2048.
+         The drawback of this loop is that it allocates memory for a libc
+         internal array that is never freed.
+
+         The number N can also be obtained as the upper bound for
+         _getmaxstdio ().  _getmaxstdio () returns the maximum number of open
+         FILE objects.  The sanity check in _setmaxstdio reveals the maximum
+         number of file descriptors.  This too allocates memory, but it is
+         freed when we call _setmaxstdio with the original value.  */
+      int orig_max_stdio = _getmaxstdio ();
+      unsigned int bound;
+      for (bound = 0x10000; _setmaxstdio (bound) < 0; bound = bound / 2)
+        ;
+      _setmaxstdio (orig_max_stdio);
+      dtablesize = bound;
+    }
+  return dtablesize;
+}
+
+#endif
index a5c3278520abf233c1691fa27ed6ce7b23b409e5..e03f2bc4537d3cbba2df64a37b535db9bde26d45 100644 (file)
@@ -1,7 +1,6 @@
 /asm-underscore.m4
 /cloexec.m4
 /configmake.m4
-/getdtablesize.m4
 /gnulib-comp.m4
 /gnulib-tool.m4
 /wchar_h.m4
diff --git a/m4/getdtablesize.m4 b/m4/getdtablesize.m4
new file mode 100644 (file)
index 0000000..40a598b
--- /dev/null
@@ -0,0 +1,14 @@
+# getdtablesize.m4 serial 2
+dnl Copyright (C) 2008-2011 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_GETDTABLESIZE],
+[
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  AC_CHECK_FUNCS_ONCE([getdtablesize])
+  if test $ac_cv_func_getdtablesize != yes; then
+    HAVE_GETDTABLESIZE=0
+  fi
+])
index dbdcfbe156942685d47c85e28cb3b1b24f4b8b95..0aa940f0074139d190f9d7cd77fddcb114759ed3 100644 (file)
--- a/zless.in
+++ b/zless.in
@@ -53,5 +53,5 @@ if test "${LESSMETACHARS+set}" != set; then
   export LESSMETACHARS
 fi
 
-LESSOPEN="|gzip -cdfq -- %s"; export LESSOPEN
+LESSOPEN="|-gzip -cdfq -- %s"; export LESSOPEN
 exec less "$@"