[Top][All Lists]
[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])
])
- [PATCH] use unlocked io in getdelim,
Paolo Bonzini <=
- Re: [PATCH] use unlocked io in getdelim, Eric Blake, 2008/08/27
- Re: [PATCH] use unlocked io in getdelim, Paolo Bonzini, 2008/08/27
- Re: [PATCH] use unlocked io in getdelim, Paolo Bonzini, 2008/08/27
- Re: [PATCH] use unlocked io in getdelim, Paolo Bonzini, 2008/08/27
- Re: [PATCH] use unlocked io in getdelim, Eric Blake, 2008/08/27
- Re: [PATCH] use unlocked io in getdelim, Paolo Bonzini, 2008/08/27
- Re: [PATCH] use unlocked io in getdelim, Jim Meyering, 2008/08/28
- Re: getndelim2 license, Bruno Haible, 2008/08/28
- Re: getndelim2 license, Paolo Bonzini, 2008/08/29
- Re: getndelim2 license, Jim Meyering, 2008/08/29