Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
5d2a6c47
Commit
5d2a6c47
authored
Apr 30, 2009
by
Daniel Fischer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Backported libedit changes.
parent
3742489c
Changes
39
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
39 changed files
with
1639 additions
and
1381 deletions
+1639
-1381
cmd-line-utils/libedit/Makefile.am
cmd-line-utils/libedit/Makefile.am
+7
-21
cmd-line-utils/libedit/chared.c
cmd-line-utils/libedit/chared.c
+32
-13
cmd-line-utils/libedit/chared.h
cmd-line-utils/libedit/chared.h
+4
-5
cmd-line-utils/libedit/common.c
cmd-line-utils/libedit/common.c
+16
-11
cmd-line-utils/libedit/config.h
cmd-line-utils/libedit/config.h
+0
-14
cmd-line-utils/libedit/el.c
cmd-line-utils/libedit/el.c
+131
-73
cmd-line-utils/libedit/el.h
cmd-line-utils/libedit/el.h
+4
-2
cmd-line-utils/libedit/el_term.h
cmd-line-utils/libedit/el_term.h
+6
-22
cmd-line-utils/libedit/emacs.c
cmd-line-utils/libedit/emacs.c
+10
-5
cmd-line-utils/libedit/hist.c
cmd-line-utils/libedit/hist.c
+7
-1
cmd-line-utils/libedit/histedit.h
cmd-line-utils/libedit/histedit.h
+19
-5
cmd-line-utils/libedit/history.c
cmd-line-utils/libedit/history.c
+53
-9
cmd-line-utils/libedit/key.c
cmd-line-utils/libedit/key.c
+88
-60
cmd-line-utils/libedit/key.h
cmd-line-utils/libedit/key.h
+4
-2
cmd-line-utils/libedit/makelist.sh
cmd-line-utils/libedit/makelist.sh
+8
-8
cmd-line-utils/libedit/map.c
cmd-line-utils/libedit/map.c
+39
-25
cmd-line-utils/libedit/np/fgetln.c
cmd-line-utils/libedit/np/fgetln.c
+35
-15
cmd-line-utils/libedit/np/strlcat.c
cmd-line-utils/libedit/np/strlcat.c
+45
-35
cmd-line-utils/libedit/np/strlcpy.c
cmd-line-utils/libedit/np/strlcpy.c
+41
-36
cmd-line-utils/libedit/np/unvis.c
cmd-line-utils/libedit/np/unvis.c
+43
-56
cmd-line-utils/libedit/np/vis.c
cmd-line-utils/libedit/np/vis.c
+221
-188
cmd-line-utils/libedit/np/vis.h
cmd-line-utils/libedit/np/vis.h
+5
-14
cmd-line-utils/libedit/parse.c
cmd-line-utils/libedit/parse.c
+9
-3
cmd-line-utils/libedit/parse.h
cmd-line-utils/libedit/parse.h
+2
-2
cmd-line-utils/libedit/prompt.c
cmd-line-utils/libedit/prompt.c
+7
-1
cmd-line-utils/libedit/read.c
cmd-line-utils/libedit/read.c
+41
-19
cmd-line-utils/libedit/read.h
cmd-line-utils/libedit/read.h
+1
-8
cmd-line-utils/libedit/readline.c
cmd-line-utils/libedit/readline.c
+316
-522
cmd-line-utils/libedit/readline/readline.h
cmd-line-utils/libedit/readline/readline.h
+23
-15
cmd-line-utils/libedit/refresh.c
cmd-line-utils/libedit/refresh.c
+52
-24
cmd-line-utils/libedit/search.c
cmd-line-utils/libedit/search.c
+7
-2
cmd-line-utils/libedit/sig.c
cmd-line-utils/libedit/sig.c
+13
-7
cmd-line-utils/libedit/sig.h
cmd-line-utils/libedit/sig.h
+1
-2
cmd-line-utils/libedit/sys.h
cmd-line-utils/libedit/sys.h
+23
-4
cmd-line-utils/libedit/term.c
cmd-line-utils/libedit/term.c
+225
-111
cmd-line-utils/libedit/tokenizer.c
cmd-line-utils/libedit/tokenizer.c
+7
-1
cmd-line-utils/libedit/tty.c
cmd-line-utils/libedit/tty.c
+68
-21
cmd-line-utils/libedit/tty.h
cmd-line-utils/libedit/tty.h
+3
-3
cmd-line-utils/libedit/vi.c
cmd-line-utils/libedit/vi.c
+23
-16
No files found.
cmd-line-utils/libedit/Makefile.am
View file @
5d2a6c47
## Process this file with automake to create Makefile.in
# Makefile for the GNU readline library.
# Copyright (C) 1994,1996,1997 Free Software Foundation, Inc.
ASRC
=
$(srcdir)
/vi.c
$(srcdir)
/emacs.c
$(srcdir)
/common.c
AHDR
=
vi.h emacs.h common.h
...
...
@@ -12,10 +10,9 @@ noinst_LIBRARIES = libedit.a
libedit_a_SOURCES
=
chared.c el.c history.c map.c prompt.c readline.c
\
search.c tokenizer.c vi.c common.c emacs.c
\
hist.c key.c parse.c read.c refresh.c sig.c term.c
\
tty.c help.c fcns.c
EXTRA_libedit_a_SOURCES
=
np/unvis.c np/strlcpy.c np/vis.c np/strlcat.c
\
np/fgetln.c
tty.c help.c fcns.c filecomplete.c
\
np/unvis.c np/strlcpy.c np/vis.c np/strlcat.c
\
np/fgetln.c
libedit_a_LIBADD
=
@LIBEDIT_LOBJECTS@
libedit_a_DEPENDENCIES
=
@LIBEDIT_LOBJECTS@
...
...
@@ -23,22 +20,13 @@ libedit_a_DEPENDENCIES = @LIBEDIT_LOBJECTS@
pkginclude_HEADERS
=
readline/readline.h
noinst_HEADERS
=
chared.h el.h el_term.h histedit.h key.h parse.h refresh.h sig.h
\
sys.h
tokenizer.h
config.h hist.h map.h prompt.h read.h
\
search.h tty.h
libedit_term.h
vis.h
sys.h config.h hist.h map.h prompt.h read.h
\
search.h tty.h
filecomplete.h np/
vis.h
EXTRA_DIST
=
makelist.sh
np/unvis.c np/strlcpy.c np/vis.c np/vis.h np/strlcat.c np/fgetln.c
EXTRA_DIST
=
makelist.sh
CLEANFILES
=
makelist common.h emacs.h vi.h fcns.h help.h fcns.c help.c
# Make sure to include stuff from this directory first, to get right "config.h"
# Automake puts into DEFAULT_INCLUDES this source and corresponding
# build directory together with ../../include to let all make files
# find the central "config.h". This variable is used before INCLUDES
# above. But in automake 1.10 the order of these are changed. Put the
# includes of this directory into DEFS to always be sure it is first
# before DEFAULT_INCLUDES on the compile line.
DEFS
=
-DUNDEF_THREADS_HACK
-DHAVE_CONFIG_H
-DNO_KILL_INTR
-I
.
-I
$(srcdir)
SUFFIXES
=
.sh
.sh
:
...
...
@@ -101,6 +89,4 @@ term.o: vi.h emacs.h common.h help.h fcns.h
tty.o
:
vi.h emacs.h common.h help.h fcns.h
help.o
:
vi.h emacs.h common.h help.h fcns.h
fcns.o
:
vi.h emacs.h common.h help.h fcns.h
# Don't update the files from bitkeeper
%
::
SCCS/s.%
filecomplete.o
:
vi.h emacs.h common.h help.h fcns.h
cmd-line-utils/libedit/chared.c
View file @
5d2a6c47
/* $NetBSD: chared.c,v 1.2
2 2004/08/13 12:10:38 mycroft
Exp $ */
/* $NetBSD: chared.c,v 1.2
6 2009/02/06 12:45:25 sketch
Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -32,7 +32,13 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)chared.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* chared.c: Character editor utilities
...
...
@@ -40,6 +46,8 @@
#include <stdlib.h>
#include "el.h"
private
void
ch__clearmacro
(
EditLine
*
);
/* value to leave unused in line buffer */
#define EL_LEAVE 2
...
...
@@ -51,13 +59,13 @@ cv_undo(EditLine *el)
{
c_undo_t
*
vu
=
&
el
->
el_chared
.
c_undo
;
c_redo_t
*
r
=
&
el
->
el_chared
.
c_redo
;
int
size
;
unsigned
int
size
;
/* Save entire line for undo */
size
=
el
->
el_line
.
lastchar
-
el
->
el_line
.
buffer
;
vu
->
len
=
size
;
vu
->
cursor
=
el
->
el_line
.
cursor
-
el
->
el_line
.
buffer
;
memcpy
(
vu
->
buf
,
el
->
el_line
.
buffer
,
(
size_t
)
size
);
memcpy
(
vu
->
buf
,
el
->
el_line
.
buffer
,
size
);
/* save command info for redo */
r
->
count
=
el
->
el_state
.
doingarg
?
el
->
el_state
.
argument
:
0
;
...
...
@@ -439,6 +447,8 @@ cv__endword(char *p, char *high, int n, int (*wtest)(int))
protected
int
ch_init
(
EditLine
*
el
)
{
c_macro_t
*
ma
=
&
el
->
el_chared
.
c_macro
;
el
->
el_line
.
buffer
=
(
char
*
)
el_malloc
(
EL_BUFSIZ
);
if
(
el
->
el_line
.
buffer
==
NULL
)
return
(
-
1
);
...
...
@@ -479,11 +489,10 @@ ch_init(EditLine *el)
el
->
el_state
.
argument
=
1
;
el
->
el_state
.
lastcmd
=
ED_UNASSIGNED
;
el
->
el_chared
.
c_macro
.
level
=
-
1
;
el
->
el_chared
.
c_macro
.
offset
=
0
;
el
->
el_chared
.
c_macro
.
macro
=
(
char
**
)
el_malloc
(
EL_MAXMACRO
*
sizeof
(
char
*
));
if
(
el
->
el_chared
.
c_macro
.
macro
==
NULL
)
ma
->
level
=
-
1
;
ma
->
offset
=
0
;
ma
->
macro
=
(
char
**
)
el_malloc
(
EL_MAXMACRO
*
sizeof
(
char
*
));
if
(
ma
->
macro
==
NULL
)
return
(
-
1
);
return
(
0
);
}
...
...
@@ -492,7 +501,7 @@ ch_init(EditLine *el)
* Reset the character editor
*/
protected
void
ch_reset
(
EditLine
*
el
)
ch_reset
(
EditLine
*
el
,
int
mclear
)
{
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
...
...
@@ -513,9 +522,19 @@ ch_reset(EditLine *el)
el
->
el_state
.
argument
=
1
;
el
->
el_state
.
lastcmd
=
ED_UNASSIGNED
;
el
->
el_chared
.
c_macro
.
level
=
-
1
;
el
->
el_history
.
eventno
=
0
;
if
(
mclear
)
ch__clearmacro
(
el
);
}
private
void
ch__clearmacro
(
el
)
EditLine
*
el
;
{
c_macro_t
*
ma
=
&
el
->
el_chared
.
c_macro
;
while
(
ma
->
level
>=
0
)
el_free
((
ptr_t
)
ma
->
macro
[
ma
->
level
--
]);
}
/* ch_enlargebufs():
...
...
@@ -623,9 +642,9 @@ ch_end(EditLine *el)
el
->
el_chared
.
c_redo
.
cmd
=
ED_UNASSIGNED
;
el_free
((
ptr_t
)
el
->
el_chared
.
c_kill
.
buf
);
el
->
el_chared
.
c_kill
.
buf
=
NULL
;
ch_reset
(
el
,
1
);
el_free
((
ptr_t
)
el
->
el_chared
.
c_macro
.
macro
);
el
->
el_chared
.
c_macro
.
macro
=
NULL
;
ch_reset
(
el
);
}
...
...
cmd-line-utils/libedit/chared.h
View file @
5d2a6c47
/* $NetBSD: chared.h,v 1.1
4 2004/08/13 12:10:39 mycroft
Exp $ */
/* $NetBSD: chared.h,v 1.1
7 2006/03/06 21:11:56 christos
Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -48,7 +48,7 @@
#define EL_MAXMACRO 10
/*
* This is a issue of basic "vi" look-and-feel. Defining VI_MOVE works
* This is a
n
issue of basic "vi" look-and-feel. Defining VI_MOVE works
* like real vi: i.e. the transition from command<->insert modes moves
* the cursor.
*
...
...
@@ -116,11 +116,10 @@ typedef struct el_chared_t {
}
el_chared_t
;
#define STReof "^D\b\b"
#define STRQQ "\"\""
#define isglob(a) (strchr("*[]?", (a)) != NULL)
#define isword(a) (isprint(a))
#define isword(a) (
el_
isprint(a))
#define NOP 0x00
#define DELETE 0x01
...
...
@@ -161,7 +160,7 @@ protected int c_gets(EditLine *, char *, const char *);
protected
int
c_hpos
(
EditLine
*
);
protected
int
ch_init
(
EditLine
*
);
protected
void
ch_reset
(
EditLine
*
);
protected
void
ch_reset
(
EditLine
*
,
int
);
protected
int
ch_enlargebufs
(
EditLine
*
,
size_t
);
protected
void
ch_end
(
EditLine
*
);
...
...
cmd-line-utils/libedit/common.c
View file @
5d2a6c47
/* $NetBSD: common.c,v 1.
16 2003/08/07 16:44:30 ag
c Exp $ */
/* $NetBSD: common.c,v 1.
21 2008/09/30 08:37:42 aymeri
c Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -32,7 +32,13 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)common.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* common.c: Common Editor functions
...
...
@@ -130,7 +136,7 @@ ed_delete_prev_word(EditLine *el, int c __attribute__((__unused__)))
*/
protected
el_action_t
/*ARGSUSED*/
ed_delete_next_char
(
EditLine
*
el
,
int
c
__attribute__
((
__unused__
))
)
ed_delete_next_char
(
EditLine
*
el
,
int
c
)
{
#ifdef notdef
/* XXX */
#define EL el->el_line
...
...
@@ -147,9 +153,8 @@ ed_delete_next_char(EditLine *el, int c __attribute__((__unused__)))
#ifdef KSHVI
return
(
CC_ERROR
);
#else
term_overwrite
(
el
,
STReof
,
4
);
/* then do a EOF */
term__flush
();
/* then do an EOF */
term_writechar
(
el
,
c
);
return
(
CC_EOF
);
#endif
}
else
{
...
...
@@ -207,13 +212,13 @@ ed_move_to_end(EditLine *el, int c __attribute__((__unused__)))
el
->
el_line
.
cursor
=
el
->
el_line
.
lastchar
;
if
(
el
->
el_map
.
type
==
MAP_VI
)
{
#ifdef VI_MOVE
el
->
el_line
.
cursor
--
;
#endif
if
(
el
->
el_chared
.
c_vcmd
.
action
!=
NOP
)
{
cv_delfini
(
el
);
return
(
CC_REFRESH
);
}
#ifdef VI_MOVE
el
->
el_line
.
cursor
--
;
#endif
}
return
(
CC_CURSOR
);
}
...
...
@@ -609,7 +614,7 @@ protected el_action_t
ed_start_over
(
EditLine
*
el
,
int
c
__attribute__
((
__unused__
)))
{
ch_reset
(
el
);
ch_reset
(
el
,
0
);
return
(
CC_REFRESH
);
}
...
...
@@ -904,7 +909,7 @@ ed_command(EditLine *el, int c __attribute__((__unused__)))
int
tmplen
;
tmplen
=
c_gets
(
el
,
tmpbuf
,
"
\n
: "
);
term__putc
(
'\n'
);
term__putc
(
el
,
'\n'
);
if
(
tmplen
<
0
||
(
tmpbuf
[
tmplen
]
=
0
,
parse_line
(
el
,
tmpbuf
))
==
-
1
)
term_beep
(
el
);
...
...
cmd-line-utils/libedit/config.h
View file @
5d2a6c47
#include "my_config.h"
#include "sys.h"
#if defined(LIBC_SCCS) && !defined(lint)
#define __RCSID(x)
#define __COPYRIGHT(x)
#endif
#define __RENAME(x)
#define _DIAGASSERT(x)
#if !defined(__attribute__) && (defined(__cplusplus) || !defined(__GNUC__) || __GNUC__ == 2 && __GNUC_MINOR__ < 8)
#define __attribute__(A)
#endif
cmd-line-utils/libedit/el.c
View file @
5d2a6c47
/* $NetBSD: el.c,v 1.
39 2004/07/08 00:51:36 christos
Exp $ */
/* $NetBSD: el.c,v 1.
47 2009/01/18 12:17:24 lukem
Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -32,7 +32,13 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)el.c 8.2 (Berkeley) 1/3/94";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* el.c: EditLine interface functions
...
...
@@ -58,9 +64,12 @@ el_init(const char *prog, FILE *fin, FILE *fout, FILE *ferr)
memset
(
el
,
0
,
sizeof
(
EditLine
));
el
->
el_inf
d
=
fileno
(
fin
)
;
el
->
el_inf
ile
=
fin
;
el
->
el_outfile
=
fout
;
el
->
el_errfile
=
ferr
;
el
->
el_infd
=
fileno
(
fin
);
if
((
el
->
el_prog
=
el_strdup
(
prog
))
==
NULL
)
{
el_free
(
el
);
return
NULL
;
...
...
@@ -126,7 +135,7 @@ el_reset(EditLine *el)
{
tty_cookedmode
(
el
);
ch_reset
(
el
);
/* XXX: Do we want that? */
ch_reset
(
el
,
0
);
/* XXX: Do we want that? */
}
...
...
@@ -136,29 +145,29 @@ el_reset(EditLine *el)
public
int
el_set
(
EditLine
*
el
,
int
op
,
...)
{
va_list
va
;
va_list
ap
;
int
rv
=
0
;
if
(
el
==
NULL
)
return
(
-
1
);
va_start
(
va
,
op
);
va_start
(
ap
,
op
);
switch
(
op
)
{
case
EL_PROMPT
:
case
EL_RPROMPT
:
rv
=
prompt_set
(
el
,
va_arg
(
va
,
el_pfunc_t
),
op
);
rv
=
prompt_set
(
el
,
va_arg
(
ap
,
el_pfunc_t
),
op
);
break
;
case
EL_TERMINAL
:
rv
=
term_set
(
el
,
va_arg
(
va
,
char
*
));
rv
=
term_set
(
el
,
va_arg
(
ap
,
char
*
));
break
;
case
EL_EDITOR
:
rv
=
map_set_editor
(
el
,
va_arg
(
va
,
char
*
));
rv
=
map_set_editor
(
el
,
va_arg
(
ap
,
char
*
));
break
;
case
EL_SIGNAL
:
if
(
va_arg
(
va
,
int
))
if
(
va_arg
(
ap
,
int
))
el
->
el_flags
|=
HANDLE_SIGNALS
;
else
el
->
el_flags
&=
~
HANDLE_SIGNALS
;
...
...
@@ -167,6 +176,7 @@ el_set(EditLine *el, int op, ...)
case
EL_BIND
:
case
EL_TELLTC
:
case
EL_SETTC
:
case
EL_GETTC
:
case
EL_ECHOTC
:
case
EL_SETTY
:
{
...
...
@@ -174,7 +184,7 @@ el_set(EditLine *el, int op, ...)
int
i
;
for
(
i
=
1
;
i
<
20
;
i
++
)
if
((
argv
[
i
]
=
va_arg
(
va
,
char
*
))
==
NULL
)
if
((
argv
[
i
]
=
va_arg
(
ap
,
char
*
))
==
NULL
)
break
;
switch
(
op
)
{
...
...
@@ -213,9 +223,9 @@ el_set(EditLine *el, int op, ...)
case
EL_ADDFN
:
{
char
*
name
=
va_arg
(
va
,
char
*
);
char
*
help
=
va_arg
(
va
,
char
*
);
el_func_t
func
=
va_arg
(
va
,
el_func_t
);
char
*
name
=
va_arg
(
ap
,
char
*
);
char
*
help
=
va_arg
(
ap
,
char
*
);
el_func_t
func
=
va_arg
(
ap
,
el_func_t
);
rv
=
map_addfunc
(
el
,
name
,
help
,
func
);
break
;
...
...
@@ -223,15 +233,15 @@ el_set(EditLine *el, int op, ...)
case
EL_HIST
:
{
hist_fun_t
func
=
va_arg
(
va
,
hist_fun_t
);
ptr_t
ptr
=
va_arg
(
va
,
char
*
);
hist_fun_t
func
=
va_arg
(
ap
,
hist_fun_t
);
ptr_t
ptr
=
va_arg
(
ap
,
char
*
);
rv
=
hist_set
(
el
,
func
,
ptr
);
break
;
}
case
EL_EDITMODE
:
if
(
va_arg
(
va
,
int
))
if
(
va_arg
(
ap
,
int
))
el
->
el_flags
&=
~
EDIT_DISABLED
;
else
el
->
el_flags
|=
EDIT_DISABLED
;
...
...
@@ -240,17 +250,17 @@ el_set(EditLine *el, int op, ...)
case
EL_GETCFN
:
{
el_rfunc_t
rc
=
va_arg
(
va
,
el_rfunc_t
);
el_rfunc_t
rc
=
va_arg
(
ap
,
el_rfunc_t
);
rv
=
el_read_setfn
(
el
,
rc
);
break
;
}
case
EL_CLIENTDATA
:
el
->
el_data
=
va_arg
(
va
,
void
*
);
el
->
el_data
=
va_arg
(
ap
,
void
*
);
break
;
case
EL_UNBUFFERED
:
rv
=
va_arg
(
va
,
int
);
rv
=
va_arg
(
ap
,
int
);
if
(
rv
&&
!
(
el
->
el_flags
&
UNBUFFERED
))
{
el
->
el_flags
|=
UNBUFFERED
;
read_prepare
(
el
);
...
...
@@ -262,7 +272,7 @@ el_set(EditLine *el, int op, ...)
break
;
case
EL_PREP_TERM
:
rv
=
va_arg
(
va
,
int
);
rv
=
va_arg
(
ap
,
int
);
if
(
rv
)
(
void
)
tty_rawmode
(
el
);
else
...
...
@@ -270,12 +280,45 @@ el_set(EditLine *el, int op, ...)
rv
=
0
;
break
;
case
EL_SETFP
:
{
FILE
*
fp
;
int
what
;
what
=
va_arg
(
ap
,
int
);
fp
=
va_arg
(
ap
,
FILE
*
);
rv
=
0
;
switch
(
what
)
{
case
0
:
el
->
el_infile
=
fp
;
el
->
el_infd
=
fileno
(
fp
);
break
;
case
1
:
el
->
el_outfile
=
fp
;
break
;
case
2
:
el
->
el_errfile
=
fp
;
break
;
default:
rv
=
-
1
;
break
;
}
break
;
}
case
EL_REFRESH
:
re_clear_display
(
el
);
re_refresh
(
el
);
term__flush
(
el
);
break
;
default:
rv
=
-
1
;
break
;
}
va_end
(
va
);
va_end
(
ap
);
return
(
rv
);
}
...
...
@@ -284,90 +327,71 @@ el_set(EditLine *el, int op, ...)
* retrieve the editline parameters
*/
public
int
el_get
(
EditLine
*
el
,
int
op
,
void
*
ret
)
el_get
(
EditLine
*
el
,
int
op
,
...
)
{
va_list
ap
;
int
rv
;
if
(
el
==
NULL
||
ret
==
NULL
)
return
(
-
1
);
if
(
el
==
NULL
)
return
-
1
;
va_start
(
ap
,
op
);
switch
(
op
)
{
case
EL_PROMPT
:
case
EL_RPROMPT
:
rv
=
prompt_get
(
el
,
(
void
*
)
&
ret
,
op
);
rv
=
prompt_get
(
el
,
va_arg
(
ap
,
el_pfunc_t
*
)
,
op
);
break
;
case
EL_EDITOR
:
rv
=
map_get_editor
(
el
,
(
void
*
)
&
ret
);
rv
=
map_get_editor
(
el
,
va_arg
(
ap
,
const
char
**
)
);
break
;
case
EL_SIGNAL
:
*
((
int
*
)
ret
)
=
(
el
->
el_flags
&
HANDLE_SIGNALS
);
*
va_arg
(
ap
,
int
*
)
=
(
el
->
el_flags
&
HANDLE_SIGNALS
);
rv
=
0
;
break
;
case
EL_EDITMODE
:
*
((
int
*
)
ret
)
=
(
!
(
el
->
el_flags
&
EDIT_DISABLED
)
);
*
va_arg
(
ap
,
int
*
)
=
!
(
el
->
el_flags
&
EDIT_DISABLED
);
rv
=
0
;
break
;
case
EL_TERMINAL
:
term_get
(
el
,
(
const
char
**
)
ret
);
term_get
(
el
,
va_arg
(
ap
,
const
char
**
)
);
rv
=
0
;
break
;
#if 0 /* XXX */
case EL_BIND:
case EL_TELLTC:
case EL_SETTC:
case EL_ECHOTC:
case EL_SETTY:
case
EL_GETTC
:
{
const char *argv[20];
static
char
name
[]
=
"gettc"
;
char
*
argv
[
20
];
int
i
;
for (i = 1; i <
sizeof(argv) / sizeof(argv[0]
); i++)
if ((argv[i] = va_arg(
va
, char *)) == NULL)
for
(
i
=
1
;
i
<
(
int
)(
sizeof
(
argv
)
/
sizeof
(
argv
[
0
])
);
i
++
)
if
((
argv
[
i
]
=
va_arg
(
ap
,
char
*
))
==
NULL
)
break
;
switch
(
op
)
{
case EL_BIND:
argv[0] = "bind";
rv = map_bind(el, i, argv);
break;
case EL_TELLTC:
argv[0] = "telltc";
rv = term_telltc(el, i, argv);
break;
case EL_SETTC:
argv[0] = "settc";
rv = term_settc(el, i, argv);
break;
case EL_ECHOTC:
argv[0] = "echotc";
rv = term_echotc(el, i, argv);
break;
case EL_SETTY:
argv[0] = "setty";
rv = tty_stty(el, i, argv);
case
EL_GETTC
:
argv
[
0
]
=
name
;
rv
=
term_gettc
(
el
,
i
,
argv
);
break
;
default:
rv
=
-
1
;
EL_ABORT((el->errfile, "Bad op %d\n", op));
EL_ABORT
((
el
->
e
l_e
rrfile
,
"Bad op %d
\n
"
,
op
));
break
;
}
break
;
}
#if 0 /* XXX */
case EL_ADDFN:
{
char *name = va_arg(
va
, char *);
char *help = va_arg(
va
, char *);
el_func_t func = va_arg(
va
, el_func_t);
char *name = va_arg(
ap
, char *);
char *help = va_arg(
ap
, char *);
el_func_t func = va_arg(
ap
, el_func_t);
rv = map_addfunc(el, name, help, func);
break;
...
...
@@ -375,31 +399,57 @@ el_get(EditLine *el, int op, void *ret)
case EL_HIST:
{
hist_fun_t func = va_arg(
va
, hist_fun_t);
ptr_t ptr = va_arg(
va
, char *);
hist_fun_t func = va_arg(
ap
, hist_fun_t);
ptr_t ptr = va_arg(
ap
, char *);
rv = hist_set(el, func, ptr);
}
break;
#endif /* XXX */
case
EL_GETCFN
:
*
((
el_rfunc_t
*
)
ret
)
=
el_read_getfn
(
el
);
*
va_arg
(
ap
,
el_rfunc_t
*
)
=
el_read_getfn
(
el
);
rv
=
0
;
break
;
case
EL_CLIENTDATA
:
*
((
void
**
)
ret
)
=
el
->
el_data
;
*
va_arg
(
ap
,
void
**
)
=
el
->
el_data
;
rv
=
0
;
break
;
case
EL_UNBUFFERED
:
*
((
int
*
)
ret
)
=
(
!
(
el
->
el_flags
&
UNBUFFERED
));
*
va_arg
(
ap
,
int
*
)
=
(
!
(
el
->
el_flags
&
UNBUFFERED
));
rv
=
0
;
break
;
case
EL_GETFP
:
{
int
what
;
FILE
**
fpp
;
what
=
va_arg
(
ap
,
int
);
fpp
=
va_arg
(
ap
,
FILE
**
);
rv
=
0
;
switch
(
what
)
{
case
0
:
*
fpp
=
el
->
el_infile
;
break
;
case
1
:
*
fpp
=
el
->
el_outfile
;
break
;
case
2
:
*
fpp
=
el
->
el_errfile
;
break
;
default:
rv
=
-
1
;
break
;
}
break
;
}
default:
rv
=
-
1
;
break
;
}
va_end
(
ap
);
return
(
rv
);
}
...
...
@@ -428,17 +478,17 @@ el_source(EditLine *el, const char *fname)
fp
=
NULL
;
if
(
fname
==
NULL
)
{
#ifdef HAVE_ISSETUGID
static
const
char
elpath
[]
=
"/.editrc"
;
/* XXXMYSQL: Portability fix (for which platforms?) */
#ifdef MAXPATHLEN
char
path
[
MAXPATHLEN
];
#else
char
path
[
4096
];
#endif
#ifdef HAVE_ISSETUGID
if
(
issetugid
())
return
(
-
1
);
#endif
if
((
ptr
=
getenv
(
"HOME"
))
==
NULL
)
return
(
-
1
);
if
(
strlcpy
(
path
,
ptr
,
sizeof
(
path
))
>=
sizeof
(
path
))
...
...
@@ -446,6 +496,14 @@ el_source(EditLine *el, const char *fname)
if
(
strlcat
(
path
,
elpath
,
sizeof
(
path
))
>=
sizeof
(
path
))
return
(
-
1
);
fname
=
path
;
#else
/*
* If issetugid() is missing, always return an error, in order
* to keep from inadvertently opening up the user to a security
* hole.
*/
return
(
-
1
);
#endif
}
if
(
fp
==
NULL
)
fp
=
fopen
(
fname
,
"r"
);
...
...
cmd-line-utils/libedit/el.h
View file @
5d2a6c47
/* $NetBSD: el.h,v 1.1
6 2003/10/18 23:48:42
christos Exp $ */
/* $NetBSD: el.h,v 1.1
7 2006/12/15 22:13:33
christos Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -110,6 +110,7 @@ typedef struct el_state_t {
struct
editline
{
char
*
el_prog
;
/* the program name */
FILE
*
el_infile
;
/* Stdio stuff */
FILE
*
el_outfile
;
/* Stdio stuff */
FILE
*
el_errfile
;
/* Stdio stuff */
int
el_infd
;
/* Input file descriptor */
...
...
@@ -136,7 +137,8 @@ struct editline {
protected
int
el_editmode
(
EditLine
*
,
int
,
const
char
**
);
#define el_isprint(x) ((unsigned char) (x) < 0x80 ? isprint(x) : 1)
/* XXXMYSQL: Bug#23097 mysql can't insert korean on mysql prompt. */
#define el_isprint(x) ((unsigned char) (x) < 0x80 ? isprint(x) : 1)
#ifdef DEBUG
#define EL_ABORT(a) do { \
...
...
cmd-line-utils/libedit/el_term.h
View file @
5d2a6c47
/* $NetBSD: term.h,v 1.1
5 2003/09/14 21:48:55
christos Exp $ */
/* $NetBSD: term.h,v 1.1
9 2008/09/10 15:45:37
christos Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -81,25 +81,6 @@ typedef struct {
#define A_K_EN 5
#define A_K_NKEYS 6
#ifdef _SUNOS
extern
int
tgetent
(
char
*
,
const
char
*
);
extern
int
tgetflag
(
char
*
);
extern
int
tgetnum
(
char
*
);
extern
int
tputs
(
const
char
*
,
int
,
int
(
*
)(
int
));
extern
char
*
tgoto
(
const
char
*
,
int
,
int
);
extern
char
*
tgetstr
(
char
*
,
char
**
);
#endif
#if !HAVE_DECL_TGOTO
/*
'tgoto' is not declared in the system header files, this causes
problems on 64-bit systems. The function returns a 64 bit pointer
but caller see it as "int" and it's thus truncated to 32-bit
*/
extern
char
*
tgoto
(
const
char
*
,
int
,
int
);
#endif
protected
void
term_move_to_line
(
EditLine
*
,
int
);
protected
void
term_move_to_char
(
EditLine
*
,
int
);
protected
void
term_clear_EOL
(
EditLine
*
,
int
);
...
...
@@ -119,10 +100,12 @@ protected void term_end(EditLine *);
protected
void
term_get
(
EditLine
*
,
const
char
**
);
protected
int
term_set
(
EditLine
*
,
const
char
*
);
protected
int
term_settc
(
EditLine
*
,
int
,
const
char
**
);
protected
int
term_gettc
(
EditLine
*
,
int
,
char
**
);
protected
int
term_telltc
(
EditLine
*
,
int
,
const
char
**
);
protected
int
term_echotc
(
EditLine
*
,
int
,
const
char
**
);
protected
int
term__putc
(
int
);
protected
void
term__flush
(
void
);
protected
void
term_writec
(
EditLine
*
,
int
);
protected
int
term__putc
(
EditLine
*
,
int
);
protected
void
term__flush
(
EditLine
*
);
/*
* Easy access macros
...
...
@@ -134,6 +117,7 @@ protected void term__flush(void);
#define EL_CAN_CEOL (EL_FLAGS & TERM_CAN_CEOL)
#define EL_CAN_TAB (EL_FLAGS & TERM_CAN_TAB)
#define EL_CAN_ME (EL_FLAGS & TERM_CAN_ME)
#define EL_CAN_UP (EL_FLAGS & TERM_CAN_UP)
#define EL_HAS_META (EL_FLAGS & TERM_HAS_META)
#define EL_HAS_AUTO_MARGINS (EL_FLAGS & TERM_HAS_AUTO_MARGINS)
#define EL_HAS_MAGIC_MARGINS (EL_FLAGS & TERM_HAS_MAGIC_MARGINS)
...
...
cmd-line-utils/libedit/emacs.c
View file @
5d2a6c47
/* $NetBSD: emacs.c,v 1.
19 2004/10/28 21:14:52 dsl
Exp $ */
/* $NetBSD: emacs.c,v 1.
21 2006/03/06 21:11:56 christos
Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -32,7 +32,13 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)emacs.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* emacs.c: Emacs functions
...
...
@@ -45,15 +51,14 @@
*/
protected
el_action_t
/*ARGSUSED*/
em_delete_or_list
(
EditLine
*
el
,
int
c
__attribute__
((
__unused__
))
)
em_delete_or_list
(
EditLine
*
el
,
int
c
)
{
if
(
el
->
el_line
.
cursor
==
el
->
el_line
.
lastchar
)
{
/* if I'm at the end */
if
(
el
->
el_line
.
cursor
==
el
->
el_line
.
buffer
)
{
/* and the beginning */
term_overwrite
(
el
,
STReof
,
4
);
/* then do a EOF */
term__flush
();
term_writec
(
el
,
c
);
/* then do an EOF */
return
(
CC_EOF
);
}
else
{
/*
...
...
cmd-line-utils/libedit/hist.c
View file @
5d2a6c47
...
...
@@ -32,7 +32,13 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)hist.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* hist.c: History access functions
...
...
cmd-line-utils/libedit/histedit.h
View file @
5d2a6c47
/* $NetBSD: histedit.h,v 1.
25 2003/12/05 13:37:48 lukem
Exp $ */
/* $NetBSD: histedit.h,v 1.
35 2009/02/05 19:15:44 christos
Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -41,11 +41,15 @@
#define _HISTEDIT_H_
#define LIBEDIT_MAJOR 2
#define LIBEDIT_MINOR
9
#define LIBEDIT_MINOR
11
#include <sys/types.h>
#include <stdio.h>
#ifdef __cplusplus
extern
"C"
{
#endif
/*
* ==== Editing ====
*/
...
...
@@ -88,7 +92,7 @@ void el_reset(EditLine *);
*/
const
char
*
el_gets
(
EditLine
*
,
int
*
);
int
el_getc
(
EditLine
*
,
char
*
);
void
el_push
(
EditLine
*
,
char
*
);
void
el_push
(
EditLine
*
,
c
onst
c
har
*
);
/*
* Beep!
...
...
@@ -105,7 +109,8 @@ int el_parse(EditLine *, int, const char **);
* Low level editline access functions
*/
int
el_set
(
EditLine
*
,
int
,
...);
int
el_get
(
EditLine
*
,
int
,
void
*
);
int
el_get
(
EditLine
*
,
int
,
...);
unsigned
char
_el_fn_complete
(
EditLine
*
,
int
);
/*
* el_set/el_get parameters
...
...
@@ -128,8 +133,12 @@ int el_get(EditLine *, int, void *);
#define EL_CLIENTDATA 14
/* , void *); */
#define EL_UNBUFFERED 15
/* , int); */
#define EL_PREP_TERM 16
/* , int); */
#define EL_GETTC 17
/* , const char *, ..., NULL); */
#define EL_GETFP 18
/* , int, FILE **); */
#define EL_SETFP 19
/* , int, FILE *); */
#define EL_REFRESH 20
/* , void); */
#define
EL_BUILTIN_GETCFN (NULL)
#define
EL_BUILTIN_GETCFN (NULL)
/*
* Source named file or $PWD/.editrc or $HOME/.editrc
...
...
@@ -192,6 +201,7 @@ int history(History *, HistEvent *, int, ...);
#define H_CLEAR 19
/* , void); */
#define H_SETUNIQUE 20
/* , int); */
#define H_GETUNIQUE 21
/* , void); */
#define H_DEL 22
/* , int); */
/*
...
...
@@ -211,4 +221,8 @@ int tok_line(Tokenizer *, const LineInfo *,
int
tok_str
(
Tokenizer
*
,
const
char
*
,
int
*
,
const
char
***
);
#ifdef __cplusplus
}
#endif
#endif
/* _HISTEDIT_H_ */
cmd-line-utils/libedit/history.c
View file @
5d2a6c47
/* $NetBSD: history.c,v 1.
28 2004/11/27 18:31:45 christos
Exp $ */
/* $NetBSD: history.c,v 1.
33 2009/02/06 14:40:32 sketch
Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -32,7 +32,13 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)history.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* hist.c: History access functions
...
...
@@ -40,7 +46,11 @@
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#ifdef HAVE_VIS_H
#include <vis.h>
#else
#include "np/vis.h"
#endif
#include <sys/stat.h>
static
const
char
hist_cookie
[]
=
"_HiStOrY_V2_
\n
"
;
...
...
@@ -61,6 +71,7 @@ struct history {
history_gfun_t
h_prev
;
/* Get the previous element */
history_gfun_t
h_curr
;
/* Get the current element */
history_sfun_t
h_set
;
/* Set the current element */
history_sfun_t
h_del
;
/* Set the given element */
history_vfun_t
h_clear
;
/* Clear the history list */
history_efun_t
h_enter
;
/* Add an element */
history_efun_t
h_add
;
/* Append to an element */
...
...
@@ -75,6 +86,7 @@ struct history {
#define HCLEAR(h, ev) (*(h)->h_clear)((h)->h_ref, ev)
#define HENTER(h, ev, str) (*(h)->h_enter)((h)->h_ref, ev, str)
#define HADD(h, ev, str) (*(h)->h_add)((h)->h_ref, ev, str)
#define HDEL(h, ev, n) (*(h)->h_del)((h)->h_ref, ev, n)
#define h_strdup(a) strdup(a)
#define h_malloc(a) malloc(a)
...
...
@@ -122,16 +134,18 @@ typedef struct history_t {
#define H_UNIQUE 1
/* Store only unique elements */
}
history_t
;
private
int
history_def_first
(
ptr_t
,
HistEvent
*
);
private
int
history_def_last
(
ptr_t
,
HistEvent
*
);
private
int
history_def_next
(
ptr_t
,
HistEvent
*
);
private
int
history_def_first
(
ptr_t
,
HistEvent
*
);
private
int
history_def_prev
(
ptr_t
,
HistEvent
*
);
private
int
history_def_last
(
ptr_t
,
HistEvent
*
);
private
int
history_def_curr
(
ptr_t
,
HistEvent
*
);
private
int
history_def_set
(
ptr_t
,
HistEvent
*
,
const
int
n
);
private
int
history_def_set
(
ptr_t
,
HistEvent
*
,
const
int
);
private
void
history_def_clear
(
ptr_t
,
HistEvent
*
);
private
int
history_def_enter
(
ptr_t
,
HistEvent
*
,
const
char
*
);
private
int
history_def_add
(
ptr_t
,
HistEvent
*
,
const
char
*
);
private
int
history_def_del
(
ptr_t
,
HistEvent
*
,
const
int
);
private
int
history_def_init
(
ptr_t
*
,
HistEvent
*
,
int
);
private
void
history_def_clear
(
ptr_t
,
HistEvent
*
);
private
int
history_def_insert
(
history_t
*
,
HistEvent
*
,
const
char
*
);
private
void
history_def_delete
(
history_t
*
,
HistEvent
*
,
hentry_t
*
);
...
...
@@ -353,6 +367,24 @@ history_def_add(ptr_t p, HistEvent *ev, const char *str)
}
/* history_def_del():
* Delete element hp of the h list
*/
/* ARGSUSED */
private
int
history_def_del
(
ptr_t
p
,
HistEvent
*
ev
__attribute__
((
__unused__
)),
const
int
num
)
{
history_t
*
h
=
(
history_t
*
)
p
;
if
(
history_def_set
(
h
,
ev
,
num
)
!=
0
)
return
(
-
1
);
ev
->
str
=
strdup
(
h
->
cursor
->
ev
.
str
);
ev
->
num
=
h
->
cursor
->
ev
.
num
;
history_def_delete
(
h
,
ev
,
h
->
cursor
);
return
(
0
);
}
/* history_def_delete():
* Delete element hp of the h list
*/
...
...
@@ -364,6 +396,8 @@ history_def_delete(history_t *h,
HistEventPrivate
*
evp
=
(
void
*
)
&
hp
->
ev
;
if
(
hp
==
&
h
->
list
)
abort
();
if
(
h
->
cursor
==
hp
)
h
->
cursor
=
hp
->
prev
;
hp
->
prev
->
next
=
hp
->
next
;
hp
->
next
->
prev
=
hp
->
prev
;
h_free
((
ptr_t
)
evp
->
str
);
...
...
@@ -497,6 +531,7 @@ history_init(void)
h
->
h_clear
=
history_def_clear
;
h
->
h_enter
=
history_def_enter
;
h
->
h_add
=
history_def_add
;
h
->
h_del
=
history_def_del
;
return
(
h
);
}
...
...
@@ -512,6 +547,8 @@ history_end(History *h)
if
(
h
->
h_next
==
history_def_next
)
history_def_clear
(
h
->
h_ref
,
&
ev
);
h_free
(
h
->
h_ref
);
h_free
(
h
);
}
...
...
@@ -597,7 +634,7 @@ history_set_fun(History *h, History *nh)
if
(
nh
->
h_first
==
NULL
||
nh
->
h_next
==
NULL
||
nh
->
h_last
==
NULL
||
nh
->
h_prev
==
NULL
||
nh
->
h_curr
==
NULL
||
nh
->
h_set
==
NULL
||
nh
->
h_enter
==
NULL
||
nh
->
h_add
==
NULL
||
nh
->
h_clear
==
NULL
||
nh
->
h_ref
==
NULL
)
{
nh
->
h_
del
==
NULL
||
nh
->
h_
ref
==
NULL
)
{
if
(
h
->
h_next
!=
history_def_next
)
{
history_def_init
(
&
h
->
h_ref
,
&
ev
,
0
);
h
->
h_first
=
history_def_first
;
...
...
@@ -609,6 +646,7 @@ history_set_fun(History *h, History *nh)
h
->
h_clear
=
history_def_clear
;
h
->
h_enter
=
history_def_enter
;
h
->
h_add
=
history_def_add
;
h
->
h_del
=
history_def_del
;
}
return
(
-
1
);
}
...
...
@@ -625,6 +663,7 @@ history_set_fun(History *h, History *nh)
h
->
h_clear
=
nh
->
h_clear
;
h
->
h_enter
=
nh
->
h_enter
;
h
->
h_add
=
nh
->
h_add
;
h
->
h_del
=
nh
->
h_del
;
return
(
0
);
}
...
...
@@ -676,8 +715,8 @@ history_load(History *h, const char *fname)
(
void
)
strunvis
(
ptr
,
line
);
line
[
sz
]
=
c
;
if
(
HENTER
(
h
,
&
ev
,
ptr
)
==
-
1
)
{
i
=
-
1
;
goto
oomem
;
i
=
-
1
;
goto
oomem
;
}
}
oomem:
...
...
@@ -841,6 +880,10 @@ history(History *h, HistEvent *ev, int fun, ...)
retval
=
HADD
(
h
,
ev
,
str
);
break
;
case
H_DEL
:
retval
=
HDEL
(
h
,
ev
,
va_arg
(
va
,
const
int
));
break
;
case
H_ENTER
:
str
=
va_arg
(
va
,
const
char
*
);
if
((
retval
=
HENTER
(
h
,
ev
,
str
))
!=
-
1
)
...
...
@@ -925,6 +968,7 @@ history(History *h, HistEvent *ev, int fun, ...)
hf
.
h_clear
=
va_arg
(
va
,
history_vfun_t
);
hf
.
h_enter
=
va_arg
(
va
,
history_efun_t
);
hf
.
h_add
=
va_arg
(
va
,
history_efun_t
);
hf
.
h_del
=
va_arg
(
va
,
history_sfun_t
);
if
((
retval
=
history_set_fun
(
h
,
&
hf
))
==
-
1
)
he_seterrev
(
ev
,
_HE_PARAM_MISSING
);
...
...
cmd-line-utils/libedit/key.c
View file @
5d2a6c47
/* $NetBSD: key.c,v 1.1
5 2003/10/18 23:48:42
christos Exp $ */
/* $NetBSD: key.c,v 1.1
9 2006/03/23 20:22:51
christos Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -32,14 +32,20 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)key.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* key.c: This module contains the procedures for maintaining
* the extended-key map.
*
* An extended-key (key) is a sequence of keystrokes introduced
* with a
n
sequence introducer and consisting of an arbitrary
* with a sequence introducer and consisting of an arbitrary
* number of characters. This module maintains a map (the el->el_key.map)
* to convert these extended-key sequences into input strs
* (XK_STR), editor functions (XK_CMD), or unix commands (XK_EXE).
...
...
@@ -78,12 +84,12 @@ private int node_trav(EditLine *, key_node_t *, char *,
private
int
node__try
(
EditLine
*
,
key_node_t
*
,
const
char
*
,
key_value_t
*
,
int
);
private
key_node_t
*
node__get
(
int
);
private
void
node__free
(
key_node_t
*
);
private
void
node__put
(
EditLine
*
,
key_node_t
*
);
private
int
node__delete
(
EditLine
*
,
key_node_t
**
,
const
char
*
);
private
int
node_lookup
(
EditLine
*
,
const
char
*
,
key_node_t
*
,
int
);
private
int
node_enum
(
EditLine
*
,
key_node_t
*
,
int
);
private
int
key__decode_char
(
char
*
,
int
,
int
);
#define KEY_BUFSIZ EL_BUFSIZ
...
...
@@ -103,7 +109,6 @@ key_init(EditLine *el)
return
(
0
);
}
/* key_end():
* Free the key maps
*/
...
...
@@ -113,8 +118,7 @@ key_end(EditLine *el)
el_free
((
ptr_t
)
el
->
el_key
.
buf
);
el
->
el_key
.
buf
=
NULL
;
/* XXX: provide a function to clear the keys */
el
->
el_key
.
map
=
NULL
;
node__free
(
el
->
el_key
.
map
);
}
...
...
@@ -443,7 +447,7 @@ node__put(EditLine *el, key_node_t *ptr)
/* node__get():
* Returns pointer to a
n
key_node_t for ch.
* Returns pointer to a key_node_t for ch.
*/
private
key_node_t
*
node__get
(
int
ch
)
...
...
@@ -461,7 +465,15 @@ node__get(int ch)
return
(
ptr
);
}
private
void
node__free
(
key_node_t
*
k
)
{
if
(
k
==
NULL
)
return
;
node__free
(
k
->
sibling
);
node__free
(
k
->
next
);
el_free
((
ptr_t
)
k
);
}
/* node_lookup():
* look for the str starting at node ptr.
...
...
@@ -483,7 +495,7 @@ node_lookup(EditLine *el, const char *str, key_node_t *ptr, int cnt)
/* If match put this char into el->el_key.buf. Recurse */
if
(
ptr
->
ch
==
*
str
)
{
/* match found */
ncnt
=
key__decode_char
(
el
->
el_key
.
buf
,
cnt
,
ncnt
=
key__decode_char
(
el
->
el_key
.
buf
,
KEY_BUFSIZ
,
cnt
,
(
unsigned
char
)
ptr
->
ch
);
if
(
ptr
->
next
!=
NULL
)
/* not yet at leaf */
...
...
@@ -537,7 +549,8 @@ node_enum(EditLine *el, key_node_t *ptr, int cnt)
return
(
-
1
);
}
/* put this char at end of str */
ncnt
=
key__decode_char
(
el
->
el_key
.
buf
,
cnt
,
(
unsigned
char
)
ptr
->
ch
);
ncnt
=
key__decode_char
(
el
->
el_key
.
buf
,
KEY_BUFSIZ
,
cnt
,
(
unsigned
char
)
ptr
->
ch
);
if
(
ptr
->
next
==
NULL
)
{
/* print this key and function */
el
->
el_key
.
buf
[
ncnt
+
1
]
=
'"'
;
...
...
@@ -568,9 +581,10 @@ key_kprint(EditLine *el, const char *key, key_value_t *val, int ntype)
switch
(
ntype
)
{
case
XK_STR
:
case
XK_EXE
:
(
void
)
fprintf
(
el
->
el_outfile
,
fmt
,
key
,
key__decode_str
(
val
->
str
,
unparsbuf
,
ntype
==
XK_STR
?
"
\"\"
"
:
"[]"
));
(
void
)
key__decode_str
(
val
->
str
,
unparsbuf
,
sizeof
(
unparsbuf
),
ntype
==
XK_STR
?
"
\"\"
"
:
"[]"
);
(
void
)
fprintf
(
el
->
el_outfile
,
fmt
,
key
,
unparsbuf
);
break
;
case
XK_CMD
:
for
(
fp
=
el
->
el_map
.
help
;
fp
->
name
;
fp
++
)
...
...
@@ -595,83 +609,97 @@ key_kprint(EditLine *el, const char *key, key_value_t *val, int ntype)
}
#define ADDC(c) \
if (b < eb) \
*b++ = c; \
else \
b++
/* key__decode_char():
* Put a printable form of char in buf.
*/
pr
ivate
int
key__decode_char
(
char
*
buf
,
int
cnt
,
int
ch
)
pr
otected
int
key__decode_char
(
char
*
buf
,
int
cnt
,
int
off
,
int
ch
)
{
char
*
sb
=
buf
+
off
;
char
*
eb
=
buf
+
cnt
;
char
*
b
=
sb
;
if
(
ch
==
0
)
{
buf
[
cnt
++
]
=
'^'
;
buf
[
cnt
]
=
'@'
;
return
(
cnt
)
;
ADDC
(
'^'
)
;
ADDC
(
'@'
)
;
return
b
-
sb
;
}
if
(
iscntrl
(
ch
))
{
buf
[
cnt
++
]
=
'^'
;
ADDC
(
'^'
)
;
if
(
ch
==
'\177'
)
buf
[
cnt
]
=
'?'
;
ADDC
(
'?'
)
;
else
buf
[
cnt
]
=
ch
|
0100
;
ADDC
(
ch
|
0100
)
;
}
else
if
(
ch
==
'^'
)
{
buf
[
cnt
++
]
=
'\\'
;
buf
[
cnt
]
=
'^'
;
ADDC
(
'\\'
)
;
ADDC
(
'^'
)
;
}
else
if
(
ch
==
'\\'
)
{
buf
[
cnt
++
]
=
'\\'
;
buf
[
cnt
]
=
'\\'
;
ADDC
(
'\\'
)
;
ADDC
(
'\\'
)
;
}
else
if
(
ch
==
' '
||
(
el_isprint
(
ch
)
&&
!
isspace
(
ch
)))
{
buf
[
cnt
]
=
ch
;
ADDC
(
ch
)
;
}
else
{
buf
[
cnt
++
]
=
'\\'
;
buf
[
cnt
++
]
=
(((
unsigned
int
)
ch
>>
6
)
&
7
)
+
'0'
;
buf
[
cnt
++
]
=
(((
unsigned
int
)
ch
>>
3
)
&
7
)
+
'0'
;
buf
[
cnt
]
=
(
ch
&
7
)
+
'0'
;
ADDC
(
'\\'
)
;
ADDC
((((
unsigned
int
)
ch
>>
6
)
&
7
)
+
'0'
)
;
ADDC
((((
unsigned
int
)
ch
>>
3
)
&
7
)
+
'0'
)
;
ADDC
((
ch
&
7
)
+
'0'
)
;
}
return
(
cnt
)
;
return
b
-
sb
;
}
/* key__decode_str():
* Make a printable version of the ey
*/
protected
char
*
key__decode_str
(
const
char
*
str
,
char
*
buf
,
const
char
*
sep
)
protected
int
key__decode_str
(
const
char
*
str
,
char
*
buf
,
int
len
,
const
char
*
sep
)
{
char
*
b
;
char
*
b
=
buf
,
*
eb
=
b
+
len
;
const
char
*
p
;
b
=
buf
;
if
(
sep
[
0
]
!=
'\0'
)
*
b
++
=
sep
[
0
];
if
(
*
str
==
0
)
{
*
b
++
=
'^'
;
*
b
++
=
'@'
;
if
(
sep
[
0
]
!=
'\0'
&&
sep
[
1
]
!=
'\0'
)
*
b
++
=
sep
[
1
];
*
b
++
=
0
;
return
(
buf
);
if
(
sep
[
0
]
!=
'\0'
)
{
ADDC
(
sep
[
0
]);
}
if
(
*
str
==
'\0'
)
{
ADDC
(
'^'
);
ADDC
(
'@'
);
if
(
sep
[
0
]
!=
'\0'
&&
sep
[
1
]
!=
'\0'
)
{
ADDC
(
sep
[
1
]);
}
goto
done
;
}
for
(
p
=
str
;
*
p
!=
0
;
p
++
)
{
if
(
iscntrl
((
unsigned
char
)
*
p
))
{
*
b
++
=
'^'
;
if
(
*
p
==
'\177'
)
*
b
++
=
'?'
;
else
*
b
++
=
*
p
|
0100
;
ADDC
(
'^'
);
if
(
*
p
==
'\177'
)
{
ADDC
(
'?'
);
}
else
{
ADDC
(
*
p
|
0100
);
}
}
else
if
(
*
p
==
'^'
||
*
p
==
'\\'
)
{
*
b
++
=
'\\'
;
*
b
++
=
*
p
;
ADDC
(
'\\'
)
;
ADDC
(
*
p
)
;
}
else
if
(
*
p
==
' '
||
(
el_isprint
((
unsigned
char
)
*
p
)
&&
!
isspace
((
unsigned
char
)
*
p
)))
{
*
b
++
=
*
p
;
ADDC
(
*
p
)
;
}
else
{
*
b
++
=
'\\'
;
*
b
++
=
(((
unsigned
int
)
*
p
>>
6
)
&
7
)
+
'0'
;
*
b
++
=
(((
unsigned
int
)
*
p
>>
3
)
&
7
)
+
'0'
;
*
b
++
=
(
*
p
&
7
)
+
'0'
;
ADDC
(
'\\'
)
;
ADDC
((((
unsigned
int
)
*
p
>>
6
)
&
7
)
+
'0'
)
;
ADDC
((((
unsigned
int
)
*
p
>>
3
)
&
7
)
+
'0'
)
;
ADDC
((
*
p
&
7
)
+
'0'
)
;
}
}
if
(
sep
[
0
]
!=
'\0'
&&
sep
[
1
]
!=
'\0'
)
*
b
++
=
sep
[
1
];
*
b
++
=
0
;
return
(
buf
);
/* should check for overflow */
if
(
sep
[
0
]
!=
'\0'
&&
sep
[
1
]
!=
'\0'
)
{
ADDC
(
sep
[
1
]);
}
done:
ADDC
(
'\0'
);
if
(
b
-
buf
>=
len
)
buf
[
len
-
1
]
=
'\0'
;
return
b
-
buf
;
}
cmd-line-utils/libedit/key.h
View file @
5d2a6c47
/* $NetBSD: key.h,v 1.
8 2003/08/07 16:44:32 agc
Exp $ */
/* $NetBSD: key.h,v 1.
10 2006/03/23 20:22:51 christos
Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -74,6 +74,8 @@ protected int key_delete(EditLine *, const char *);
protected
void
key_print
(
EditLine
*
,
const
char
*
);
protected
void
key_kprint
(
EditLine
*
,
const
char
*
,
key_value_t
*
,
int
);
protected
char
*
key__decode_str
(
const
char
*
,
char
*
,
const
char
*
);
protected
int
key__decode_str
(
const
char
*
,
char
*
,
int
,
const
char
*
);
protected
int
key__decode_char
(
char
*
,
int
,
int
,
int
);
#endif
/* _h_el_key */
cmd-line-utils/libedit/makelist.sh
View file @
5d2a6c47
#!/bin/sh -
# $NetBSD: makelist,v 1.
8 2003/03/10 21:21:10
christos Exp $
# $NetBSD: makelist,v 1.
11 2005/10/22 16:45:03
christos Exp $
#
# Copyright (c) 1992, 1993
# The Regents of the University of California. All rights reserved.
...
...
@@ -15,11 +15,7 @@
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. All advertising materials mentioning features or use of this software
# must display the following acknowledgement:
# This product includes software developed by the University of
# California, Berkeley and its contributors.
# 4. Neither the name of the University nor the names of its contributors
# 3. Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
...
...
@@ -68,6 +64,7 @@ case $FLAG in
/\(\):/ {
pr = substr($2, 1, 2);
if (pr == "vi" || pr == "em" || pr == "ed") {
# XXXMYSQL: support CRLF
name = substr($2, 1, index($2,"(") - 1);
#
# XXX: need a space between name and prototype so that -fc and -fh
...
...
@@ -97,6 +94,7 @@ case $FLAG in
/\(\):/ {
pr = substr($2, 1, 2);
if (pr == "vi" || pr == "em" || pr == "ed") {
# XXXMYSQL: support CRLF
name = substr($2, 1, index($2,"(") - 1);
uname = "";
fname = "";
...
...
@@ -117,13 +115,13 @@ case $FLAG in
printf(" \"");
for (i = 2; i < NF; i++)
printf("%s ", $i);
sub("\r", "", $i);
# XXXMYSQL: support CRLF
sub("\r", "", $i);
printf("%s\" },\n", $i);
ok = 0;
}
}
END {
printf(" { NULL, 0, NULL }\n");
printf("};\n");
printf("\nprotected const el_bindings_t* help__get()");
printf("{ return el_func_help; }\n");
...
...
@@ -144,6 +142,7 @@ case $FLAG in
# generate fcns.h from various .h files
#
# XXXMYSQL: use portable tr syntax
-fh
)
cat
$FILES
|
$AWK
'/el_action_t/ { print $3 }'
|
\
sort
|
tr
abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ |
$AWK
'
...
...
@@ -220,6 +219,7 @@ case $FLAG in
/\(\):/ {
pr = substr($2, 1, 2);
if (pr == "vi" || pr == "em" || pr == "ed") {
# XXXMYSQL: support CRLF
name = substr($2, 1, index($2, "(") - 1);
fname = "";
for (i = 1; i <= length(name); i++) {
...
...
cmd-line-utils/libedit/map.c
View file @
5d2a6c47
/* $NetBSD: map.c,v 1.2
0 2004/08/13 12:10:39 mycroft
Exp $ */
/* $NetBSD: map.c,v 1.2
4 2006/04/09 01:36:51 christos
Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -32,7 +32,13 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)map.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* map.c: Editor function definitions
...
...
@@ -1118,11 +1124,12 @@ private void
map_print_key
(
EditLine
*
el
,
el_action_t
*
map
,
const
char
*
in
)
{
char
outbuf
[
EL_BUFSIZ
];
el_bindings_t
*
bp
;
el_bindings_t
*
bp
,
*
ep
;
if
(
in
[
0
]
==
'\0'
||
in
[
1
]
==
'\0'
)
{
(
void
)
key__decode_str
(
in
,
outbuf
,
""
);
for
(
bp
=
el
->
el_map
.
help
;
bp
->
name
!=
NULL
;
bp
++
)
(
void
)
key__decode_str
(
in
,
outbuf
,
sizeof
(
outbuf
),
""
);
ep
=
&
el
->
el_map
.
help
[
el
->
el_map
.
nfunc
];
for
(
bp
=
el
->
el_map
.
help
;
bp
<
ep
;
bp
++
)
if
(
bp
->
func
==
map
[(
unsigned
char
)
*
in
])
{
(
void
)
fprintf
(
el
->
el_outfile
,
"%s
\t
->
\t
%s
\n
"
,
outbuf
,
bp
->
name
);
...
...
@@ -1139,7 +1146,7 @@ map_print_key(EditLine *el, el_action_t *map, const char *in)
private
void
map_print_some_keys
(
EditLine
*
el
,
el_action_t
*
map
,
int
first
,
int
last
)
{
el_bindings_t
*
bp
;
el_bindings_t
*
bp
,
*
ep
;
char
firstbuf
[
2
],
lastbuf
[
2
];
char
unparsbuf
[
EL_BUFSIZ
],
extrabuf
[
EL_BUFSIZ
];
...
...
@@ -1148,39 +1155,47 @@ map_print_some_keys(EditLine *el, el_action_t *map, int first, int last)
lastbuf
[
0
]
=
last
;
lastbuf
[
1
]
=
0
;
if
(
map
[
first
]
==
ED_UNASSIGNED
)
{
if
(
first
==
last
)
if
(
first
==
last
)
{
(
void
)
key__decode_str
(
firstbuf
,
unparsbuf
,
sizeof
(
unparsbuf
),
STRQQ
);
(
void
)
fprintf
(
el
->
el_outfile
,
"%-15s-> is undefined
\n
"
,
key__decode_str
(
firstbuf
,
unparsbuf
,
STRQQ
));
"%-15s-> is undefined
\n
"
,
unparsbuf
);
}
return
;
}
for
(
bp
=
el
->
el_map
.
help
;
bp
->
name
!=
NULL
;
bp
++
)
{
ep
=
&
el
->
el_map
.
help
[
el
->
el_map
.
nfunc
];
for
(
bp
=
el
->
el_map
.
help
;
bp
<
ep
;
bp
++
)
{
if
(
bp
->
func
==
map
[
first
])
{
if
(
first
==
last
)
{
(
void
)
key__decode_str
(
firstbuf
,
unparsbuf
,
sizeof
(
unparsbuf
),
STRQQ
);
(
void
)
fprintf
(
el
->
el_outfile
,
"%-15s-> %s
\n
"
,
key__decode_str
(
firstbuf
,
unparsbuf
,
STRQQ
),
bp
->
name
);
unparsbuf
,
bp
->
name
);
}
else
{
(
void
)
key__decode_str
(
firstbuf
,
unparsbuf
,
sizeof
(
unparsbuf
),
STRQQ
);
(
void
)
key__decode_str
(
lastbuf
,
extrabuf
,
sizeof
(
extrabuf
),
STRQQ
);
(
void
)
fprintf
(
el
->
el_outfile
,
"%-4s to %-7s-> %s
\n
"
,
key__decode_str
(
firstbuf
,
unparsbuf
,
STRQQ
),
key__decode_str
(
lastbuf
,
extrabuf
,
STRQQ
),
bp
->
name
);
unparsbuf
,
extrabuf
,
bp
->
name
);
}
return
;
}
}
#ifdef MAP_DEBUG
if
(
map
==
el
->
el_map
.
key
)
{
(
void
)
key__decode_str
(
firstbuf
,
unparsbuf
,
sizeof
(
unparsbuf
),
STRQQ
);
(
void
)
fprintf
(
el
->
el_outfile
,
"BUG!!! %s isn't bound to anything.
\n
"
,
key__decode_str
(
firstbuf
,
unparsbuf
,
STRQQ
));
"BUG!!! %s isn't bound to anything.
\n
"
,
unparsbuf
);
(
void
)
fprintf
(
el
->
el_outfile
,
"el->el_map.key[%d] == %d
\n
"
,
first
,
el
->
el_map
.
key
[
first
]);
}
else
{
(
void
)
key__decode_str
(
firstbuf
,
unparsbuf
,
sizeof
(
unparsbuf
),
STRQQ
);
(
void
)
fprintf
(
el
->
el_outfile
,
"BUG!!! %s isn't bound to anything.
\n
"
,
key__decode_str
(
firstbuf
,
unparsbuf
,
STRQQ
));
"BUG!!! %s isn't bound to anything.
\n
"
,
unparsbuf
);
(
void
)
fprintf
(
el
->
el_outfile
,
"el->el_map.alt[%d] == %d
\n
"
,
first
,
el
->
el_map
.
alt
[
first
]);
}
...
...
@@ -1237,7 +1252,7 @@ map_bind(EditLine *el, int argc, const char **argv)
char
outbuf
[
EL_BUFSIZ
];
const
char
*
in
=
NULL
;
char
*
out
=
NULL
;
el_bindings_t
*
bp
;
el_bindings_t
*
bp
,
*
ep
;
int
cmd
;
int
key
;
...
...
@@ -1279,8 +1294,8 @@ map_bind(EditLine *el, int argc, const char **argv)
return
(
0
);
case
'l'
:
for
(
bp
=
el
->
el_map
.
help
;
bp
->
name
!=
NULL
;
bp
++
)
ep
=
&
el
->
el_map
.
help
[
el
->
el_map
.
nfunc
]
;
for
(
bp
=
el
->
el_map
.
help
;
bp
<
ep
;
bp
++
)
(
void
)
fprintf
(
el
->
el_outfile
,
"%s
\n\t
%s
\n
"
,
bp
->
name
,
bp
->
description
);
...
...
@@ -1367,7 +1382,7 @@ map_bind(EditLine *el, int argc, const char **argv)
break
;
default:
EL_ABORT
((
el
->
el_errfile
,
"Bad XK_ type
\n
"
,
ntype
));
EL_ABORT
((
el
->
el_errfile
,
"Bad XK_ type
%d
\n
"
,
ntype
));
break
;
}
return
(
0
);
...
...
@@ -1381,7 +1396,7 @@ protected int
map_addfunc
(
EditLine
*
el
,
const
char
*
name
,
const
char
*
help
,
el_func_t
func
)
{
void
*
p
;
int
nf
=
el
->
el_map
.
nfunc
+
2
;
int
nf
=
el
->
el_map
.
nfunc
+
1
;
if
(
name
==
NULL
||
help
==
NULL
||
func
==
NULL
)
return
(
-
1
);
...
...
@@ -1400,7 +1415,6 @@ map_addfunc(EditLine *el, const char *name, const char *help, el_func_t func)
el
->
el_map
.
help
[
nf
].
name
=
name
;
el
->
el_map
.
help
[
nf
].
func
=
nf
;
el
->
el_map
.
help
[
nf
].
description
=
help
;
el
->
el_map
.
help
[
++
nf
].
name
=
NULL
;
el
->
el_map
.
nfunc
++
;
return
(
0
);
...
...
cmd-line-utils/libedit/np/fgetln.c
View file @
5d2a6c47
/* $NetBSD: fgetln.c,v 1.
1.1.1 1999/04/12 07:43:21 crooksa
Exp $ */
/* $NetBSD: fgetln.c,v 1.
9 2008/04/29 06:53:03 martin
Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
...
...
@@ -15,13 +15,6 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
...
...
@@ -36,17 +29,24 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef HAVE_NBTOOL_CONFIG_H
#include "nbtool_config.h"
#else
#include "config.h"
#include <stdio.h>
#endif
#if !HAVE_FGETLN
#include <stdlib.h>
#ifndef HAVE_NBTOOL_CONFIG_H
/* These headers are required, but included from nbtool_config.h */
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#endif
char
*
fgetln
(
fp
,
len
)
FILE
*
fp
;
size_t
*
len
;
fgetln
(
FILE
*
fp
,
size_t
*
len
)
{
static
char
*
buf
=
NULL
;
static
size_t
bufsiz
=
0
;
...
...
@@ -61,8 +61,8 @@ fgetln(fp, len)
if
(
fgets
(
buf
,
bufsiz
,
fp
)
==
NULL
)
return
NULL
;
*
len
=
0
;
*
len
=
0
;
while
((
ptr
=
strchr
(
&
buf
[
*
len
],
'\n'
))
==
NULL
)
{
size_t
nbufsiz
=
bufsiz
+
BUFSIZ
;
char
*
nbuf
=
realloc
(
buf
,
nbufsiz
);
...
...
@@ -76,13 +76,33 @@ fgetln(fp, len)
}
else
buf
=
nbuf
;
*
len
=
bufsiz
;
if
(
fgets
(
&
buf
[
bufsiz
],
BUFSIZ
,
fp
)
==
NULL
)
if
(
fgets
(
&
buf
[
bufsiz
],
BUFSIZ
,
fp
)
==
NULL
)
{
buf
[
bufsiz
]
=
'\0'
;
*
len
=
strlen
(
buf
);
return
buf
;
}
*
len
=
bufsiz
;
bufsiz
=
nbufsiz
;
}
*
len
=
(
ptr
-
buf
)
+
1
;
return
buf
;
}
#endif
#ifdef TEST
int
main
(
int
argc
,
char
*
argv
[])
{
char
*
p
;
size_t
len
;
while
((
p
=
fgetln
(
stdin
,
&
len
))
!=
NULL
)
{
(
void
)
printf
(
"%zu %s"
,
len
,
p
);
free
(
p
);
}
return
0
;
}
#endif
cmd-line-utils/libedit/np/strlcat.c
View file @
5d2a6c47
/* $NetBSD: strlcat.c,v 1.3 2007/06/04 18:19:27 christos Exp $ */
/* $OpenBSD: strlcat.c,v 1.10 2003/04/12 21:56:39 millert Exp $ */
/*
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE
* FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#if !defined(_KERNEL) && !defined(_STANDALONE)
#if HAVE_NBTOOL_CONFIG_H
#include "nbtool_config.h"
#else
#include "config.h"
#endif
#if defined(LIBC_SCCS) && !defined(lint)
static
char
*
rcsid
=
"$OpenBSD: strlcat.c,v 1.2 1999/06/17 16:28:58 millert Exp $"
;
#endif
/* LIBC_SCCS and not lint */
#ifndef lint
static
const
char
rcsid
[]
=
"$FreeBSD: src/lib/libc/string/strlcat.c,v 1.2.4.2 2001/07/09 23:30:06 obrien Exp $"
;
#endif
#ifdef _LIBC
#include "namespace.h"
#endif
#include <sys/types.h>
#include <assert.h>
#include <string.h>
#ifdef _LIBC
# ifdef __weak_alias
__weak_alias
(
strlcat
,
_strlcat
)
# endif
#endif
#else
#include <lib/libkern/libkern.h>
#endif
/* !_KERNEL && !_STANDALONE */
#if !HAVE_STRLCAT
/*
* Appends src to string dst of size siz (unlike strncat, siz is the
* full size of dst, not space left). At most siz-1 characters
* will be copied. Always NUL terminates (unless siz <= strlen(dst)).
* Returns strlen(
initial dst) + strlen(src); if retval >= siz,
* truncation occurred.
* Returns strlen(
src) + MIN(siz, strlen(initial dst)).
*
If retval >= siz,
truncation occurred.
*/
size_t
strlcat
(
dst
,
src
,
siz
)
char
*
dst
;
const
char
*
src
;
size_t
siz
;
size_t
strlcat
(
char
*
dst
,
const
char
*
src
,
size_t
siz
)
{
register
char
*
d
=
dst
;
register
const
char
*
s
=
src
;
register
size_t
n
=
siz
;
char
*
d
=
dst
;
const
char
*
s
=
src
;
size_t
n
=
siz
;
size_t
dlen
;
_DIAGASSERT
(
dst
!=
NULL
);
_DIAGASSERT
(
src
!=
NULL
);
/* Find the end of dst and adjust bytes left but don't go past end */
while
(
n
--
!=
0
&&
*
d
!=
'\0'
)
d
++
;
...
...
@@ -73,3 +82,4 @@ size_t strlcat(dst, src, siz)
return
(
dlen
+
(
s
-
src
));
/* count does not include NUL */
}
#endif
cmd-line-utils/libedit/np/strlcpy.c
View file @
5d2a6c47
/* $OpenBSD: strlcpy.c,v 1.4 1999/05/01 18:56:41 millert Exp $ */
/* $NetBSD: strlcpy.c,v 1.3 2007/06/04 18:19:27 christos Exp $ */
/* $OpenBSD: strlcpy.c,v 1.7 2003/04/12 21:56:39 millert Exp $ */
/*
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE
* FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#if !defined(_KERNEL) && !defined(_STANDALONE)
#if HAVE_NBTOOL_CONFIG_H
#include "nbtool_config.h"
#else
#include "config.h"
#if defined(LIBC_SCCS) && !defined(lint)
#if 0
static char *rcsid = "$OpenBSD: strlcpy.c,v 1.4 1999/05/01 18:56:41 millert Exp $";
#endif
#if defined(LIBC_SCCS) && !defined(lint)
#endif
/* LIBC_SCCS and not lint */
#ifndef lint
static
const
char
rcsid
[]
=
"$FreeBSD: src/lib/libc/string/strlcpy.c,v 1.2.4.1 2001/07/09 23:30:06 obrien Exp $"
;
#endif
#ifdef _LIBC
#include "namespace.h"
#endif
#include <sys/types.h>
#include <assert.h>
#include <string.h>
#ifdef _LIBC
# ifdef __weak_alias
__weak_alias
(
strlcpy
,
_strlcpy
)
# endif
#endif
#else
#include <lib/libkern/libkern.h>
#endif
/* !_KERNEL && !_STANDALONE */
#if !HAVE_STRLCPY
/*
* Copy src to string dst of size siz. At most siz-1 characters
* will be copied. Always NUL terminates (unless siz == 0).
* Returns strlen(src); if retval >= siz, truncation occurred.
*/
size_t
strlcpy
(
dst
,
src
,
siz
)
char
*
dst
;
const
char
*
src
;
size_t
siz
;
size_t
strlcpy
(
char
*
dst
,
const
char
*
src
,
size_t
siz
)
{
register
char
*
d
=
dst
;
register
const
char
*
s
=
src
;
register
size_t
n
=
siz
;
char
*
d
=
dst
;
const
char
*
s
=
src
;
size_t
n
=
siz
;
_DIAGASSERT
(
dst
!=
NULL
);
_DIAGASSERT
(
src
!=
NULL
);
/* Copy as many bytes as will fit */
if
(
n
!=
0
&&
--
n
!=
0
)
{
...
...
@@ -73,3 +77,4 @@ size_t strlcpy(dst, src, siz)
return
(
s
-
src
-
1
);
/* count does not include NUL */
}
#endif
cmd-line-utils/libedit/np/unvis.c
View file @
5d2a6c47
/* $NetBSD: unvis.c,v 1.2
2 2002/03/23 17:38:27
christos Exp $ */
/* $NetBSD: unvis.c,v 1.2
8 2005/09/13 01:44:09
christos Exp $ */
/*-
* Copyright (c) 1989, 1993
...
...
@@ -12,11 +12,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
...
...
@@ -34,34 +30,30 @@
*/
#include "config.h"
#if defined(LIBC_SCCS) && !defined(lint)
#if 0
static char sccsid[] = "@(#)unvis.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID
(
"$NetBSD: unvis.c,v 1.22 2002/03/23 17:38:27 christos Exp $"
);
#endif
#endif
/* LIBC_SCCS and not lint */
#define __LIBC12_SOURCE__
#include <sys/types.h>
#include <assert.h>
#include <ctype.h>
#include <stdio.h>
#ifdef HAVE_VIS_H
#include <vis.h>
#else
#include "np/vis.h"
#endif
#ifdef __weak_alias
__weak_alias
(
strunvis
,
_strunvis
)
__weak_alias
(
unvis
,
_unvis
)
#endif
#ifdef __warn_references
__warn_references
(
unvis
,
"warning: reference to compatibility unvis(); include <vis.h> for correct reference"
)
#endif
#if !HAVE_VIS_H
#if !HAVE_VIS
/*
* decode driven by state machine
*/
...
...
@@ -72,30 +64,22 @@ __warn_references(unvis,
#define S_CTRL 4
/* control char started (^) */
#define S_OCTAL2 5
/* octal digit 2 */
#define S_OCTAL3 6
/* octal digit 3 */
#define
S_HEX1 7
/* hex digit */
#define
S_HEX2 8
/* hex digit 2 */
#define
S_HEX1 7
/* hex digit */
#define
S_HEX2 8
/* hex digit 2 */
#define isoctal(c) (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7')
#define xtod(c) (isdigit(c) ? (c - '0') : ((tolower(c) - 'a') + 10))
int
unvis
(
cp
,
c
,
astate
,
flag
)
char
*
cp
;
int
c
;
int
*
astate
,
flag
;
{
return
__unvis13
(
cp
,
(
int
)
c
,
astate
,
flag
);
}
/*
* unvis - decode characters previously encoded by vis
*/
int
__unvis13
(
cp
,
c
,
astate
,
flag
)
unvis
(
cp
,
c
,
astate
,
flag
)
char
*
cp
;
int
c
;
int
*
astate
,
flag
;
{
unsigned
char
uc
=
(
unsigned
char
)
c
;
_DIAGASSERT
(
cp
!=
NULL
);
_DIAGASSERT
(
astate
!=
NULL
);
...
...
@@ -105,7 +89,7 @@ __unvis13(cp, c, astate, flag)
||
*
astate
==
S_HEX2
)
{
*
astate
=
S_GROUND
;
return
(
UNVIS_VALID
);
}
}
return
(
*
astate
==
S_GROUND
?
UNVIS_NOCHAR
:
UNVIS_SYNBAD
);
}
...
...
@@ -116,7 +100,7 @@ __unvis13(cp, c, astate, flag)
if
(
c
==
'\\'
)
{
*
astate
=
S_START
;
return
(
0
);
}
}
if
((
flag
&
VIS_HTTPSTYLE
)
&&
c
==
'%'
)
{
*
astate
=
S_HEX1
;
return
(
0
);
...
...
@@ -193,7 +177,7 @@ __unvis13(cp, c, astate, flag)
}
*
astate
=
S_GROUND
;
return
(
UNVIS_SYNBAD
);
case
S_META
:
if
(
c
==
'-'
)
*
astate
=
S_META1
;
...
...
@@ -204,12 +188,12 @@ __unvis13(cp, c, astate, flag)
return
(
UNVIS_SYNBAD
);
}
return
(
0
);
case
S_META1
:
*
astate
=
S_GROUND
;
*
cp
|=
c
;
return
(
UNVIS_VALID
);
case
S_CTRL
:
if
(
c
==
'?'
)
*
cp
|=
0177
;
...
...
@@ -219,23 +203,23 @@ __unvis13(cp, c, astate, flag)
return
(
UNVIS_VALID
);
case
S_OCTAL2
:
/* second possible octal digit */
if
(
isoctal
(
c
))
{
/*
* yes - and maybe a third
if
(
isoctal
(
u
c
))
{
/*
* yes - and maybe a third
*/
*
cp
=
(
*
cp
<<
3
)
+
(
c
-
'0'
);
*
astate
=
S_OCTAL3
;
*
astate
=
S_OCTAL3
;
return
(
0
);
}
/*
* no - done with current sequence, push back passed char
}
/*
* no - done with current sequence, push back passed char
*/
*
astate
=
S_GROUND
;
return
(
UNVIS_VALIDPUSH
);
case
S_OCTAL3
:
/* third possible octal digit */
*
astate
=
S_GROUND
;
if
(
isoctal
(
c
))
{
if
(
isoctal
(
u
c
))
{
*
cp
=
(
*
cp
<<
3
)
+
(
c
-
'0'
);
return
(
UNVIS_VALID
);
}
...
...
@@ -243,27 +227,30 @@ __unvis13(cp, c, astate, flag)
* we were done, push back passed char
*/
return
(
UNVIS_VALIDPUSH
);
case
S_HEX1
:
if
(
isxdigit
(
c
))
{
*
cp
=
xtod
(
c
);
if
(
isxdigit
(
u
c
))
{
*
cp
=
xtod
(
u
c
);
*
astate
=
S_HEX2
;
return
(
0
);
}
/*
* no - done with current sequence, push back passed char
/*
* no - done with current sequence, push back passed char
*/
*
astate
=
S_GROUND
;
return
(
UNVIS_VALIDPUSH
);
case
S_HEX2
:
*
astate
=
S_GROUND
;
if
(
isxdigit
(
c
))
{
*
cp
=
xtod
(
c
)
|
(
*
cp
<<
4
);
*
astate
=
S_GROUND
;
if
(
isxdigit
(
u
c
))
{
*
cp
=
xtod
(
u
c
)
|
(
*
cp
<<
4
);
return
(
UNVIS_VALID
);
}
return
(
UNVIS_VALIDPUSH
);
default:
/*
* decoder in unknown state - (probably uninitialized)
return
(
UNVIS_VALIDPUSH
);
default:
/*
* decoder in unknown state - (probably uninitialized)
*/
*
astate
=
S_GROUND
;
return
(
UNVIS_SYNBAD
);
...
...
@@ -271,7 +258,7 @@ __unvis13(cp, c, astate, flag)
}
/*
* strunvis - decode src into dst
* strunvis - decode src into dst
*
* Number of chars decoded into dst is returned, -1 on error.
* Dst is null terminated.
...
...
@@ -291,8 +278,8 @@ strunvisx(dst, src, flag)
_DIAGASSERT
(
dst
!=
NULL
);
while
((
c
=
*
src
++
)
!=
'\0'
)
{
again:
switch
(
__unvis13
(
dst
,
c
,
&
state
,
flag
))
{
again:
switch
(
unvis
(
dst
,
c
,
&
state
,
flag
))
{
case
UNVIS_VALID
:
dst
++
;
break
;
...
...
@@ -306,7 +293,7 @@ strunvisx(dst, src, flag)
return
(
-
1
);
}
}
if
(
__unvis13
(
dst
,
c
,
&
state
,
UNVIS_END
)
==
UNVIS_VALID
)
if
(
unvis
(
dst
,
c
,
&
state
,
UNVIS_END
)
==
UNVIS_VALID
)
dst
++
;
*
dst
=
'\0'
;
return
(
dst
-
start
);
...
...
cmd-line-utils/libedit/np/vis.c
View file @
5d2a6c47
This diff is collapsed.
Click to expand it.
cmd-line-utils/libedit/np/vis.h
View file @
5d2a6c47
/* $NetBSD: vis.h,v 1.1
2 2002/03/23 17:39:05
christos Exp $ */
/* $NetBSD: vis.h,v 1.1
6 2005/09/13 01:44:32
christos Exp $ */
/*-
* Copyright (c) 1990, 1993
...
...
@@ -12,11 +12,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
...
...
@@ -38,9 +34,7 @@
#ifndef _VIS_H_
#define _VIS_H_
#ifdef HAVE_SYS_CDEFS_H
#include <sys/cdefs.h>
#endif
#include <sys/types.h>
/*
* to select alternate encoding format
...
...
@@ -78,6 +72,7 @@
*/
#define UNVIS_END 1
/* no more characters */
__BEGIN_DECLS
char
*
vis
(
char
*
,
int
,
int
,
int
);
char
*
svis
(
char
*
,
int
,
int
,
int
,
const
char
*
);
int
strvis
(
char
*
,
const
char
*
,
int
);
...
...
@@ -86,11 +81,7 @@ int strvisx(char *, const char *, size_t, int);
int
strsvisx
(
char
*
,
const
char
*
,
size_t
,
int
,
const
char
*
);
int
strunvis
(
char
*
,
const
char
*
);
int
strunvisx
(
char
*
,
const
char
*
,
int
);
#ifdef __LIBC12_SOURCE__
int
unvis
(
char
*
,
int
,
int
*
,
int
);
int
__unvis13
(
char
*
,
int
,
int
*
,
int
);
#else
int
unvis
(
char
*
,
int
,
int
*
,
int
)
__RENAME
(
__unvis13
);
#endif
__END_DECLS
#endif
/* !_VIS_H_ */
cmd-line-utils/libedit/parse.c
View file @
5d2a6c47
/* $NetBSD: parse.c,v 1.2
0 2003/12/05 13:37:48
lukem Exp $ */
/* $NetBSD: parse.c,v 1.2
2 2005/05/29 04:58:15
lukem Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -32,7 +32,13 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)parse.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* parse.c: parse an editline extended command
...
...
@@ -129,7 +135,7 @@ el_parse(EditLine *el, int argc, const char *argv[])
* the appropriate character or -1 if the escape is not valid
*/
protected
int
parse__escape
(
const
char
**
const
ptr
)
parse__escape
(
const
char
**
ptr
)
{
const
char
*
p
;
int
c
;
...
...
cmd-line-utils/libedit/parse.h
View file @
5d2a6c47
/* $NetBSD: parse.h,v 1.
5 2003/08/07 16:44:32 agc
Exp $ */
/* $NetBSD: parse.h,v 1.
6 2005/05/29 04:58:15 lukem
Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -41,7 +41,7 @@
#define _h_el_parse
protected
int
parse_line
(
EditLine
*
,
const
char
*
);
protected
int
parse__escape
(
const
char
**
const
);
protected
int
parse__escape
(
const
char
**
);
protected
char
*
parse__string
(
char
*
,
const
char
*
);
protected
int
parse_cmd
(
EditLine
*
,
const
char
*
);
...
...
cmd-line-utils/libedit/prompt.c
View file @
5d2a6c47
...
...
@@ -32,7 +32,13 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)prompt.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* prompt.c: Prompt printing functions
...
...
cmd-line-utils/libedit/read.c
View file @
5d2a6c47
/* $NetBSD: read.c,v 1.
35 2005/03/09 23:55:02
christos Exp $ */
/* $NetBSD: read.c,v 1.
43 2009/02/05 19:15:44
christos Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -32,7 +32,13 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)read.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* read.c: Clean this junk up! This is horrible code.
...
...
@@ -50,6 +56,7 @@ private int read__fixio(int, int);
private
int
read_preread
(
EditLine
*
);
private
int
read_char
(
EditLine
*
,
char
*
);
private
int
read_getcmd
(
EditLine
*
,
el_action_t
*
,
char
*
);
private
void
read_pop
(
c_macro_t
*
);
/* read_init():
* Initialize the read stuff
...
...
@@ -205,7 +212,7 @@ read_preread(EditLine *el)
* Push a macro
*/
public
void
el_push
(
EditLine
*
el
,
char
*
str
)
el_push
(
EditLine
*
el
,
c
onst
c
har
*
str
)
{
c_macro_t
*
ma
=
&
el
->
el_chared
.
c_macro
;
...
...
@@ -216,7 +223,7 @@ el_push(EditLine *el, char *str)
ma
->
level
--
;
}
term_beep
(
el
);
term__flush
();
term__flush
(
el
);
}
...
...
@@ -294,6 +301,19 @@ read_char(EditLine *el, char *cp)
return
(
num_read
);
}
/* read_pop():
* Pop a macro from the stack
*/
private
void
read_pop
(
c_macro_t
*
ma
)
{
int
i
;
el_free
(
ma
->
macro
[
0
]);
for
(
i
=
ma
->
level
--
;
i
>
0
;
i
--
)
ma
->
macro
[
i
-
1
]
=
ma
->
macro
[
i
];
ma
->
offset
=
0
;
}
/* el_getc():
* Read a character
...
...
@@ -304,26 +324,28 @@ el_getc(EditLine *el, char *cp)
int
num_read
;
c_macro_t
*
ma
=
&
el
->
el_chared
.
c_macro
;
term__flush
();
term__flush
(
el
);
for
(;;)
{
if
(
ma
->
level
<
0
)
{
if
(
!
read_preread
(
el
))
break
;
}
if
(
ma
->
level
<
0
)
break
;
if
(
ma
->
macro
[
ma
->
level
][
ma
->
offset
]
==
'\0'
)
{
el_free
(
ma
->
macro
[
ma
->
level
--
]);
ma
->
offset
=
0
;
if
(
ma
->
macro
[
0
][
ma
->
offset
]
==
'\0'
)
{
read_pop
(
ma
);
continue
;
}
*
cp
=
ma
->
macro
[
ma
->
level
][
ma
->
offset
++
]
&
0377
;
if
(
ma
->
macro
[
ma
->
level
][
ma
->
offset
]
==
'\0'
)
{
*
cp
=
ma
->
macro
[
0
][
ma
->
offset
++
]
&
0377
;
if
(
ma
->
macro
[
0
][
ma
->
offset
]
==
'\0'
)
{
/* Needed for QuoteMode On */
el_free
(
ma
->
macro
[
ma
->
level
--
]);
ma
->
offset
=
0
;
read_pop
(
ma
);
}
return
(
1
);
}
...
...
@@ -357,11 +379,11 @@ read_prepare(EditLine *el)
we have the wrong size. */
el_resize
(
el
);
re_clear_display
(
el
);
/* reset the display stuff */
ch_reset
(
el
);
ch_reset
(
el
,
0
);
re_refresh
(
el
);
/* print the prompt */
if
(
el
->
el_flags
&
UNBUFFERED
)
term__flush
();
term__flush
(
el
);
}
protected
void
...
...
@@ -438,7 +460,7 @@ el_gets(EditLine *el, int *nread)
else
cp
=
el
->
el_line
.
lastchar
;
term__flush
();
term__flush
(
el
);
while
((
*
el
->
el_read
.
read_char
)(
el
,
cp
)
==
1
)
{
/* make sure there is space next character */
...
...
@@ -478,7 +500,7 @@ el_gets(EditLine *el, int *nread)
#endif
/* DEBUG_READ */
break
;
}
if
((
unsigned
int
)
cmdnum
>=
el
->
el_map
.
nfunc
)
{
/* BUG CHECK command */
if
((
unsigned
int
)
cmdnum
>=
(
unsigned
int
)
el
->
el_map
.
nfunc
)
{
/* BUG CHECK command */
#ifdef DEBUG_EDIT
(
void
)
fprintf
(
el
->
el_errfile
,
"ERROR: illegal command from key 0%o
\r\n
"
,
ch
);
...
...
@@ -570,7 +592,7 @@ el_gets(EditLine *el, int *nread)
#endif
/* DEBUG_READ */
/* put (real) cursor in a known place */
re_clear_display
(
el
);
/* reset the display stuff */
ch_reset
(
el
);
/* reset the input pointers */
ch_reset
(
el
,
1
);
/* reset the input pointers */
re_refresh
(
el
);
/* print the prompt again */
break
;
...
...
@@ -581,7 +603,7 @@ el_gets(EditLine *el, int *nread)
"*** editor ERROR ***
\r\n\n
"
);
#endif
/* DEBUG_READ */
term_beep
(
el
);
term__flush
();
term__flush
(
el
);
break
;
}
el
->
el_state
.
argument
=
1
;
...
...
@@ -591,7 +613,7 @@ el_gets(EditLine *el, int *nread)
break
;
}
term__flush
();
/* flush any buffered output */
term__flush
(
el
);
/* flush any buffered output */
/* make sure the tty is set up correctly */
if
((
el
->
el_flags
&
UNBUFFERED
)
==
0
)
{
read_finish
(
el
);
...
...
cmd-line-utils/libedit/read.h
View file @
5d2a6c47
/* $NetBSD: read.h,v 1.
4 2004/02/27 14:52:18 christos
Exp $ */
/* $NetBSD: read.h,v 1.
6 2008/04/29 06:53:01 martin
Exp $ */
/*-
* Copyright (c) 2001 The NetBSD Foundation, Inc.
...
...
@@ -15,13 +15,6 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
...
...
cmd-line-utils/libedit/readline.c
View file @
5d2a6c47
This diff is collapsed.
Click to expand it.
cmd-line-utils/libedit/readline/readline.h
View file @
5d2a6c47
/* $NetBSD: readline.h,v 1.
12 2004/09/08 18:15:37
christos Exp $ */
/* $NetBSD: readline.h,v 1.
24 2009/02/05 19:15:26
christos Exp $ */
/*-
* Copyright (c) 1997 The NetBSD Foundation, Inc.
...
...
@@ -15,13 +15,6 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
...
...
@@ -45,14 +38,14 @@
/* typedefs */
typedef
int
Function
(
const
char
*
,
int
);
typedef
void
VFunction
(
void
);
typedef
void
VCPFunction
(
char
*
);
typedef
char
*
CPFunction
(
const
char
*
,
int
);
typedef
char
**
CPPFunction
(
const
char
*
,
int
,
int
);
typedef
void
*
histdata_t
;
typedef
char
*
rl_compentry_func_t
(
const
char
*
,
int
);
typedef
struct
_hist_entry
{
const
char
*
line
;
histdata_t
*
data
;
const
char
*
data
;
}
HIST_ENTRY
;
typedef
struct
_keymap_entry
{
...
...
@@ -73,7 +66,7 @@ typedef KEYMAP_ENTRY *Keymap;
#ifndef CTRL
#include <sys/ioctl.h>
#if
defined(__GLIBC__) || defined(__MWERKS__
)
#if
!defined(__sun) && !defined(__hpux) && !defined(_AIX
)
#include <sys/ttydefaults.h>
#endif
#ifndef CTRL
...
...
@@ -102,8 +95,9 @@ extern int max_input_history;
extern
char
*
rl_basic_word_break_characters
;
extern
char
*
rl_completer_word_break_characters
;
extern
char
*
rl_completer_quote_characters
;
extern
CPFunction
*
rl_completion_entry_function
;
extern
Function
*
rl_completion_entry_function
;
extern
CPPFunction
*
rl_attempted_completion_function
;
extern
int
rl_attempted_completion_over
;
extern
int
rl_completion_type
;
extern
int
rl_completion_query_items
;
extern
char
*
rl_special_prefixes
;
...
...
@@ -122,11 +116,13 @@ extern KEYMAP_ENTRY_ARRAY emacs_standard_keymap,
emacs_ctlx_keymap
;
extern
int
rl_filename_completion_desired
;
extern
int
rl_ignore_completion_duplicates
;
extern
Function
*
rl_getc_function
;
extern
int
(
*
rl_getc_function
)(
FILE
*
)
;
extern
VFunction
*
rl_redisplay_function
;
extern
VFunction
*
rl_completion_display_matches_hook
;
extern
VFunction
*
rl_prep_term_function
;
extern
VFunction
*
rl_deprep_term_function
;
extern
int
readline_echoing_p
;
extern
int
_rl_print_completions_horizontally
;
/* supported functions */
char
*
readline
(
const
char
*
);
...
...
@@ -141,6 +137,7 @@ int history_is_stifled(void);
int
where_history
(
void
);
HIST_ENTRY
*
current_history
(
void
);
HIST_ENTRY
*
history_get
(
int
);
HIST_ENTRY
*
remove_history
(
int
);
int
history_total_bytes
(
void
);
int
history_set_pos
(
int
);
HIST_ENTRY
*
previous_history
(
void
);
...
...
@@ -168,7 +165,7 @@ void rl_reset_terminal(const char *);
int
rl_bind_key
(
int
,
int
(
*
)(
int
,
int
));
int
rl_newline
(
int
,
int
);
void
rl_callback_read_char
(
void
);
void
rl_callback_handler_install
(
const
char
*
,
VFunction
*
);
void
rl_callback_handler_install
(
const
char
*
,
V
CP
Function
*
);
void
rl_callback_handler_remove
(
void
);
void
rl_redisplay
(
void
);
int
rl_get_previous_history
(
int
,
int
);
...
...
@@ -176,13 +173,24 @@ void rl_prep_terminal(int);
void
rl_deprep_terminal
(
void
);
int
rl_read_init_file
(
const
char
*
);
int
rl_parse_and_bind
(
const
char
*
);
int
rl_variable_bind
(
const
char
*
,
const
char
*
);
void
rl_stuff_char
(
int
);
int
rl_add_defun
(
const
char
*
,
Function
*
,
int
);
void
rl_get_screen_size
(
int
*
,
int
*
);
void
rl_set_screen_size
(
int
,
int
);
char
*
rl_filename_completion_function
(
const
char
*
,
int
);
int
_rl_abort_internal
(
void
);
int
_rl_qsort_string_compare
(
char
**
,
char
**
);
char
**
rl_completion_matches
(
const
char
*
,
rl_compentry_func_t
*
);
void
rl_forced_update_display
(
void
);
int
rl_set_prompt
(
const
char
*
);
/*
* The following are not implemented
*/
int
rl_kill_text
(
int
,
int
);
Keymap
rl_get_keymap
(
void
);
void
rl_set_keymap
(
Keymap
);
Keymap
rl_make_bare_keymap
(
void
);
int
rl_generic_bind
(
int
,
const
char
*
,
const
char
*
,
Keymap
);
int
rl_bind_key_in_map
(
int
,
Function
*
,
Keymap
);
...
...
cmd-line-utils/libedit/refresh.c
View file @
5d2a6c47
/* $NetBSD: refresh.c,v 1.2
6 2003/08/07 16:44:33 agc
Exp $ */
/* $NetBSD: refresh.c,v 1.2
8 2008/09/10 15:45:37 christos
Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -32,7 +32,13 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)refresh.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* refresh.c: Lower level screen refreshing functions
...
...
@@ -49,6 +55,7 @@ private void re_update_line(EditLine *, char *, char *, int);
private
void
re_insert
(
EditLine
*
,
char
*
,
int
,
int
,
char
*
,
int
);
private
void
re_delete
(
EditLine
*
,
char
*
,
int
,
int
,
int
);
private
void
re_fastputc
(
EditLine
*
,
int
);
private
void
re_clear_eol
(
EditLine
*
,
int
,
int
,
int
);
private
void
re__strncopy
(
char
*
,
char
*
,
size_t
);
private
void
re__copy_and_pad
(
char
*
,
const
char
*
,
size_t
);
...
...
@@ -315,9 +322,9 @@ re_goto_bottom(EditLine *el)
{
term_move_to_line
(
el
,
el
->
el_refresh
.
r_oldcv
);
term__putc
(
'\n'
);
term__putc
(
el
,
'\n'
);
re_clear_display
(
el
);
term__flush
();
term__flush
(
el
);
}
...
...
@@ -340,7 +347,7 @@ re_insert(EditLine *el __attribute__((__unused__)),
ELRE_DEBUG
(
1
,
(
__F
,
"re_insert() starting: %d at %d max %d, d ==
\"
%s
\"\n
"
,
num
,
dat
,
dlen
,
d
));
ELRE_DEBUG
(
1
,
(
__F
,
"s ==
\"
%s
\"
n"
,
s
));
ELRE_DEBUG
(
1
,
(
__F
,
"s ==
\"
%s
\"
\
n
"
,
s
));
/* open up the space for num chars */
if
(
num
>
0
)
{
...
...
@@ -353,7 +360,7 @@ re_insert(EditLine *el __attribute__((__unused__)),
ELRE_DEBUG
(
1
,
(
__F
,
"re_insert() after insert: %d at %d max %d, d ==
\"
%s
\"\n
"
,
num
,
dat
,
dlen
,
d
));
ELRE_DEBUG
(
1
,
(
__F
,
"s ==
\"
%s
\"
n"
,
s
));
ELRE_DEBUG
(
1
,
(
__F
,
"s ==
\"
%s
\"
\
n
"
,
s
));
/* copy the characters */
for
(
a
=
d
+
dat
;
(
a
<
d
+
dlen
)
&&
(
num
>
0
);
num
--
)
...
...
@@ -362,7 +369,7 @@ re_insert(EditLine *el __attribute__((__unused__)),
ELRE_DEBUG
(
1
,
(
__F
,
"re_insert() after copy: %d at %d max %d, %s ==
\"
%s
\"\n
"
,
num
,
dat
,
dlen
,
d
,
s
));
ELRE_DEBUG
(
1
,
(
__F
,
"s ==
\"
%s
\"
n"
,
s
));
ELRE_DEBUG
(
1
,
(
__F
,
"s ==
\"
%s
\"
\
n
"
,
s
));
}
...
...
@@ -411,6 +418,32 @@ re__strncopy(char *a, char *b, size_t n)
*
a
++
=
*
b
++
;
}
/* re_clear_eol():
* Find the number of characters we need to clear till the end of line
* in order to make sure that we have cleared the previous contents of
* the line. fx and sx is the number of characters inserted or deleted
* int the first or second diff, diff is the difference between the
* number of characters between the new and old line.
*/
private
void
re_clear_eol
(
EditLine
*
el
,
int
fx
,
int
sx
,
int
diff
)
{
ELRE_DEBUG
(
1
,
(
__F
,
"re_clear_eol sx %d, fx %d, diff %d
\n
"
,
sx
,
fx
,
diff
));
if
(
fx
<
0
)
fx
=
-
fx
;
if
(
sx
<
0
)
sx
=
-
sx
;
if
(
fx
>
diff
)
diff
=
fx
;
if
(
sx
>
diff
)
diff
=
sx
;
ELRE_DEBUG
(
1
,
(
__F
,
"re_clear_eol %d
\n
"
,
diff
));
term_clear_EOL
(
el
,
diff
);
}
/*****************************************************************
re_update_line() is based on finding the middle difference of each line
...
...
@@ -626,7 +659,7 @@ re_update_line(EditLine *el, char *old, char *new, int i)
fx
=
(
nsb
-
nfd
)
-
(
osb
-
ofd
);
sx
=
(
nls
-
nse
)
-
(
ols
-
ose
);
ELRE_DEBUG
(
1
,
(
__F
,
"
\n
"
));
ELRE_DEBUG
(
1
,
(
__F
,
"
fx %d, sx %d
\n
"
,
fx
,
sx
));
ELRE_DEBUG
(
1
,
(
__F
,
"ofd %d, osb %d, ose %d, ols %d, oe %d
\n
"
,
ofd
-
old
,
osb
-
old
,
ose
-
old
,
ols
-
old
,
oe
-
old
));
ELRE_DEBUG
(
1
,
(
__F
,
"nfd %d, nsb %d, nse %d, nls %d, ne %d
\n
"
,
...
...
@@ -775,9 +808,7 @@ re_update_line(EditLine *el, char *old, char *new, int i)
* write (nsb-nfd) chars of new starting at nfd
*/
term_overwrite
(
el
,
nfd
,
(
nsb
-
nfd
));
ELRE_DEBUG
(
1
,
(
__F
,
"cleareol %d
\n
"
,
(
oe
-
old
)
-
(
ne
-
new
)));
term_clear_EOL
(
el
,
(
oe
-
old
)
-
(
ne
-
new
));
re_clear_eol
(
el
,
fx
,
sx
,
(
oe
-
old
)
-
(
ne
-
new
));
/*
* Done
*/
...
...
@@ -818,10 +849,7 @@ re_update_line(EditLine *el, char *old, char *new, int i)
ELRE_DEBUG
(
1
,
(
__F
,
"but with nothing left to save
\r\n
"
));
term_overwrite
(
el
,
nse
,
(
nls
-
nse
));
ELRE_DEBUG
(
1
,
(
__F
,
"cleareol %d
\n
"
,
(
oe
-
old
)
-
(
ne
-
new
)));
if
((
oe
-
old
)
-
(
ne
-
new
)
!=
0
)
term_clear_EOL
(
el
,
(
oe
-
old
)
-
(
ne
-
new
));
re_clear_eol
(
el
,
fx
,
sx
,
(
oe
-
old
)
-
(
ne
-
new
));
}
}
/*
...
...
@@ -982,7 +1010,7 @@ re_refresh_cursor(EditLine *el)
/* now go there */
term_move_to_line
(
el
,
v
);
term_move_to_char
(
el
,
h
);
term__flush
();
term__flush
(
el
);
}
...
...
@@ -993,7 +1021,7 @@ private void
re_fastputc
(
EditLine
*
el
,
int
c
)
{
term__putc
(
c
);
term__putc
(
el
,
c
);
el
->
el_display
[
el
->
el_cursor
.
v
][
el
->
el_cursor
.
h
++
]
=
c
;
if
(
el
->
el_cursor
.
h
>=
el
->
el_term
.
t_size
.
h
)
{
/* if we must overflow */
...
...
@@ -1020,12 +1048,12 @@ re_fastputc(EditLine *el, int c)
}
if
(
EL_HAS_AUTO_MARGINS
)
{
if
(
EL_HAS_MAGIC_MARGINS
)
{
term__putc
(
' '
);
term__putc
(
'\b'
);
term__putc
(
el
,
' '
);
term__putc
(
el
,
'\b'
);
}
}
else
{
term__putc
(
'\r'
);
term__putc
(
'\n'
);
term__putc
(
el
,
'\r'
);
term__putc
(
el
,
'\n'
);
}
}
}
...
...
@@ -1065,7 +1093,7 @@ re_fastaddc(EditLine *el)
re_fastputc
(
el
,
(
int
)(((((
unsigned
int
)
c
)
>>
3
)
&
7
)
+
'0'
));
re_fastputc
(
el
,
(
c
&
7
)
+
'0'
);
}
term__flush
();
term__flush
(
el
);
}
...
...
@@ -1104,7 +1132,7 @@ re_clear_lines(EditLine *el)
}
else
{
term_move_to_line
(
el
,
el
->
el_refresh
.
r_oldcv
);
/* go to last line */
term__putc
(
'\r'
);
/* go to BOL */
term__putc
(
'\n'
);
/* go to new line */
term__putc
(
el
,
'\r'
);
/* go to BOL */
term__putc
(
el
,
'\n'
);
/* go to new line */
}
}
cmd-line-utils/libedit/search.c
View file @
5d2a6c47
...
...
@@ -32,12 +32,17 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)search.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* search.c: History and character search functions
*/
#include <sys/types.h>
#include <stdlib.h>
#if defined(REGEX)
#include <regex.h>
...
...
cmd-line-utils/libedit/sig.c
View file @
5d2a6c47
/* $NetBSD: sig.c,v 1.1
1 2003/08/07 16:44:33 agc
Exp $ */
/* $NetBSD: sig.c,v 1.1
2 2008/09/10 15:45:37 christos
Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -32,7 +32,13 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)sig.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* sig.c: Signal handling stuff.
...
...
@@ -51,15 +57,15 @@ private const int sighdl[] = {
-
1
};
private
void
sig_handler
(
int
);
private
void
el_
sig_handler
(
int
);
/* sig_handler():
/*
el_
sig_handler():
* This is the handler called for all signals
* XXX: we cannot pass any data so we just store the old editline
* state in a private variable
*/
private
void
sig_handler
(
int
signo
)
el_
sig_handler
(
int
signo
)
{
int
i
;
sigset_t
nset
,
oset
;
...
...
@@ -73,7 +79,7 @@ sig_handler(int signo)
tty_rawmode
(
sel
);
if
(
ed_redisplay
(
sel
,
0
)
==
CC_REFRESH
)
re_refresh
(
sel
);
term__flush
();
term__flush
(
sel
);
break
;
case
SIGWINCH
:
...
...
@@ -154,7 +160,7 @@ sig_set(EditLine *el)
for
(
i
=
0
;
sighdl
[
i
]
!=
-
1
;
i
++
)
{
el_signalhandler_t
s
;
/* This could happen if we get interrupted */
if
((
s
=
signal
(
sighdl
[
i
],
sig_handler
))
!=
sig_handler
)
if
((
s
=
signal
(
sighdl
[
i
],
el_sig_handler
))
!=
el_
sig_handler
)
el
->
el_signal
[
i
]
=
s
;
}
sel
=
el
;
...
...
cmd-line-utils/libedit/sig.h
View file @
5d2a6c47
/* $NetBSD: sig.h,v 1.
5 2003/08/07 16:44:33 agc
Exp $ */
/* $NetBSD: sig.h,v 1.
6 2008/07/12 15:27:14 christos
Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -51,7 +51,6 @@
#define ALLSIGS \
_DO(SIGINT) \
_DO(SIGTSTP) \
_DO(SIGSTOP) \
_DO(SIGQUIT) \
_DO(SIGHUP) \
_DO(SIGTERM) \
...
...
cmd-line-utils/libedit/sys.h
View file @
5d2a6c47
...
...
@@ -48,14 +48,14 @@
# define __attribute__(A)
#endif
#ifndef __P
# define __P(x) x
#endif
#ifndef _DIAGASSERT
# define _DIAGASSERT(x)
#endif
#ifndef SIZE_T_MAX
# define SIZE_T_MAX UINT_MAX
#endif
#ifndef __BEGIN_DECLS
# ifdef __cplusplus
# define __BEGIN_DECLS extern "C" {
...
...
@@ -113,6 +113,25 @@ char *fgetln(FILE *fp, size_t *len);
#define REGEX
/* Use POSIX.2 regular expression functions */
#undef REGEXP
/* Use UNIX V8 regular expression functions */
#ifdef __SunOS
extern
int
tgetent
(
char
*
,
const
char
*
);
extern
int
tgetflag
(
char
*
);
extern
int
tgetnum
(
char
*
);
extern
int
tputs
(
const
char
*
,
int
,
int
(
*
)(
int
));
extern
char
*
tgoto
(
const
char
*
,
int
,
int
);
extern
char
*
tgetstr
(
char
*
,
char
**
);
#endif
/* XXXMYSQL: Bug#10218 Command line recall rolls into segfault */
#if !HAVE_DECL_TGOTO
/*
'tgoto' is not declared in the system header files, this causes
problems on 64-bit systems. The function returns a 64 bit pointer
but caller see it as "int" and it's thus truncated to 32-bit
*/
extern
char
*
tgoto
(
const
char
*
,
int
,
int
);
#endif
#ifdef notdef
# undef REGEX
# undef REGEXP
...
...
cmd-line-utils/libedit/term.c
View file @
5d2a6c47
This diff is collapsed.
Click to expand it.
cmd-line-utils/libedit/tokenizer.c
View file @
5d2a6c47
...
...
@@ -32,7 +32,13 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)tokenizer.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* tokenize.c: Bourne shell like tokenizer
...
...
cmd-line-utils/libedit/tty.c
View file @
5d2a6c47
/* $NetBSD: tty.c,v 1.2
1 2004/08/13 12:10:39 mycroft
Exp $ */
/* $NetBSD: tty.c,v 1.2
8 2009/02/06 19:53:23 sketch
Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -32,18 +32,25 @@
* SUCH DAMAGE.
*/
#include <config.h>
#include "config.h"
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)tty.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* tty.c: tty interface stuff
*/
#include <assert.h>
#include <errno.h>
#include "tty.h"
#include "el.h"
typedef
struct
ttymodes_t
{
const
char
*
m_name
;
u
_
int
m_value
;
u
nsigned
int
m_value
;
int
m_type
;
}
ttymodes_t
;
...
...
@@ -438,13 +445,12 @@ private const ttymodes_t ttymodes[] = {
#define tty_getty(el, td) tcgetattr((el)->el_infd, (td))
#define tty_setty(el, td) tcsetattr((el)->el_infd, TCSADRAIN, (td))
#define tty__gettabs(td) ((((td)->c_oflag & TAB3) == TAB3) ? 0 : 1)
#define tty__geteightbit(td) (((td)->c_cflag & CSIZE) == CS8)
#define tty__cooked_mode(td) ((td)->c_lflag & ICANON)
private
int
tty_getty
(
EditLine
*
,
struct
termios
*
);
private
int
tty_setty
(
EditLine
*
,
int
,
const
struct
termios
*
);
private
int
tty__getcharindex
(
int
);
private
void
tty__getchar
(
struct
termios
*
,
unsigned
char
*
);
private
void
tty__setchar
(
struct
termios
*
,
unsigned
char
*
);
...
...
@@ -453,6 +459,29 @@ private int tty_setup(EditLine *);
#define t_qu t_ts
/* tty_getty():
* Wrapper for tcgetattr to handle EINTR
*/
private
int
tty_getty
(
EditLine
*
el
,
struct
termios
*
t
)
{
int
rv
;
while
((
rv
=
tcgetattr
(
el
->
el_infd
,
t
))
==
-
1
&&
errno
==
EINTR
)
continue
;
return
rv
;
}
/* tty_setty():
* Wrapper for tcsetattr to handle EINTR
*/
private
int
tty_setty
(
EditLine
*
el
,
int
action
,
const
struct
termios
*
t
)
{
int
rv
;
while
((
rv
=
tcsetattr
(
el
->
el_infd
,
action
,
t
))
==
-
1
&&
errno
==
EINTR
)
continue
;
return
rv
;
}
/* tty_setup():
* Get the tty parameters and initialize the editing state
...
...
@@ -514,7 +543,7 @@ tty_setup(EditLine *el)
el
->
el_tty
.
t_c
[
TS_IO
][
rst
];
}
tty__setchar
(
&
el
->
el_tty
.
t_ex
,
el
->
el_tty
.
t_c
[
EX_IO
]);
if
(
tty_setty
(
el
,
&
el
->
el_tty
.
t_ex
)
==
-
1
)
{
if
(
tty_setty
(
el
,
TCSADRAIN
,
&
el
->
el_tty
.
t_ex
)
==
-
1
)
{
#ifdef DEBUG_TTY
(
void
)
fprintf
(
el
->
el_errfile
,
"tty_setup: tty_setty: %s
\n
"
,
...
...
@@ -522,8 +551,11 @@ tty_setup(EditLine *el)
#endif
/* DEBUG_TTY */
return
(
-
1
);
}
}
else
}
#ifdef notdef
else
tty__setchar
(
&
el
->
el_tty
.
t_ex
,
el
->
el_tty
.
t_c
[
EX_IO
]);
#endif
el
->
el_tty
.
t_ed
.
c_iflag
&=
~
el
->
el_tty
.
t_t
[
ED_IO
][
MD_INP
].
t_clrmask
;
el
->
el_tty
.
t_ed
.
c_iflag
|=
el
->
el_tty
.
t_t
[
ED_IO
][
MD_INP
].
t_setmask
;
...
...
@@ -1040,7 +1072,7 @@ tty_rawmode(EditLine *el)
}
}
}
if
(
tty_setty
(
el
,
&
el
->
el_tty
.
t_ed
)
==
-
1
)
{
if
(
tty_setty
(
el
,
TCSADRAIN
,
&
el
->
el_tty
.
t_ed
)
==
-
1
)
{
#ifdef DEBUG_TTY
(
void
)
fprintf
(
el
->
el_errfile
,
"tty_rawmode: tty_setty: %s
\n
"
,
strerror
(
errno
));
...
...
@@ -1065,7 +1097,7 @@ tty_cookedmode(EditLine *el)
if
(
el
->
el_flags
&
EDIT_DISABLED
)
return
(
0
);
if
(
tty_setty
(
el
,
&
el
->
el_tty
.
t_ex
)
==
-
1
)
{
if
(
tty_setty
(
el
,
TCSADRAIN
,
&
el
->
el_tty
.
t_ex
)
==
-
1
)
{
#ifdef DEBUG_TTY
(
void
)
fprintf
(
el
->
el_errfile
,
"tty_cookedmode: tty_setty: %s
\n
"
,
...
...
@@ -1101,7 +1133,7 @@ tty_quotemode(EditLine *el)
el
->
el_tty
.
t_qu
.
c_lflag
&=
~
el
->
el_tty
.
t_t
[
QU_IO
][
MD_LIN
].
t_clrmask
;
el
->
el_tty
.
t_qu
.
c_lflag
|=
el
->
el_tty
.
t_t
[
QU_IO
][
MD_LIN
].
t_setmask
;
if
(
tty_setty
(
el
,
&
el
->
el_tty
.
t_qu
)
==
-
1
)
{
if
(
tty_setty
(
el
,
TCSADRAIN
,
&
el
->
el_tty
.
t_qu
)
==
-
1
)
{
#ifdef DEBUG_TTY
(
void
)
fprintf
(
el
->
el_errfile
,
"QuoteModeOn: tty_setty: %s
\n
"
,
strerror
(
errno
));
...
...
@@ -1122,7 +1154,7 @@ tty_noquotemode(EditLine *el)
if
(
el
->
el_tty
.
t_mode
!=
QU_IO
)
return
(
0
);
if
(
tty_setty
(
el
,
&
el
->
el_tty
.
t_ed
)
==
-
1
)
{
if
(
tty_setty
(
el
,
TCSADRAIN
,
&
el
->
el_tty
.
t_ed
)
==
-
1
)
{
#ifdef DEBUG_TTY
(
void
)
fprintf
(
el
->
el_errfile
,
"QuoteModeOff: tty_setty: %s
\n
"
,
strerror
(
errno
));
...
...
@@ -1193,10 +1225,14 @@ tty_stty(EditLine *el, int argc __attribute__((__unused__)), const char **argv)
st
=
len
=
strlen
(
el
->
el_tty
.
t_t
[
z
][
m
->
m_type
].
t_name
);
}
x
=
(
el
->
el_tty
.
t_t
[
z
][
i
].
t_setmask
&
m
->
m_value
)
?
'+'
:
'\0'
;
x
=
(
el
->
el_tty
.
t_t
[
z
][
i
].
t_clrmask
&
m
->
m_value
)
?
'-'
:
x
;
if
(
i
!=
-
1
)
{
x
=
(
el
->
el_tty
.
t_t
[
z
][
i
].
t_setmask
&
m
->
m_value
)
?
'+'
:
'\0'
;
x
=
(
el
->
el_tty
.
t_t
[
z
][
i
].
t_clrmask
&
m
->
m_value
)
?
'-'
:
x
;
}
else
{
x
=
'\0'
;
}
if
(
x
!=
'\0'
||
aflag
)
{
...
...
@@ -1221,7 +1257,7 @@ tty_stty(EditLine *el, int argc __attribute__((__unused__)), const char **argv)
return
(
0
);
}
while
(
argv
&&
(
s
=
*
argv
++
))
{
char
*
p
;
c
onst
c
har
*
p
;
switch
(
*
s
)
{
case
'+'
:
case
'-'
:
...
...
@@ -1232,10 +1268,10 @@ tty_stty(EditLine *el, int argc __attribute__((__unused__)), const char **argv)
break
;
}
d
=
s
;
if
((
p
=
strchr
(
s
,
'='
))
!=
NULL
)
*
p
++
=
'\0'
;
p
=
strchr
(
s
,
'='
);
for
(
m
=
ttymodes
;
m
->
m_name
;
m
++
)
if
(
strcmp
(
m
->
m_name
,
d
)
==
0
&&
if
((
p
?
strncmp
(
m
->
m_name
,
d
,
(
size_t
)(
p
-
d
))
:
strcmp
(
m
->
m_name
,
d
))
==
0
&&
(
p
==
NULL
||
m
->
m_type
==
MD_CHAR
))
break
;
...
...
@@ -1246,7 +1282,7 @@ tty_stty(EditLine *el, int argc __attribute__((__unused__)), const char **argv)
}
if
(
p
)
{
int
c
=
ffs
((
int
)
m
->
m_value
);
int
v
=
*
p
?
parse__escape
((
const
char
**
const
)
&
p
)
:
int
v
=
*
++
p
?
parse__escape
((
const
char
**
)
&
p
)
:
el
->
el_tty
.
t_vdisable
;
assert
(
c
--
!=
0
);
c
=
tty__getcharindex
(
c
);
...
...
@@ -1269,6 +1305,17 @@ tty_stty(EditLine *el, int argc __attribute__((__unused__)), const char **argv)
break
;
}
}
if
(
el
->
el_tty
.
t_mode
==
z
)
{
if
(
tty_setty
(
el
,
TCSADRAIN
,
tios
)
==
-
1
)
{
#ifdef DEBUG_TTY
(
void
)
fprintf
(
el
->
el_errfile
,
"tty_stty: tty_setty: %s
\n
"
,
strerror
(
errno
));
#endif
/* DEBUG_TTY */
return
(
-
1
);
}
}
return
(
0
);
}
...
...
cmd-line-utils/libedit/tty.h
View file @
5d2a6c47
/* $NetBSD: tty.h,v 1.1
0 2003/08/07 16:44:34 agc
Exp $ */
/* $NetBSD: tty.h,v 1.1
1 2005/06/01 11:37:52 lukem
Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -450,8 +450,8 @@
typedef
struct
{
const
char
*
t_name
;
u
_
int
t_setmask
;
u
_
int
t_clrmask
;
u
nsigned
int
t_setmask
;
u
nsigned
int
t_clrmask
;
}
ttyperm_t
[
NN_IO
][
MD_NN
];
typedef
unsigned
char
ttychar_t
[
NN_IO
][
C_NCC
];
...
...
cmd-line-utils/libedit/vi.c
View file @
5d2a6c47
/* $NetBSD: vi.c,v 1.2
0 2004/08/13 12:10:39 mycroft
Exp $ */
/* $NetBSD: vi.c,v 1.2
8 2009/02/06 13:14:37 sketch
Exp $ */
/*-
* Copyright (c) 1992, 1993
...
...
@@ -32,11 +32,17 @@
* SUCH DAMAGE.
*/
#include
<config.h>
#include
"config.h"
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#if !defined(lint) && !defined(SCCSID)
#if 0
static char sccsid[] = "@(#)vi.c 8.1 (Berkeley) 6/4/93";
#else
#endif
#endif
/* not lint && not SCCSID */
/*
* vi.c: Vi mode commands.
...
...
@@ -64,8 +70,10 @@ cv_action(EditLine *el, int c)
el
->
el_line
.
lastchar
-
el
->
el_line
.
buffer
);
el
->
el_chared
.
c_vcmd
.
action
=
NOP
;
el
->
el_chared
.
c_vcmd
.
pos
=
0
;
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
if
(
!
(
c
&
YANK
))
{
el
->
el_line
.
lastchar
=
el
->
el_line
.
buffer
;
el
->
el_line
.
cursor
=
el
->
el_line
.
buffer
;
}
if
(
c
&
INSERT
)
el
->
el_map
.
current
=
el
->
el_map
.
key
;
...
...
@@ -82,7 +90,6 @@ cv_action(EditLine *el, int c)
private
el_action_t
cv_paste
(
EditLine
*
el
,
int
c
)
{
char
*
ptr
;
c_kill_t
*
k
=
&
el
->
el_chared
.
c_kill
;
int
len
=
k
->
last
-
k
->
buf
;
...
...
@@ -96,12 +103,12 @@ cv_paste(EditLine *el, int c)
if
(
!
c
&&
el
->
el_line
.
cursor
<
el
->
el_line
.
lastchar
)
el
->
el_line
.
cursor
++
;
ptr
=
el
->
el_line
.
cursor
;
c_insert
(
el
,
len
);
if
(
el
->
el_line
.
cursor
+
len
>
el
->
el_line
.
lastchar
)
return
(
CC_ERROR
);
(
void
)
memcpy
(
ptr
,
k
->
buf
,
len
+
0u
);
(
void
)
memcpy
(
el
->
el_line
.
cursor
,
k
->
buf
,
len
+
0u
);
return
(
CC_REFRESH
);
}
...
...
@@ -592,13 +599,12 @@ vi_delete_prev_char(EditLine *el, int c __attribute__((__unused__)))
*/
protected
el_action_t
/*ARGSUSED*/
vi_list_or_eof
(
EditLine
*
el
,
int
c
__attribute__
((
__unused__
))
)
vi_list_or_eof
(
EditLine
*
el
,
int
c
)
{
if
(
el
->
el_line
.
cursor
==
el
->
el_line
.
lastchar
)
{
if
(
el
->
el_line
.
cursor
==
el
->
el_line
.
buffer
)
{
term_overwrite
(
el
,
STReof
,
4
);
/* then do a EOF */
term__flush
();
term_writec
(
el
,
c
);
/* then do a EOF */
return
(
CC_EOF
);
}
else
{
/*
...
...
@@ -888,7 +894,7 @@ vi_yank(EditLine *el, int c)
/* vi_comment_out():
* Vi comment out current command
* [
c
]
* [
#
]
*/
protected
el_action_t
/*ARGSUSED*/
...
...
@@ -905,18 +911,19 @@ vi_comment_out(EditLine *el, int c)
/* vi_alias():
* Vi include shell alias
* [@]
* NB: posix imp
il
es that we should enter insert mode, however
* NB: posix imp
li
es that we should enter insert mode, however
* this is against historical precedent...
*/
#if defined(__weak_reference) && !defined(__FreeBSD__)
extern
char
*
get_alias_text
(
const
char
*
)
__weak_reference
(
get_alias_text
);
#endif
protected
el_action_t
/*ARGSUSED*/
vi_alias
(
EditLine
*
el
,
int
c
)
{
#if
def __weak_extern
#if
defined(__weak_reference) && !defined(__FreeBSD__)
char
alias_name
[
3
];
char
*
alias_text
;
extern
char
*
get_alias_text
(
const
char
*
);
__weak_extern
(
get_alias_text
);
if
(
get_alias_text
==
0
)
{
return
CC_ERROR
;
...
...
@@ -1014,7 +1021,7 @@ vi_histedit(EditLine *el, int c)
return
CC_ERROR
;
case
0
:
close
(
fd
);
execlp
(
"vi"
,
"vi"
,
tempfile
,
(
char
*
)
NULL
);
execlp
(
"vi"
,
"vi"
,
tempfile
,
(
char
*
)
NULL
);
exit
(
0
);
/*NOTREACHED*/
default:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment