mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-12 21:18:53 +00:00
Implement count as ashellscript function instead of a command in order to support very long argument lists. Note that this implementation is painfully slow for more than 1000 arguments.
darcs-hash:20070423220026-ac50b-69c4b06c88e6120429b6358f1b61f6076d392ce5.gz
This commit is contained in:
parent
e2714b05eb
commit
419b3166c8
5 changed files with 8 additions and 53 deletions
15
Makefile.in
15
Makefile.in
|
@ -188,7 +188,7 @@ DOC_SRC_DIR_FILES := $(HDR_FILES_SRC) $(HELP_SRC)
|
|||
|
||||
MAIN_DIR_FILES_UNSORTED := Doxyfile Doxyfile.user Doxyfile.help.in \
|
||||
Makefile.in configure configure.ac config.h.in install-sh \
|
||||
set_color.c count.c key_reader.c $(MIME_OBJS:.o=.h) \
|
||||
set_color.c key_reader.c $(MIME_OBJS:.o=.h) \
|
||||
$(MIME_OBJS:.o=.c) $(FISH_OBJS:.o=.h) $(BUILTIN_FILES) \
|
||||
$(COMMON_FILES) $(COMMON_FILES:.c=.h) $(FISH_OBJS:.o=.c) \
|
||||
fish.spec.in INSTALL README user_doc.head.html xsel-0.9.6.tar \
|
||||
|
@ -244,7 +244,7 @@ FUNCTIONS_DIR_FILES := $(wildcard share/functions/*.fish)
|
|||
# Programs to install
|
||||
#
|
||||
|
||||
SIMPLE_PROGRAMS := fish set_color mimedb count fish_pager fishd fish_indent
|
||||
SIMPLE_PROGRAMS := fish set_color mimedb fish_pager fishd fish_indent
|
||||
PROGRAMS := $(SIMPLE_PROGRAMS) @XSEL@ @SEQ_FALLBACK@
|
||||
|
||||
|
||||
|
@ -722,16 +722,6 @@ mimedb: $(MIME_OBJS)
|
|||
$(CC) $(MIME_OBJS) $(LDFLAGS_MIMEDB) -o $@
|
||||
|
||||
|
||||
#
|
||||
# Build the count program.
|
||||
#
|
||||
# count does not need any libraries, so we don't use LDFLAGS here.
|
||||
#
|
||||
|
||||
count: count.o
|
||||
$(CC) count.o -o $@
|
||||
|
||||
|
||||
#
|
||||
# Build the set_color program
|
||||
#
|
||||
|
@ -918,7 +908,6 @@ complete.o: config.h signal.h fallback.h util.h tokenizer.h wildcard.h proc.h
|
|||
complete.o: io.h parser.h event.h function.h complete.h builtin.h env.h
|
||||
complete.o: exec.h expand.h common.h reader.h history.h intern.h parse_util.h
|
||||
complete.o: halloc.h halloc_util.h wutil.h path.h
|
||||
count.o: config.h
|
||||
env.o: config.h signal.h fallback.h util.h wutil.h proc.h io.h common.h env.h
|
||||
env.o: sanity.h expand.h history.h reader.h parser.h event.h env_universal.h
|
||||
env.o: env_universal_common.h input_common.h complete.h
|
||||
|
|
24
count.c
24
count.c
|
@ -1,24 +0,0 @@
|
|||
/** \file count.c
|
||||
The length command, used for determining the number of items in an
|
||||
environment variable array.
|
||||
*/
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/**
|
||||
The main function. Does nothing but return the number of arguments.
|
||||
|
||||
This command, unlike all other fish commands, does not feature a -h
|
||||
or --help option. This is because we want to avoid errors on arrays
|
||||
that have -h or --help as entries, which is very common when
|
||||
parsing options, etc. For this reason, the main fish binary does a
|
||||
check and prints help usage if -h or --help is explicitly given to
|
||||
the command, but not if it is the contents of a variable.
|
||||
*/
|
||||
int main( int argc, char **argv )
|
||||
{
|
||||
printf( "%d\n", argc-1 );
|
||||
return argc==1;
|
||||
}
|
|
@ -5,10 +5,10 @@
|
|||
|
||||
\subsection count-description Description
|
||||
|
||||
<tt>count</tt> prints the number of arguments that were passed to
|
||||
it. This is usually used to find out how many elements an environment
|
||||
variable array contains, but this is not the only potential usage for
|
||||
the count command.
|
||||
The <tt>count</tt> function prints the number of arguments that were
|
||||
passed to it. This is usually used to find out how many elements an
|
||||
environment variable array contains, but this is not the only
|
||||
potential usage for the count command.
|
||||
|
||||
The count command does not accept any options, not even '-h'. This way
|
||||
the user does not have to worry about an array containing elements
|
||||
|
|
|
@ -115,7 +115,6 @@ fi
|
|||
%doc %_datadir/doc/%{name}-%{version}
|
||||
|
||||
# man files
|
||||
%_mandir/man1/count.1*
|
||||
%_mandir/man1/fish.1*
|
||||
%_mandir/man1/fish_pager.1*
|
||||
%_mandir/man1/fish_indent.1*
|
||||
|
@ -125,7 +124,6 @@ fi
|
|||
%_mandir/man1/xsel.1x*
|
||||
|
||||
# The program binaries
|
||||
%attr(0755,root,root) %_bindir/count
|
||||
%attr(0755,root,root) %_bindir/fish
|
||||
%attr(0755,root,root) %_bindir/fish_indent
|
||||
%attr(0755,root,root) %_bindir/fish_pager
|
||||
|
|
12
parser.c
12
parser.c
|
@ -1309,16 +1309,8 @@ static void parse_job_argument_list( process_t *p,
|
|||
workaround and a huge hack, but as near as I can tell, the
|
||||
alternatives are worse.
|
||||
*/
|
||||
if( p->actual_cmd )
|
||||
{
|
||||
wchar_t *woot = wcsrchr( p->actual_cmd, L'/' );
|
||||
if( !woot )
|
||||
woot = p->actual_cmd;
|
||||
else
|
||||
woot++;
|
||||
proc_is_count = wcscmp( woot, L"count" )==0;
|
||||
}
|
||||
|
||||
proc_is_count = (wcscmp( (wchar_t *)al_get( args, 0 ), L"count" )==0);
|
||||
|
||||
while( 1 )
|
||||
{
|
||||
|
||||
|
|
Loading…
Reference in a new issue