diff options
| author | Chet Ramey <chet@caleb.ins.cwru.edu> | 2013-02-05 16:45:12 -0500 |
|---|---|---|
| committer | Chet Ramey <chet@caleb.ins.cwru.edu> | 2013-02-05 16:45:12 -0500 |
| commit | 4d68afdae9947822df503a6d25a82b2d6b94ca39 (patch) | |
| tree | 94a1102c0a3f961dd726a879cd4b457af326a671 /builtins | |
| parent | 1a81420a36fafc5217e770e042fd39a1353a41f9 (diff) | |
| download | bash-4d68afdae9947822df503a6d25a82b2d6b94ca39.tar.gz | |
bash-20130125 remove leftover and stray files
Diffstat (limited to 'builtins')
| -rw-r--r-- | builtins/mapfile.def~ | 359 |
1 files changed, 0 insertions, 359 deletions
diff --git a/builtins/mapfile.def~ b/builtins/mapfile.def~ deleted file mode 100644 index 8de8a873..00000000 --- a/builtins/mapfile.def~ +++ /dev/null @@ -1,359 +0,0 @@ -This file is mapfile.def, from which is created mapfile.c. -It implements the builtin "mapfile" in Bash. - -Copyright (C) 2005-2006 Rocky Bernstein for Free Software Foundation, Inc. -Copyright (C) 2008-2012 Free Software Foundation, Inc. - -This file is part of GNU Bash, the Bourne Again SHell. - -Bash 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. - -Bash 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 Bash. If not, see <http://www.gnu.org/licenses/>. - -$PRODUCES mapfile.c - -$BUILTIN mapfile -$FUNCTION mapfile_builtin -$SHORT_DOC mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array] -Read lines from the standard input into an indexed array variable. - -Read lines from the standard input into the indexed array variable ARRAY, or -from file descriptor FD if the -u option is supplied. The variable MAPFILE -is the default ARRAY. - -Options: - -n count Copy at most COUNT lines. If COUNT is 0, all lines are copied. - -O origin Begin assigning to ARRAY at index ORIGIN. The default index is 0. - -s count Discard the first COUNT lines read. - -t Remove a trailing newline from each line read. - -u fd Read lines from file descriptor FD instead of the standard input. - -C callback Evaluate CALLBACK each time QUANTUM lines are read. - -c quantum Specify the number of lines read between each call to CALLBACK. - -Arguments: - ARRAY Array variable name to use for file data. - -If -C is supplied without -c, the default quantum is 5000. When -CALLBACK is evaluated, it is supplied the index of the next array -element to be assigned and the line to be assigned to that element -as additional arguments. - -If not supplied with an explicit origin, mapfile will clear ARRAY before -assigning to it. - -Exit Status: -Returns success unless an invalid option is given or ARRAY is readonly or -not an indexed array. -$END - -$BUILTIN readarray -$FUNCTION mapfile_builtin -$SHORT_DOC readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array] -Read lines from a file into an array variable. - -A synonym for `mapfile'. -$END - -#include <config.h> - -#include "builtins.h" -#include "posixstat.h" - -#if defined (HAVE_UNISTD_H) -# include <unistd.h> -#endif - -#include "bashansi.h" -#include "bashintl.h" - -#include <stdio.h> -#include <errno.h> - -#include "../bashintl.h" -#include "../shell.h" -#include "common.h" -#include "bashgetopt.h" - -#if !defined (errno) -extern int errno; -#endif - -#if defined (ARRAY_VARS) - -static int run_callback __P((const char *, unsigned int, const char *)); - -#define DEFAULT_ARRAY_NAME "MAPFILE" -#define DEFAULT_VARIABLE_NAME "MAPLINE" /* not used right now */ - -/* The value specifying how frequently `mapfile' calls the callback. */ -#define DEFAULT_QUANTUM 5000 - -/* Values for FLAGS */ -#define MAPF_CLEARARRAY 0x01 -#define MAPF_CHOP 0x02 - -static int -run_callback (callback, curindex, curline) - const char *callback; - unsigned int curindex; - const char *curline; -{ - unsigned int execlen; - char *execstr, *qline; - int flags; - - qline = sh_single_quote (curline); - execlen = strlen (callback) + strlen (qline) + 10; - /* 1 for each space between %s and %d, - another 1 for the last nul char for C string. */ - execlen += 3; - execstr = xmalloc (execlen); - - flags = SEVAL_NOHIST; -#if 0 - if (interactive) - flags |= SEVAL_INTERACT; -#endif - snprintf (execstr, execlen, "%s %d %s", callback, curindex, qline); - free (qline); - return evalstring (execstr, NULL, flags); -} - -static void -do_chop(line) - char * line; -{ - int length; - - length = strlen (line); - if (length && line[length-1] == '\n') - line[length-1] = '\0'; -} - -static int -mapfile (fd, line_count_goal, origin, nskip, callback_quantum, callback, array_name, flags) - int fd; - long line_count_goal, origin, nskip, callback_quantum; - char *callback, *array_name; - int flags; -{ - char *line; - size_t line_length; - unsigned int array_index, line_count; - SHELL_VAR *entry; - int unbuffered_read; - - line = NULL; - line_length = 0; - unbuffered_read = 0; - - /* The following check should be done before reading any lines. Doing it - here allows us to call bind_array_element instead of bind_array_variable - and skip the variable lookup on every call. */ - entry = find_or_make_array_variable (array_name, 1); - if (entry == 0 || readonly_p (entry) || noassign_p (entry)) - { - if (entry && readonly_p (entry)) - err_readonly (array_name); - - return (EXECUTION_FAILURE); - } - else if (array_p (entry) == 0) - { - builtin_error (_("%s: not an indexed array"), array_name); - return (EXECUTION_FAILURE); - } - else if (invisible_p (entry)) - VUNSETATTR (entry, att_invisible); /* no longer invisible */ - - if (flags & MAPF_CLEARARRAY) - array_flush (array_cell (entry)); - -#ifndef __CYGWIN__ - unbuffered_read = (lseek (fd, 0L, SEEK_CUR) < 0) && (errno == ESPIPE); -#else - unbuffered_read = 1; -#endif - - zreset (); - - /* Skip any lines at beginning of file? */ - for (line_count = 0; line_count < nskip; line_count++) - if (zgetline (fd, &line, &line_length, unbuffered_read) < 0) - break; - - line = 0; - line_length = 0; - - /* Reset the buffer for bash own stream */ - for (array_index = origin, line_count = 1; - zgetline (fd, &line, &line_length, unbuffered_read) != -1; - array_index++) - { - /* Remove trailing newlines? */ - if (flags & MAPF_CHOP) - do_chop (line); - - /* Has a callback been registered and if so is it time to call it? */ - if (callback && line_count && (line_count % callback_quantum) == 0) - { - run_callback (callback, array_index, line); - - /* Reset the buffer for bash own stream. */ - if (unbuffered_read == 0) - zsyncfd (fd); - } - - bind_array_element (entry, array_index, line, 0); - - /* Have we exceeded # of lines to store? */ - line_count++; - if (line_count_goal != 0 && line_count > line_count_goal) - break; - } - - xfree (line); - - if (unbuffered_read == 0) - zsyncfd (fd); - - return EXECUTION_SUCCESS; -} - -int -mapfile_builtin (list) - WORD_LIST *list; -{ - int opt, code, fd, clear_array, flags; - intmax_t intval; - long lines, origin, nskip, callback_quantum; - char *array_name, *callback; - - clear_array = 1; - fd = 0; - lines = origin = nskip = 0; - flags = MAPF_CLEARARRAY; - callback_quantum = DEFAULT_QUANTUM; - callback = 0; - - reset_internal_getopt (); - while ((opt = internal_getopt (list, "u:n:O:tC:c:s:")) != -1) - { - switch (opt) - { - case 'u': - code = legal_number (list_optarg, &intval); - if (code == 0 || intval < 0 || intval != (int)intval) - { - builtin_error (_("%s: invalid file descriptor specification"), list_optarg); - return (EXECUTION_FAILURE); - } - else - fd = intval; - - if (sh_validfd (fd) == 0) - { - builtin_error (_("%d: invalid file descriptor: %s"), fd, strerror (errno)); - return (EXECUTION_FAILURE); - } - break; - - case 'n': - code = legal_number (list_optarg, &intval); - if (code == 0 || intval < 0 || intval != (unsigned)intval) - { - builtin_error (_("%s: invalid line count"), list_optarg); - return (EXECUTION_FAILURE); - } - else - lines = intval; - break; - - case 'O': - code = legal_number (list_optarg, &intval); - if (code == 0 || intval < 0 || intval != (unsigned)intval) - { - builtin_error (_("%s: invalid array origin"), list_optarg); - return (EXECUTION_FAILURE); - } - else - origin = intval; - flags &= ~MAPF_CLEARARRAY; - break; - case 't': - flags |= MAPF_CHOP; - break; - case 'C': - callback = list_optarg; - break; - case 'c': - code = legal_number (list_optarg, &intval); - if (code == 0 || intval <= 0 || intval != (unsigned)intval) - { - builtin_error (_("%s: invalid callback quantum"), list_optarg); - return (EXECUTION_FAILURE); - } - else - callback_quantum = intval; - break; - case 's': - code = legal_number (list_optarg, &intval); - if (code == 0 || intval < 0 || intval != (unsigned)intval) - { - builtin_error (_("%s: invalid line count"), list_optarg); - return (EXECUTION_FAILURE); - } - else - nskip = intval; - break; - default: - builtin_usage (); - return (EX_USAGE); - } - } - list = loptend; - - if (list == 0) - array_name = DEFAULT_ARRAY_NAME; - else if (list->word == 0 || list->word->word == 0) - { - builtin_error ("internal error: getting variable name"); - return (EXECUTION_FAILURE); - } - else if (list->word->word[0] == '\0') - { - builtin_error (_("empty array variable name")); - return (EX_USAGE); - } - else - array_name = list->word->word; - - if (legal_identifier (array_name) == 0 && valid_array_reference (array_name) == 0) - { - sh_invalidid (array_name); - return (EXECUTION_FAILURE); - } - - return mapfile (fd, lines, origin, nskip, callback_quantum, callback, array_name, flags); -} - -#else - -int -mapfile_builtin (list) - WORD_LIST *list; -{ - builtin_error (_("array variable support required")); - return (EXECUTION_FAILURE); -} - -#endif /* ARRAY_VARS */ |
