bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] use unlocked io in getdelim


From: Paolo Bonzini
Subject: [PATCH] use unlocked io in getdelim
Date: Wed, 27 Aug 2008 13:48:15 +0200
User-agent: Thunderbird 2.0.0.16 (Macintosh/20080707)

Under MacOS, getc is not a macro, only getc_unlocked is.  This patch
does two things: 1) it makes getdelim use getc_unlocked if it can wrap
the calls with flockfile/funlockfile; 2) it makes getdelim omit the
locking altogether if unlocked-io is in effect.  It speeds up sed by
almost 2x in very simple scripts with very little regular expression
matching (such as '/^something/!d').

Ok?

Paolo

2008-08-27  Paolo Bonzini  <address@hidden>

        * lib/getdelim.c (flockfile, funlockfile): Make all of them
        dummy if one is not available.  Do not touch them if
        USE_UNLOCKED_IO, instead letting unlocked-io.h do that.
        (getc_maybe_unlocked): New.
        * m4/getdelim.m4 (gl_PREREQ_GETDELIM): Check for getc_unlocked.

diff --git a/lib/getdelim.c b/lib/getdelim.c
index 2e127fc..bcbc192 100644
--- a/lib/getdelim.c
+++ b/lib/getdelim.c
@@ -33,13 +33,18 @@
 #ifndef SSIZE_MAX
 # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2))
 #endif
-#if !HAVE_FLOCKFILE
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+# define getc_maybe_unlocked(fp)        getc(fp)
+#if !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED
 # undef flockfile
-# define flockfile(x) ((void) 0)
-#endif
-#if !HAVE_FUNLOCKFILE
 # undef funlockfile
+# define flockfile(x) ((void) 0)
 # define funlockfile(x) ((void) 0)
+# define getc_maybe_unlocked(fp)       getc(fp)
+#else
+# define getc_maybe_unlocked(fp)       getc_unlocked(fp)
 #endif

 /* Read up to (and including) a DELIMITER from FP into *LINEPTR (and
@@ -79,7 +84,7 @@ getdelim (char **lineptr, size_t *n, int delimiter,
FILE *fp)
     {
       int i;

-      i = getc (fp);
+      i = getc_maybe_unlocked (fp);
       if (i == EOF)
        {
          result = -1;
diff --git a/m4/getdelim.m4 b/m4/getdelim.m4index 18b96be..b6ffc39 100644
--- a/m4/getdelim.m4
+++ b/m4/getdelim.m4
@@ -31,4 +31,5 @@ AC_DEFUN([gl_FUNC_GETDELIM],
 AC_DEFUN([gl_PREREQ_GETDELIM],
 [
   AC_CHECK_FUNCS([flockfile funlockfile])
+  AC_CHECK_DECLS_ONCE([getc_unlocked])
 ])




reply via email to

[Prev in Thread] Current Thread [Next in Thread]