diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2006-04-11 00:51:23 +0000 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2006-04-11 00:51:23 +0000 |
commit | fad52643e0f6b3ebdae1c7763973bc4ffc7f1368 (patch) | |
tree | 7a61218f45be0e1c4f18d7927ceef4953d2ec47e /src | |
parent | 2a124564c75278f0a687205d9a58fdb4fed89096 (diff) | |
download | coreutils-fad52643e0f6b3ebdae1c7763973bc4ffc7f1368.tar.xz |
(body_fastmap, header_fastmap, footer_fastmap):
New vars.
(build_type_arg): New fastmap arg. All uses changed.
Don't bother allocating a buffer, but set a fastmap.
Diffstat (limited to 'src')
-rw-r--r-- | src/nl.c | 26 |
1 files changed, 14 insertions, 12 deletions
@@ -1,5 +1,5 @@ /* nl -- number lines of files - Copyright (C) 89, 92, 1995-2005 Free Software Foundation, Inc. + Copyright (C) 89, 92, 1995-2006 Free Software Foundation, Inc. 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 @@ -84,6 +84,11 @@ static struct re_pattern_buffer header_regex; /* Regex for footer lines to number (-fp). */ static struct re_pattern_buffer footer_regex; +/* Fastmaps for the above. */ +static char body_fastmap[UCHAR_MAX + 1]; +static char header_fastmap[UCHAR_MAX + 1]; +static char footer_fastmap[UCHAR_MAX + 1]; + /* Pointer to current regex, if any. */ static struct re_pattern_buffer *current_regex = NULL; @@ -230,11 +235,10 @@ FORMAT is one of:\n\ according to `optarg'. */ static bool -build_type_arg (char **typep, struct re_pattern_buffer *regexp) +build_type_arg (char **typep, struct re_pattern_buffer *regexp, char *fastmap) { const char *errmsg; bool rval = true; - size_t optlen; switch (*optarg) { @@ -245,13 +249,11 @@ build_type_arg (char **typep, struct re_pattern_buffer *regexp) break; case 'p': *typep = optarg++; - optlen = strlen (optarg); - regexp->allocated = optlen * 2; - regexp->buffer = xnmalloc (optlen, 2); + regexp->buffer = NULL; + regexp->allocated = 0; + regexp->fastmap = fastmap; regexp->translate = NULL; - regexp->fastmap = xmalloc (256); - regexp->fastmap_accurate = 0; - errmsg = re_compile_pattern (optarg, optlen, regexp); + errmsg = re_compile_pattern (optarg, strlen (optarg), regexp); if (errmsg) error (EXIT_FAILURE, 0, "%s", errmsg); break; @@ -469,7 +471,7 @@ main (int argc, char **argv) switch (c) { case 'h': - if (! build_type_arg (&header_type, &header_regex)) + if (! build_type_arg (&header_type, &header_regex, header_fastmap)) { error (0, 0, _("invalid header numbering style: %s"), quote (optarg)); @@ -477,7 +479,7 @@ main (int argc, char **argv) } break; case 'b': - if (! build_type_arg (&body_type, &body_regex)) + if (! build_type_arg (&body_type, &body_regex, body_fastmap)) { error (0, 0, _("invalid body numbering style: %s"), quote (optarg)); @@ -485,7 +487,7 @@ main (int argc, char **argv) } break; case 'f': - if (! build_type_arg (&footer_type, &footer_regex)) + if (! build_type_arg (&footer_type, &footer_regex, footer_fastmap)) { error (0, 0, _("invalid footer numbering style: %s"), quote (optarg)); |