[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[SCM] GNU M4 source repository branch, branch-1.6, updated. v1.5.89a-100
From: |
Eric Blake |
Subject: |
[SCM] GNU M4 source repository branch, branch-1.6, updated. v1.5.89a-100-g9429358 |
Date: |
Wed, 18 Feb 2009 21:37:05 +0000 |
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU M4 source repository".
http://git.sv.gnu.org/gitweb/?p=m4.git;a=commitdiff;h=9429358695faabee31d0413cee0d2376c7c73048
The branch, branch-1.6 has been updated
via 9429358695faabee31d0413cee0d2376c7c73048 (commit)
via 08745f701225284d682c9a68b27cec282e0cd04b (commit)
via 0cec2254cb5d48cad751bb588cd93c40c006dc27 (commit)
via 5fd045d1e9904f4397b9add24512c72a9d9d6447 (commit)
from 16e712b9dbcfcc49a54dd7c010ca1cab075fd79a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 9429358695faabee31d0413cee0d2376c7c73048
Author: Eric Blake <address@hidden>
Date: Wed Feb 18 13:36:15 2009 -0700
Prefer buffer over byte operations.
* src/format.c (expand_format): Use memchr for speed.
* src/builtin.c (substitute): Likewise.
(expand_user_macro): Rearrange for readability.
* src/input.c (consume_buffer): Allow C++ compilation.
Signed-off-by: Eric Blake <address@hidden>
(cherry picked from commit 45a154e6d70517bf1b837715aae2fe366c9c1116)
commit 08745f701225284d682c9a68b27cec282e0cd04b
Author: Eric Blake <address@hidden>
Date: Wed Feb 18 11:38:54 2009 -0700
Speed up esyscmd with buffer reads.
* src/builtin.c (m4_esyscmd): Read blocks directly into obstack,
rather than repeatedly reading bytes. Detect read errors.
Signed-off-by: Eric Blake <address@hidden>
(cherry picked from commit 1974da270a84d8c0cf2b3e3e08ce5292fdb211f3)
commit 0cec2254cb5d48cad751bb588cd93c40c006dc27
Author: Eric Blake <address@hidden>
Date: Wed Feb 18 12:03:03 2009 -0700
Avoid risk of stack overflow.
* src/output.c (insert_file): Avoid stack allocation of large
buffer.
(freeze_diversions): Avoid spurious semicolon.
Signed-off-by: Eric Blake <address@hidden>
(cherry picked from commit 01f216c3c98d41db7878b18c93d23e8dc38d8643)
commit 5fd045d1e9904f4397b9add24512c72a9d9d6447
Author: Eric Blake <address@hidden>
Date: Wed Feb 18 13:36:50 2009 -0700
Update copyright years.
* src/format.c: Add 2009 to copyright.
* src/m4.h: Likewise.
* THANKS: Likewise. Add name from branch.
Signed-off-by: Eric Blake <address@hidden>
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 22 +++++++++++++++++++++
THANKS | 4 ++-
src/builtin.c | 58 ++++++++++++++++++++++++++++++++++++++++----------------
src/format.c | 17 +++++++++------
src/input.c | 2 +-
src/m4.h | 4 +-
src/output.c | 12 ++++------
7 files changed, 84 insertions(+), 35 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 85f2c5b..376ef68 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2009-02-18 Eric Blake <address@hidden>
+
+ Prefer buffer over byte operations.
+ * src/format.c (expand_format): Use memchr for speed.
+ * src/builtin.c (substitute): Likewise.
+ (expand_user_macro): Rearrange for readability.
+ * src/input.c (consume_buffer): Allow C++ compilation.
+
+ Speed up esyscmd with buffer reads.
+ * src/builtin.c (m4_esyscmd): Read blocks directly into obstack,
+ rather than repeatedly reading bytes. Detect read errors.
+
+ Avoid risk of stack overflow.
+ * src/output.c (insert_file): Avoid stack allocation of large
+ buffer.
+ (freeze_diversions): Avoid spurious semicolon.
+
+ Update copyright years.
+ * src/format.c: Add 2009 to copyright.
+ * src/m4.h: Likewise.
+ * THANKS: Likewise. Add name from branch.
+
2009-02-17 Eric Blake <address@hidden>
Reorder token recognition to match other implementations.
diff --git a/THANKS b/THANKS
index c52f07b..2b42fca 100644
--- a/THANKS
+++ b/THANKS
@@ -111,6 +111,7 @@ Steve Williamson address@hidden
Steven Augart address@hidden
Thomas Klausner address@hidden
Thorsten Ohl address@hidden
+Tom G. Christensen address@hidden
Tom McConnell address@hidden
Tom Quinn address@hidden
Tom Tromey address@hidden
@@ -126,7 +127,8 @@ Local Variables:
coding: utf-8
End:
-Copyright (C) 2000, 2006, 2007 Free Software Foundation, Inc.
+Copyright (C) 2000, 2006, 2007, 2008, 2009 Free Software Foundation,
+Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2 or
diff --git a/src/builtin.c b/src/builtin.c
index 22d156d..0a62f99 100644
--- a/src/builtin.c
+++ b/src/builtin.c
@@ -1177,7 +1177,6 @@ m4_esyscmd (struct obstack *obs, int argc,
macro_arguments *argv)
const char *cmd = ARG (1);
size_t len = ARG_LEN (1);
FILE *pin;
- int ch;
if (strlen (cmd) != len)
m4_warn (0, me, _("argument %s truncated"),
@@ -1200,8 +1199,27 @@ m4_esyscmd (struct obstack *obs, int argc,
macro_arguments *argv)
}
else
{
- while ((ch = getc (pin)) != EOF)
- obstack_1grow (obs, (char) ch);
+ while (1)
+ {
+ size_t avail = obstack_room (obs);
+ if (!avail)
+ {
+ int ch = getc (pin);
+ if (ch == EOF)
+ break;
+ obstack_1grow (obs, ch);
+ }
+ else
+ {
+ size_t len = fread (obstack_next_free (obs), 1, avail, pin);
+ if (len <= 0)
+ break;
+ obstack_blank_fast (obs, len);
+ }
+ }
+ if (ferror (pin))
+ m4_warn (errno, me, _("cannot read pipe to command %s"),
+ quotearg_style (locale_quoting_style, cmd));
sysval = pclose (pin);
}
}
@@ -2172,23 +2190,24 @@ substitute (struct obstack *obs, const call_info *me,
const char *victim,
const char *repl, size_t repl_len, struct re_registers *regs)
{
int ch;
-
- while (repl_len--)
+ while (1)
{
- ch = *repl++;
- if (ch != '\\')
+ const char *backslash = (char *) memchr (repl, '\\', repl_len);
+ if (!backslash)
{
- obstack_1grow (obs, ch);
- continue;
+ obstack_grow (obs, repl, repl_len);
+ return;
}
+ obstack_grow (obs, repl, backslash - repl);
+ repl_len -= backslash - repl + 1;
if (!repl_len)
{
m4_warn (0, me, _("trailing \\ ignored in replacement"));
return;
}
-
- ch = *repl++;
+ repl = backslash + 1;
repl_len--;
+ ch = *repl++;
switch (ch)
{
case '0':
@@ -2470,15 +2489,22 @@ expand_user_macro (struct obstack *obs, symbol *sym,
const char *text = SYMBOL_TEXT (sym);
size_t len = SYMBOL_TEXT_LEN (sym);
int i;
- const char *dollar = memchr (text, '$', len);
-
- while (dollar)
+ while (1)
{
+ const char *dollar = (char *) memchr (text, '$', len);
+ if (!dollar)
+ {
+ obstack_grow (obs, text, len);
+ return;
+ }
obstack_grow (obs, text, dollar - text);
len -= dollar - text;
text = dollar;
if (len == 1)
- break;
+ {
+ obstack_1grow (obs, '$');
+ return;
+ }
len--;
switch (*++text)
{
@@ -2514,7 +2540,5 @@ expand_user_macro (struct obstack *obs, symbol *sym,
obstack_1grow (obs, '$');
break;
}
- dollar = memchr (text, '$', len);
}
- obstack_grow (obs, text, len);
}
diff --git a/src/format.c b/src/format.c
index 09cffa3..dde3a19 100644
--- a/src/format.c
+++ b/src/format.c
@@ -1,7 +1,7 @@
/* GNU m4 -- A simple macro processor
- Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2006, 2007, 2008
- Free Software Foundation, Inc.
+ Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2006, 2007, 2008,
+ 2009 Free Software Foundation, Inc.
This file is part of GNU M4.
@@ -181,14 +181,17 @@ expand_format (struct obstack *obs, int argc,
macro_arguments *argv)
f_len = ARG_LEN (1);
assert (!f[f_len]); /* Requiring a terminating NUL makes parsing simpler. */
memset (ok, 0, sizeof ok);
- while (f_len--)
+ while (1)
{
- c = *fmt++;
- if (c != '%')
+ const char *percent = (char *) memchr (fmt, '%', f_len);
+ if (!percent)
{
- obstack_1grow (obs, c);
- continue;
+ obstack_grow (obs, fmt, f_len);
+ break;
}
+ obstack_grow (obs, fmt, percent - fmt);
+ f_len -= percent - fmt + 1;
+ fmt = percent + 1;
if (*fmt == '%')
{
diff --git a/src/input.c b/src/input.c
index 709ef3e..129a5f2 100644
--- a/src/input.c
+++ b/src/input.c
@@ -930,7 +930,7 @@ consume_buffer (size_t len)
buf = freadptr (isp->u.u_f.fp, &buf_len);
assert (buf && len <= buf_len);
buf_len = 0;
- while ((p = memchr (buf + buf_len, '\n', len - buf_len)))
+ while ((p = (char *) memchr (buf + buf_len, '\n', len - buf_len)))
{
if (p == buf + len - 1)
start_of_input_line = true;
diff --git a/src/m4.h b/src/m4.h
index b5521ca..5407d10 100644
--- a/src/m4.h
+++ b/src/m4.h
@@ -1,7 +1,7 @@
/* GNU m4 -- A simple macro processor
- Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005, 2006, 2007,
- 2008 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005, 2006,
+ 2007, 2008, 2009 Free Software Foundation, Inc.
This file is part of GNU M4.
diff --git a/src/output.c b/src/output.c
index 1add1a9..99a9f0a 100644
--- a/src/output.c
+++ b/src/output.c
@@ -1,7 +1,7 @@
/* GNU m4 -- A simple macro processor
Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005, 2006,
- 2007, 2008 Free Software Foundation, Inc.
+ 2007, 2008, 2009 Free Software Foundation, Inc.
This file is part of GNU M4.
@@ -835,19 +835,17 @@ make_diversion (int divnum)
void
insert_file (FILE *file)
{
- char buffer[COPY_BUFFER_SIZE];
+ static char buffer[COPY_BUFFER_SIZE];
size_t length;
/* Optimize out inserting into a sink. */
-
if (!output_diversion)
return;
/* Insert output by big chunks. */
-
- for (;;)
+ while (1)
{
- length = fread (buffer, 1, COPY_BUFFER_SIZE, file);
+ length = fread (buffer, 1, sizeof buffer, file);
if (ferror (file))
m4_error (EXIT_FAILURE, errno, NULL, _("error reading inserted file"));
if (length == 0)
@@ -1005,7 +1003,7 @@ freeze_diversions (FILE *file)
iter = gl_oset_iterator (diversion_table);
while (gl_oset_iterator_next (&iter, &elt))
{
- m4_diversion *diversion = (m4_diversion *) elt;;
+ m4_diversion *diversion = (m4_diversion *) elt;
if (diversion->size || diversion->used)
{
if (diversion->size)
hooks/post-receive
--
GNU M4 source repository
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [SCM] GNU M4 source repository branch, branch-1.6, updated. v1.5.89a-100-g9429358,
Eric Blake <=