run a bit of indent over it
not really suitable tho
This commit is contained in:
211
edit.c
211
edit.c
@ -1,4 +1,4 @@
|
||||
/** $MirOS: src/bin/mksh/edit.c,v 1.6 2005/06/08 21:51:20 tg Exp $ */
|
||||
/** $MirOS: src/bin/mksh/edit.c,v 1.7 2005/06/08 22:22:23 tg Exp $ */
|
||||
/* $OpenBSD: edit.c,v 1.29 2005/04/13 02:33:08 deraadt Exp $ */
|
||||
/* $OpenBSD: edit.h,v 1.8 2005/03/28 21:28:22 deraadt Exp $ */
|
||||
/* $OpenBSD: emacs.c,v 1.37 2005/03/30 17:16:37 deraadt Exp $ */
|
||||
@ -10,7 +10,7 @@
|
||||
#include <ctype.h>
|
||||
#include <libgen.h>
|
||||
|
||||
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.6 2005/06/08 21:51:20 tg Exp $");
|
||||
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.7 2005/06/08 22:22:23 tg Exp $");
|
||||
|
||||
#define BEL 0x07
|
||||
|
||||
@ -41,10 +41,10 @@ int promptlen(const char *, const char **);
|
||||
int x_do_comment(char *, int, int *);
|
||||
void x_print_expansions(int, char *const *, int);
|
||||
int x_cf_glob(int, const char *, int, int, int *, int *, char ***, int *);
|
||||
int x_longest_prefix(int , char *const *);
|
||||
int x_longest_prefix(int, char *const *);
|
||||
int x_basename(const char *, const char *);
|
||||
void x_free_words(int, char **);
|
||||
int x_escape(const char *, size_t, int (*)(const char *, size_t));
|
||||
int x_escape(const char *, size_t, int (*) (const char *, size_t));
|
||||
int x_emacs(char *, size_t);
|
||||
void x_init_emacs(void);
|
||||
void x_emacs_keys(X_chars *);
|
||||
@ -70,7 +70,8 @@ x_init(void)
|
||||
/* default value for deficient systems */
|
||||
edchars.werase = 027; /* ^W */
|
||||
|
||||
if (setsig(&sigtraps[SIGWINCH], x_sigwinch, SS_RESTORE_ORIG|SS_SHTRAP))
|
||||
if (setsig(&sigtraps[SIGWINCH], x_sigwinch,
|
||||
SS_RESTORE_ORIG | SS_SHTRAP))
|
||||
sigtraps[SIGWINCH].flags |= TF_SHELL_USES;
|
||||
check_sigwinch(); /* force initial check */
|
||||
|
||||
@ -103,10 +104,10 @@ check_sigwinch(void)
|
||||
x_cols = ws.ws_col < MIN_COLS ? MIN_COLS : ws.ws_col;
|
||||
|
||||
if ((vp = typeset("COLUMNS", 0, 0, 0, 0)))
|
||||
setint(vp, (long) ws.ws_col);
|
||||
setint(vp, (long)ws.ws_col);
|
||||
}
|
||||
if (ws.ws_row && (vp = typeset("LINES", 0, 0, 0, 0)))
|
||||
setint(vp, (long) ws.ws_row);
|
||||
setint(vp, (long)ws.ws_row);
|
||||
}
|
||||
}
|
||||
|
||||
@ -148,7 +149,7 @@ x_getc(void)
|
||||
}
|
||||
if (n != 1)
|
||||
return -1;
|
||||
return (int) (unsigned char) c;
|
||||
return (int)(unsigned char)c;
|
||||
}
|
||||
|
||||
void
|
||||
@ -194,8 +195,8 @@ x_mode(bool onoff)
|
||||
edchars.quit = cb.c_cc[VQUIT];
|
||||
edchars.eof = cb.c_cc[VEOF];
|
||||
edchars.werase = cb.c_cc[VWERASE];
|
||||
cb.c_iflag &= ~(INLCR|ICRNL);
|
||||
cb.c_lflag &= ~(ISIG|ICANON|ECHO);
|
||||
cb.c_iflag &= ~(INLCR | ICRNL);
|
||||
cb.c_lflag &= ~(ISIG | ICANON | ECHO);
|
||||
/* osf/1 processes lnext when ~icanon */
|
||||
cb.c_cc[VLNEXT] = _POSIX_VDISABLE;
|
||||
/* sunos 4.1.x & osf/1 processes discard(flush) when ~icanon */
|
||||
@ -247,7 +248,6 @@ promptlen(const char *cp, const char **spp)
|
||||
delimiter = *cp;
|
||||
cp += 2;
|
||||
}
|
||||
|
||||
for (; *cp; cp++) {
|
||||
if (indelimit && *cp != delimiter)
|
||||
;
|
||||
@ -281,7 +281,7 @@ set_editmode(const char *ed)
|
||||
if ((rcp = strrchr(ed, '/')))
|
||||
ed = ++rcp;
|
||||
for (i = 0; i < NELEM(edit_flags); i++)
|
||||
if (strstr(ed, options[(int) edit_flags[i]].name)) {
|
||||
if (strstr(ed, options[(int)edit_flags[i]].name)) {
|
||||
change_flag(edit_flags[i], OF_SPECIAL, 1);
|
||||
return;
|
||||
}
|
||||
@ -348,7 +348,7 @@ static void glob_table(const char *, XPtrV *, struct table *);
|
||||
static void glob_path(int flags, const char *, XPtrV *, const char *);
|
||||
|
||||
void
|
||||
x_print_expansions(int nwords, char *const *words, int is_command)
|
||||
x_print_expansions(int nwords, char * const *words, int is_command)
|
||||
{
|
||||
int use_copy = 0;
|
||||
int prefix_len;
|
||||
@ -380,13 +380,12 @@ x_print_expansions(int nwords, char *const *words, int is_command)
|
||||
XPput(l, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Enumerate expansions
|
||||
*/
|
||||
x_putc('\r');
|
||||
x_putc('\n');
|
||||
pr_list(use_copy ? (char **) XPptrv(l) : words);
|
||||
pr_list(use_copy ? (char **)XPptrv(l) : words);
|
||||
|
||||
if (use_copy)
|
||||
XPfree(l); /* not x_free_words() */
|
||||
@ -427,7 +426,8 @@ x_file_glob(int flags __attribute__((unused)), const char *str,
|
||||
|
||||
toglob[idx] = toglob[i];
|
||||
idx++;
|
||||
if (escaping) escaping = 0;
|
||||
if (escaping)
|
||||
escaping = 0;
|
||||
}
|
||||
toglob[idx] = '\0';
|
||||
|
||||
@ -438,16 +438,16 @@ x_file_glob(int flags __attribute__((unused)), const char *str,
|
||||
s = pushs(SWSTR, ATEMP);
|
||||
s->start = s->str = toglob;
|
||||
source = s;
|
||||
if (yylex(ONEWORD|LQCHAR) != LWORD) {
|
||||
if (yylex(ONEWORD | LQCHAR) != LWORD) {
|
||||
source = sold;
|
||||
internal_errorf(0, "fileglob: substitute error");
|
||||
return 0;
|
||||
}
|
||||
source = sold;
|
||||
XPinit(w, 32);
|
||||
expand(yylval.cp, &w, DOGLOB|DOTILDE|DOMARKDIRS);
|
||||
expand(yylval.cp, &w, DOGLOB | DOTILDE | DOMARKDIRS);
|
||||
XPput(w, NULL);
|
||||
words = (char **) XPclose(w);
|
||||
words = (char **)XPclose(w);
|
||||
|
||||
for (nwords = 0; words[nwords]; nwords++)
|
||||
;
|
||||
@ -512,7 +512,7 @@ x_command_glob(int flags, const char *str, int slen, char ***wordsp)
|
||||
toglob = add_glob(str, slen);
|
||||
|
||||
/* Convert "foo*" (toglob) to a pattern for future use */
|
||||
pat = evalstr(toglob, DOPAT|DOTILDE);
|
||||
pat = evalstr(toglob, DOPAT | DOTILDE);
|
||||
afree(toglob, ATEMP);
|
||||
|
||||
XPinit(w, 32);
|
||||
@ -534,13 +534,12 @@ x_command_glob(int flags, const char *str, int slen, char ***wordsp)
|
||||
XPfree(w);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Sort entries */
|
||||
if (flags & XCF_FULLPATH) {
|
||||
/* Sort by basename, then path order */
|
||||
struct path_order_info *info;
|
||||
struct path_order_info *last_info = 0;
|
||||
char **words = (char **) XPptrv(w);
|
||||
char **words = (char **)XPptrv(w);
|
||||
int path_order = 0;
|
||||
int i;
|
||||
|
||||
@ -560,13 +559,13 @@ x_command_glob(int flags, const char *str, int slen, char ***wordsp)
|
||||
path_order_cmp);
|
||||
for (i = 0; i < nwords; i++)
|
||||
words[i] = info[i].word;
|
||||
afree((void *) info, ATEMP);
|
||||
afree((void *)info, ATEMP);
|
||||
} else {
|
||||
/* Sort and remove duplicate entries */
|
||||
char **words = (char **) XPptrv(w);
|
||||
char **words = (char **)XPptrv(w);
|
||||
int i, j;
|
||||
|
||||
qsortp(XPptrv(w), (size_t) nwords, xstrcmp);
|
||||
qsortp(XPptrv(w), (size_t)nwords, xstrcmp);
|
||||
|
||||
for (i = j = 0; i < nwords - 1; i++) {
|
||||
if (strcmp(words[i], words[i + 1]))
|
||||
@ -576,11 +575,11 @@ x_command_glob(int flags, const char *str, int slen, char ***wordsp)
|
||||
}
|
||||
words[j++] = words[i];
|
||||
nwords = j;
|
||||
w.cur = (void **) &words[j];
|
||||
w.cur = (void **)&words[j];
|
||||
}
|
||||
|
||||
XPput(w, NULL);
|
||||
*wordsp = (char **) XPclose(w);
|
||||
*wordsp = (char **)XPclose(w);
|
||||
|
||||
return nwords;
|
||||
}
|
||||
@ -608,11 +607,11 @@ x_locate_word(const char *buf, int buflen, int pos, int *startp,
|
||||
* one blank after the end of a word)
|
||||
*/
|
||||
for (; (start > 0 && IS_WORDC(buf[start - 1])) ||
|
||||
(start > 1 && buf[start-2] == '\\'); start--)
|
||||
(start > 1 && buf[start - 2] == '\\'); start--)
|
||||
;
|
||||
/* Go forwards to end of word */
|
||||
for (end = start; end < buflen && IS_WORDC(buf[end]); end++) {
|
||||
if (buf[end] == '\\' && (end+1) < buflen)
|
||||
if (buf[end] == '\\' && (end + 1) < buflen)
|
||||
end++;
|
||||
}
|
||||
|
||||
@ -635,7 +634,6 @@ x_locate_word(const char *buf, int buflen, int pos, int *startp,
|
||||
}
|
||||
*is_commandp = iscmd;
|
||||
}
|
||||
|
||||
*startp = start;
|
||||
|
||||
return end - start;
|
||||
@ -660,13 +658,12 @@ x_cf_glob(int flags, const char *buf, int buflen, int pos, int *startp,
|
||||
if (len == 0 && is_command)
|
||||
return 0;
|
||||
|
||||
nwords = (is_command ? x_command_glob : x_file_glob)(flags,
|
||||
nwords = (is_command ? x_command_glob : x_file_glob) (flags,
|
||||
buf + *startp, len, &words);
|
||||
if (nwords == 0) {
|
||||
*wordsp = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (is_commandp)
|
||||
*is_commandp = is_command;
|
||||
*wordsp = words;
|
||||
@ -701,7 +698,7 @@ add_glob(const char *str, int slen)
|
||||
if (*s == '\\' && s[1])
|
||||
s++;
|
||||
else if (*s == '*' || *s == '[' || *s == '?' || *s == '$'
|
||||
|| (s[1] == '(' /*)*/ && strchr("*+?@!", *s)))
|
||||
|| (s[1] == '(' && strchr("*+?@!", *s)))
|
||||
break;
|
||||
else if (*s == '/')
|
||||
saw_slash = true;
|
||||
@ -710,7 +707,6 @@ add_glob(const char *str, int slen)
|
||||
toglob[slen] = '*';
|
||||
toglob[slen + 1] = '\0';
|
||||
}
|
||||
|
||||
return toglob;
|
||||
}
|
||||
|
||||
@ -718,7 +714,7 @@ add_glob(const char *str, int slen)
|
||||
* Find longest common prefix
|
||||
*/
|
||||
int
|
||||
x_longest_prefix(int nwords, char *const *words)
|
||||
x_longest_prefix(int nwords, char * const * words)
|
||||
{
|
||||
int i, j;
|
||||
int prefix_len;
|
||||
@ -841,7 +837,7 @@ glob_path(int flags, const char *pat, XPtrV *wp, const char *lpath)
|
||||
newsize = XPsize(*wp);
|
||||
|
||||
/* Check that each match is executable... */
|
||||
words = (char **) XPptrv(*wp);
|
||||
words = (char **)XPptrv(*wp);
|
||||
for (i = j = oldsize; i < newsize; i++) {
|
||||
staterr = 0;
|
||||
if ((search_access(words[i], X_OK, &staterr) >= 0) ||
|
||||
@ -854,7 +850,7 @@ glob_path(int flags, const char *pat, XPtrV *wp, const char *lpath)
|
||||
} else
|
||||
afree(words[i], ATEMP);
|
||||
}
|
||||
wp->cur = (void **) &words[j];
|
||||
wp->cur = (void **)&words[j];
|
||||
|
||||
if (!*sp++)
|
||||
break;
|
||||
@ -872,7 +868,7 @@ x_escape(const char *s, size_t len, int (*putbuf_func) (const char *, size_t))
|
||||
{
|
||||
size_t add, wlen;
|
||||
const char *ifs = str_val(local("IFS", 0));
|
||||
int rval=0;
|
||||
int rval = 0;
|
||||
|
||||
for (add = 0, wlen = len; wlen - add > 0; add++) {
|
||||
if (strchr("\\$()[{}*&;#|<>\"'`", s[add]) || strchr(ifs, s[add])) {
|
||||
@ -880,7 +876,6 @@ x_escape(const char *s, size_t len, int (*putbuf_func) (const char *, size_t))
|
||||
rval = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
putbuf_func("\\", 1);
|
||||
putbuf_func(&s[add], 1);
|
||||
|
||||
@ -1315,7 +1310,6 @@ x_emacs(char *buf, size_t len)
|
||||
x_load_hist(histptr - off);
|
||||
x_nextcmd = -1;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
x_flush();
|
||||
if ((c = x_e_getc()) < 0)
|
||||
@ -1325,9 +1319,8 @@ x_emacs(char *buf, size_t len)
|
||||
c = META(c);
|
||||
x_curprefix = 1;
|
||||
}
|
||||
|
||||
f = x_curprefix == -1 ? XFUNC_insert :
|
||||
x_tab[x_curprefix][c&CHARMASK];
|
||||
x_tab[x_curprefix][c & CHARMASK];
|
||||
|
||||
if (!(x_ftab[f].xf_flags & XF_PREFIX) &&
|
||||
x_last_command != XFUNC_set_arg) {
|
||||
@ -1378,7 +1371,7 @@ x_ins_string(int c)
|
||||
x_e_putc(BEL);
|
||||
return KSTD;
|
||||
}
|
||||
macroptr = x_atab[c>>8][c & CHARMASK];
|
||||
macroptr = x_atab[c >> 8][c & CHARMASK];
|
||||
if (macroptr && !*macroptr) {
|
||||
/* XXX bell? */
|
||||
macroptr = NULL;
|
||||
@ -1391,12 +1384,11 @@ static int x_do_ins(const char *cp, int len);
|
||||
static int
|
||||
x_do_ins(const char *cp, int len)
|
||||
{
|
||||
if (xep+len >= xend) {
|
||||
if (xep + len >= xend) {
|
||||
x_e_putc(BEL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
memmove(xcp+len, xcp, xep - xcp + 1);
|
||||
memmove(xcp + len, xcp, xep - xcp + 1);
|
||||
memmove(xcp, cp, len);
|
||||
xcp += len;
|
||||
xep += len;
|
||||
@ -1424,7 +1416,6 @@ x_ins(char *s)
|
||||
for (cp = xlp; cp > xcp; )
|
||||
x_bs(*--cp);
|
||||
}
|
||||
|
||||
x_adj_ok = 1;
|
||||
return 0;
|
||||
}
|
||||
@ -1477,7 +1468,7 @@ x_del_char(int c __attribute__((unused)))
|
||||
static void
|
||||
x_delete(int nc, int push)
|
||||
{
|
||||
int i,j;
|
||||
int i, j;
|
||||
char *cp;
|
||||
|
||||
if (nc == 0)
|
||||
@ -1488,7 +1479,6 @@ x_delete(int nc, int push)
|
||||
else
|
||||
xmp -= nc;
|
||||
}
|
||||
|
||||
/*
|
||||
* This lets us yank a word we have deleted.
|
||||
*/
|
||||
@ -1502,7 +1492,7 @@ x_delete(int nc, int push)
|
||||
while (i--) {
|
||||
j += x_size(*cp++);
|
||||
}
|
||||
memmove(xcp, xcp+nc, xep - xcp + 1); /* Copies the null */
|
||||
memmove(xcp, xcp + nc, xep - xcp + 1); /* Copies the null */
|
||||
x_adj_ok = 0; /* don't redraw */
|
||||
x_zots(xcp);
|
||||
/*
|
||||
@ -1522,7 +1512,7 @@ x_delete(int nc, int push)
|
||||
/*x_goto(xcp);*/
|
||||
x_adj_ok = 1;
|
||||
xlp_valid = false;
|
||||
for (cp = x_lastcp(); cp > xcp; )
|
||||
for (cp = x_lastcp(); cp > xcp;)
|
||||
x_bs(*--cp);
|
||||
|
||||
return;
|
||||
@ -1641,7 +1631,7 @@ x_size_str(char *cp)
|
||||
static int
|
||||
x_size(int c)
|
||||
{
|
||||
if (c=='\t')
|
||||
if (c == '\t')
|
||||
return 4; /* Kludge, tabs are always four spaces. */
|
||||
if (iscntrl(c)) /* control char */
|
||||
return 2;
|
||||
@ -1845,7 +1835,7 @@ static int
|
||||
x_search_hist(int c)
|
||||
{
|
||||
int offset = -1; /* offset of match in xbuf, else -1 */
|
||||
char pat [256+1]; /* pattern buffer */
|
||||
char pat[256 + 1]; /* pattern buffer */
|
||||
char *p = pat;
|
||||
u_char f;
|
||||
|
||||
@ -1858,7 +1848,7 @@ x_search_hist(int c)
|
||||
x_flush();
|
||||
if ((c = x_e_getc()) < 0)
|
||||
return KSTD;
|
||||
f = x_tab[0][c&CHARMASK];
|
||||
f = x_tab[0][c & CHARMASK];
|
||||
if (c == MKCTRL('['))
|
||||
break;
|
||||
else if (f == XFUNC_search_hist)
|
||||
@ -1910,7 +1900,7 @@ x_search(char *pat, int sameline, int offset)
|
||||
char **hp;
|
||||
int i;
|
||||
|
||||
for (hp = x_histp - (sameline ? 0 : 1) ; hp >= history; --hp) {
|
||||
for (hp = x_histp - (sameline ? 0 : 1); hp >= history; --hp) {
|
||||
i = x_match(*hp, pat);
|
||||
if (i >= 0) {
|
||||
if (offset < 0)
|
||||
@ -1930,7 +1920,7 @@ static int
|
||||
x_match(char *str, char *pat)
|
||||
{
|
||||
if (*pat == '^') {
|
||||
return (strncmp(str, pat+1, strlen(pat+1)) == 0) ? 0 : -1;
|
||||
return (strncmp(str, pat + 1, strlen(pat + 1)) == 0) ? 0 : -1;
|
||||
} else {
|
||||
char *q = strstr(str, pat);
|
||||
return (q == NULL) ? -1 : q - str;
|
||||
@ -2140,7 +2130,7 @@ x_yank(int c __attribute__((unused)))
|
||||
killtp = KILLSIZE;
|
||||
else
|
||||
killtp = killsp;
|
||||
killtp --;
|
||||
killtp--;
|
||||
if (killstack[killtp] == 0) {
|
||||
x_e_puts("\nnothing to yank");
|
||||
x_redraw(-1);
|
||||
@ -2277,7 +2267,7 @@ x_print(int prefix, int key)
|
||||
}
|
||||
|
||||
int
|
||||
x_bind( const char *a1, const char *a2,
|
||||
x_bind(const char *a1, const char *a2,
|
||||
int macro, /* bind -m */
|
||||
int list) /* bind -l */
|
||||
{
|
||||
@ -2290,7 +2280,6 @@ x_bind( const char *a1, const char *a2,
|
||||
bi_errorf("cannot bind, not a tty");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* List function names */
|
||||
if (list) {
|
||||
for (f = 0; f < NELEM(x_ftab); f++)
|
||||
@ -2299,7 +2288,6 @@ x_bind( const char *a1, const char *a2,
|
||||
shprintf("%s\n", x_ftab[f].xf_name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (a1 == NULL) {
|
||||
for (prefix = 0; prefix < X_NTABS; prefix++)
|
||||
for (key = 0; key < X_TABSZ; key++) {
|
||||
@ -2311,7 +2299,6 @@ x_bind( const char *a1, const char *a2,
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
m1 = x_mapin(a1);
|
||||
prefix = key = 0;
|
||||
for (;; m1++) {
|
||||
@ -2328,7 +2315,6 @@ x_bind( const char *a1, const char *a2,
|
||||
x_print(prefix, key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (*a2 == 0)
|
||||
f = XFUNC_insert;
|
||||
else if (!macro) {
|
||||
@ -2370,7 +2356,7 @@ x_init_emacs(void)
|
||||
ainit(AEDIT);
|
||||
x_nextcmd = -1;
|
||||
|
||||
x_tab = (u_char (*)[X_TABSZ]) alloc(sizeofN(*x_tab, X_NTABS), AEDIT);
|
||||
x_tab = (u_char (*)[X_TABSZ])alloc(sizeofN(*x_tab, X_NTABS), AEDIT);
|
||||
for (j = 0; j < X_TABSZ; j++)
|
||||
x_tab[0][j] = XFUNC_insert;
|
||||
for (i = 1; i < X_NTABS; i++)
|
||||
@ -2380,7 +2366,7 @@ x_init_emacs(void)
|
||||
x_tab[(unsigned char)x_defbindings[i].xdb_tab][x_defbindings[i].xdb_char]
|
||||
= x_defbindings[i].xdb_func;
|
||||
|
||||
x_atab = (char *(*)[X_TABSZ]) alloc(sizeofN(*x_atab, X_NTABS), AEDIT);
|
||||
x_atab = (char *(*)[X_TABSZ])alloc(sizeofN(*x_atab, X_NTABS), AEDIT);
|
||||
for (i = 1; i < X_NTABS; i++)
|
||||
for (j = 0; j < X_TABSZ; j++)
|
||||
x_atab[i][j] = NULL;
|
||||
@ -2459,7 +2445,7 @@ x_xchg_point_mark(int c __attribute__((unused)))
|
||||
}
|
||||
tmp = xmp;
|
||||
xmp = xcp;
|
||||
x_goto( tmp );
|
||||
x_goto(tmp);
|
||||
return KSTD;
|
||||
}
|
||||
|
||||
@ -2569,7 +2555,6 @@ x_expand(int c __attribute__((unused)))
|
||||
x_e_putc(BEL);
|
||||
return KSTD;
|
||||
}
|
||||
|
||||
x_goto(xbuf + start);
|
||||
x_delete(end - start, false);
|
||||
for (i = 0; i < nwords;) {
|
||||
@ -2602,14 +2587,12 @@ do_complete(int flags, /* XCF_{COMMAND,FILE,COMMAND_FILE} */
|
||||
x_e_putc(BEL);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == CT_LIST) {
|
||||
x_print_expansions(nwords, words, is_command);
|
||||
x_redraw(0);
|
||||
x_free_words(nwords, words);
|
||||
return;
|
||||
}
|
||||
|
||||
olen = end - start;
|
||||
nlen = x_longest_prefix(nwords, words);
|
||||
/* complete */
|
||||
@ -2625,12 +2608,10 @@ do_complete(int flags, /* XCF_{COMMAND,FILE,COMMAND_FILE} */
|
||||
x_ins(space);
|
||||
completed = 1;
|
||||
}
|
||||
|
||||
if (type == CT_COMPLIST && !completed) {
|
||||
x_print_expansions(nwords, words, is_command);
|
||||
completed = 1;
|
||||
}
|
||||
|
||||
if (completed)
|
||||
x_redraw(0);
|
||||
|
||||
@ -3127,7 +3108,9 @@ struct macro_state {
|
||||
};
|
||||
static struct macro_state macro;
|
||||
|
||||
enum expand_mode { NONE, EXPAND, COMPLETE, PRINT };
|
||||
enum expand_mode {
|
||||
NONE, EXPAND, COMPLETE, PRINT
|
||||
};
|
||||
static enum expand_mode expanded = NONE; /* last input was expanded */
|
||||
|
||||
int
|
||||
@ -3177,7 +3160,9 @@ x_vi(char *buf, size_t len)
|
||||
x_flush();
|
||||
}
|
||||
|
||||
x_putc('\r'); x_putc('\n'); x_flush();
|
||||
x_putc('\r');
|
||||
x_putc('\n');
|
||||
x_flush();
|
||||
|
||||
if (c == -1 || (ssize_t)len <= es->linelen)
|
||||
return -1;
|
||||
@ -3335,7 +3320,7 @@ vi_hook(int ch)
|
||||
}
|
||||
} else {
|
||||
locpat[srchlen] = '\0';
|
||||
(void) strlcpy(srchpat, locpat, sizeof srchpat);
|
||||
(void)strlcpy(srchpat, locpat, sizeof srchpat);
|
||||
}
|
||||
state = VCMD;
|
||||
} else if (ch == edchars.erase || ch == Ctrl('h')) {
|
||||
@ -3520,7 +3505,7 @@ vi_insert(int ch)
|
||||
inslen--;
|
||||
es->cursor--;
|
||||
es->linelen--;
|
||||
memmove(&es->cbuf[es->cursor], &es->cbuf[es->cursor+1],
|
||||
memmove(&es->cbuf[es->cursor], &es->cbuf[es->cursor + 1],
|
||||
es->linelen - es->cursor + 1);
|
||||
}
|
||||
expanded = NONE;
|
||||
@ -3609,7 +3594,7 @@ vi_insert(int ch)
|
||||
return -1;
|
||||
ibuf[inslen++] = ch;
|
||||
if (insert == INSERT) {
|
||||
memmove(&es->cbuf[es->cursor+1], &es->cbuf[es->cursor],
|
||||
memmove(&es->cbuf[es->cursor + 1], &es->cbuf[es->cursor],
|
||||
es->linelen - es->cursor);
|
||||
es->linelen++;
|
||||
}
|
||||
@ -3669,7 +3654,7 @@ vi_cmd(int argcnt, const char *cmd)
|
||||
if (!cmd[1] || !ap || !(ap->flag & ISSET))
|
||||
return -1;
|
||||
/* check if this is a recursive call... */
|
||||
if ((p = (char *) macro.p))
|
||||
if ((p = (char *)macro.p))
|
||||
while ((p = strchr(p, '\0')) && p[1])
|
||||
if (*++p == cmd[1])
|
||||
return -1;
|
||||
@ -3688,20 +3673,22 @@ vi_cmd(int argcnt, const char *cmd)
|
||||
nbuf[nlen++] = '\0';
|
||||
nbuf[nlen++] = '\0';
|
||||
}
|
||||
macro.p = macro.buf = (unsigned char *) nbuf;
|
||||
macro.p = macro.buf = (unsigned char *)nbuf;
|
||||
macro.len = nlen;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
if (es->linelen != 0)
|
||||
es->cursor++;
|
||||
insert = INSERT;
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
del_range(0, 0);
|
||||
es->cursor = es->linelen;
|
||||
insert = INSERT;
|
||||
@ -3710,7 +3697,8 @@ vi_cmd(int argcnt, const char *cmd)
|
||||
case 'S':
|
||||
es->cursor = domove(1, "^", 1);
|
||||
del_range(es->cursor, es->linelen);
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
insert = INSERT;
|
||||
break;
|
||||
|
||||
@ -3729,7 +3717,7 @@ vi_cmd(int argcnt, const char *cmd)
|
||||
if ((ncursor = domove(argcnt, &cmd[1], 1)) < 0)
|
||||
return -1;
|
||||
if (*cmd == 'c' &&
|
||||
(cmd[1]=='w' || cmd[1]=='W') &&
|
||||
(cmd[1] == 'w' || cmd[1] == 'W') &&
|
||||
!isspace(es->cbuf[es->cursor])) {
|
||||
while (isspace(es->cbuf[--ncursor]))
|
||||
;
|
||||
@ -3752,13 +3740,15 @@ vi_cmd(int argcnt, const char *cmd)
|
||||
es->cursor = c1;
|
||||
}
|
||||
if (*cmd == 'c') {
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
insert = INSERT;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'p':
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
if (es->linelen != 0)
|
||||
es->cursor++;
|
||||
while (putbuf(ybuf, yanklen, 0) == 0 && --argcnt > 0)
|
||||
@ -3770,7 +3760,8 @@ vi_cmd(int argcnt, const char *cmd)
|
||||
break;
|
||||
|
||||
case 'P':
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
any = 0;
|
||||
while (putbuf(ybuf, yanklen, 0) == 0 && --argcnt > 0)
|
||||
any = 1;
|
||||
@ -3781,7 +3772,8 @@ vi_cmd(int argcnt, const char *cmd)
|
||||
break;
|
||||
|
||||
case 'C':
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
del_range(es->cursor, es->linelen);
|
||||
insert = INSERT;
|
||||
break;
|
||||
@ -3811,12 +3803,14 @@ vi_cmd(int argcnt, const char *cmd)
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
insert = INSERT;
|
||||
break;
|
||||
|
||||
case 'I':
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
es->cursor = domove(1, "^", 1);
|
||||
insert = INSERT;
|
||||
break;
|
||||
@ -3846,7 +3840,8 @@ vi_cmd(int argcnt, const char *cmd)
|
||||
case 'r':
|
||||
if (es->linelen == 0)
|
||||
return -1;
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
if (cmd[1] == 0)
|
||||
vi_error();
|
||||
else {
|
||||
@ -3861,14 +3856,16 @@ vi_cmd(int argcnt, const char *cmd)
|
||||
break;
|
||||
|
||||
case 'R':
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
insert = REPLACE;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
if (es->linelen == 0)
|
||||
return -1;
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
if (es->cursor + argcnt > es->linelen)
|
||||
argcnt = es->linelen - es->cursor;
|
||||
del_range(es->cursor, es->cursor + argcnt);
|
||||
@ -3897,7 +3894,8 @@ vi_cmd(int argcnt, const char *cmd)
|
||||
case 'x':
|
||||
if (es->linelen == 0)
|
||||
return -1;
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
if (es->cursor + argcnt > es->linelen)
|
||||
argcnt = es->linelen - es->cursor;
|
||||
yank_range(es->cursor, es->cursor + argcnt);
|
||||
@ -3906,7 +3904,8 @@ vi_cmd(int argcnt, const char *cmd)
|
||||
|
||||
case 'X':
|
||||
if (es->cursor > 0) {
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
if (es->cursor < argcnt)
|
||||
argcnt = es->cursor;
|
||||
yank_range(es->cursor - argcnt, es->cursor);
|
||||
@ -4234,7 +4233,7 @@ static int
|
||||
redo_insert(int count)
|
||||
{
|
||||
while (count-- > 0)
|
||||
if (putbuf(ibuf, inslen, insert==REPLACE) != 0)
|
||||
if (putbuf(ibuf, inslen, insert == REPLACE) != 0)
|
||||
return -1;
|
||||
if (es->cursor > 0)
|
||||
es->cursor--;
|
||||
@ -4361,8 +4360,8 @@ edit_reset(char *buf, size_t len)
|
||||
wbuf[0] = aresize(wbuf[0], wbuf_len, APERM);
|
||||
wbuf[1] = aresize(wbuf[1], wbuf_len, APERM);
|
||||
}
|
||||
(void) memset(wbuf[0], ' ', wbuf_len);
|
||||
(void) memset(wbuf[1], ' ', wbuf_len);
|
||||
(void)memset(wbuf[0], ' ', wbuf_len);
|
||||
(void)memset(wbuf[1], ' ', wbuf_len);
|
||||
winwidth = x_cols - pwidth - 3;
|
||||
win = 0;
|
||||
morec = ' ';
|
||||
@ -4573,7 +4572,7 @@ grabhist(int save, int n)
|
||||
ohnum = n;
|
||||
return 0;
|
||||
}
|
||||
(void) histnum(n);
|
||||
(void)histnum(n);
|
||||
if ((hptr = *histpos()) == NULL) {
|
||||
internal_errorf(0, "grabhist: bad history array");
|
||||
return -1;
|
||||
@ -4595,7 +4594,7 @@ grabsearch(int save, int start, int fwd, char *pat)
|
||||
int hist;
|
||||
int anchored;
|
||||
|
||||
if ((start == 0 && fwd == 0) || (start >= hlast-1 && fwd == 1))
|
||||
if ((start == 0 && fwd == 0) || (start >= hlast - 1 && fwd == 1))
|
||||
return -1;
|
||||
if (fwd)
|
||||
start++;
|
||||
@ -4625,7 +4624,7 @@ grabsearch(int save, int start, int fwd, char *pat)
|
||||
static void
|
||||
redraw_line(int newl)
|
||||
{
|
||||
(void) memset(wbuf[win], ' ', wbuf_len);
|
||||
(void)memset(wbuf[win], ' ', wbuf_len);
|
||||
if (newl) {
|
||||
x_putc('\r');
|
||||
x_putc('\n');
|
||||
@ -4658,7 +4657,7 @@ outofwin(void)
|
||||
col = 0;
|
||||
cur = es->winleft;
|
||||
while (cur < es->cursor)
|
||||
col = newcol((unsigned char) es->cbuf[cur++], col);
|
||||
col = newcol((unsigned char)es->cbuf[cur++], col);
|
||||
if (col >= winwidth)
|
||||
return 1;
|
||||
return 0;
|
||||
@ -4680,10 +4679,10 @@ rewindow(void)
|
||||
holdcur2 = tcur;
|
||||
holdcol2 = tcol;
|
||||
}
|
||||
tcol = newcol((unsigned char) es->cbuf[tcur++], tcol);
|
||||
tcol = newcol((unsigned char)es->cbuf[tcur++], tcol);
|
||||
}
|
||||
while (tcol - holdcol1 > winwidth / 2)
|
||||
holdcol1 = newcol((unsigned char) es->cbuf[holdcur1++],
|
||||
holdcol1 = newcol((unsigned char)es->cbuf[holdcur1++],
|
||||
holdcol1);
|
||||
es->winleft = holdcur1;
|
||||
}
|
||||
@ -4860,7 +4859,8 @@ expand_word(int cmd)
|
||||
i = buf->cursor - end;
|
||||
if (rval == 0 && i > 0)
|
||||
es->cursor += i;
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
insert = INSERT;
|
||||
lastac = 0;
|
||||
refresh(0);
|
||||
@ -4964,7 +4964,8 @@ complete_word(int cmd, int count)
|
||||
}
|
||||
x_free_words(nwords, words);
|
||||
|
||||
modified = 1; hnum = hlast;
|
||||
modified = 1;
|
||||
hnum = hlast;
|
||||
insert = INSERT;
|
||||
lastac = 0; /* prevent this from being redone... */
|
||||
refresh(0);
|
||||
@ -4980,7 +4981,7 @@ print_expansions(struct edstate *est, int cmd __attribute__((unused)))
|
||||
char **words;
|
||||
int is_command;
|
||||
|
||||
nwords = x_cf_glob(XCF_COMMAND_FILE|XCF_FULLPATH,
|
||||
nwords = x_cf_glob(XCF_COMMAND_FILE | XCF_FULLPATH,
|
||||
est->cbuf, est->linelen, est->cursor,
|
||||
&start, &end, &words, &is_command);
|
||||
if (nwords == 0) {
|
||||
@ -5043,6 +5044,6 @@ vi_macro_reset(void)
|
||||
{
|
||||
if (macro.p) {
|
||||
afree(macro.buf, APERM);
|
||||
memset((char *) ¯o, 0, sizeof(macro));
|
||||
memset((char *)¯o, 0, sizeof(macro));
|
||||
}
|
||||
}
|
||||
|
73
main.c
73
main.c
@ -1,4 +1,4 @@
|
||||
/** $MirOS: src/bin/mksh/main.c,v 1.11 2005/06/08 21:51:21 tg Exp $ */
|
||||
/** $MirOS: src/bin/mksh/main.c,v 1.12 2005/06/08 22:22:24 tg Exp $ */
|
||||
/* $OpenBSD: main.c,v 1.38 2005/03/30 17:16:37 deraadt Exp $ */
|
||||
/* $OpenBSD: tty.c,v 1.8 2005/03/30 17:16:37 deraadt Exp $ */
|
||||
/* $OpenBSD: io.c,v 1.21 2005/03/30 17:16:37 deraadt Exp $ */
|
||||
@ -13,21 +13,21 @@
|
||||
#include <time.h>
|
||||
#endif
|
||||
|
||||
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.11 2005/06/08 21:51:21 tg Exp $");
|
||||
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.12 2005/06/08 22:22:24 tg Exp $");
|
||||
|
||||
const char ksh_version[] = "@(#)MIRBSD KSH R23 2005/06/08";
|
||||
|
||||
extern char **environ;
|
||||
|
||||
static void reclaim(void);
|
||||
static void remove_temps(struct temp *tp);
|
||||
static void remove_temps(struct temp * tp);
|
||||
static int is_restricted(char *name);
|
||||
|
||||
static const char initifs[] = "IFS= \t\n";
|
||||
|
||||
static const char initsubs[] = "${PS2=> } ${PS3=#? } ${PS4=+ }";
|
||||
|
||||
static const char *initcoms [] = {
|
||||
static const char *initcoms[] = {
|
||||
"typeset", "-r", "KSH_VERSION", NULL,
|
||||
"typeset", "-x", "SHELL", "PATH", "HOME", NULL,
|
||||
"typeset", "-i", "PGRP=0", "PPID", NULL,
|
||||
@ -76,7 +76,7 @@ main(int argc, char *argv[])
|
||||
"mksh", NULL
|
||||
};
|
||||
|
||||
argv = (char **) empty_argv;
|
||||
argv = (char **)empty_argv;
|
||||
argc = 1;
|
||||
}
|
||||
kshname = *argv;
|
||||
@ -171,7 +171,7 @@ main(int argc, char *argv[])
|
||||
/* import environment */
|
||||
if (environ != NULL)
|
||||
for (wp = environ; *wp != NULL; wp++)
|
||||
typeset(*wp, IMPORT|EXPORT, 0, 0, 0);
|
||||
typeset(*wp, IMPORT | EXPORT, 0, 0, 0);
|
||||
|
||||
kshpid = procpid = getpid();
|
||||
typeset(initifs, 0, 0, 0, 0); /* for security */
|
||||
@ -206,13 +206,13 @@ main(int argc, char *argv[])
|
||||
#if !HAVE_ARC4RANDOM
|
||||
srand((*((long *)kshname)) ^ ((long)time(NULL) * kshpid * ppid));
|
||||
#endif
|
||||
setint(global("PPID"), (long) ppid);
|
||||
setint(global("PPID"), (long)ppid);
|
||||
/* setstr can't fail here */
|
||||
if (!Flag(FSH))
|
||||
setstr(global("KSH_VERSION"), ksh_version, KSH_RETURN_ERROR);
|
||||
|
||||
/* execute initialisation statements */
|
||||
for (wp = (char**) initcoms; *wp != NULL; wp++) {
|
||||
for (wp = (char **)initcoms; *wp != NULL; wp++) {
|
||||
shcomexec(wp);
|
||||
for (; *wp != NULL; wp++)
|
||||
;
|
||||
@ -254,7 +254,8 @@ main(int argc, char *argv[])
|
||||
} else if (argi < argc && !Flag(FSTDIN)) {
|
||||
s = pushs(SFILE, ATEMP);
|
||||
s->file = kshname = argv[argi++];
|
||||
s->u.shf = shf_open(s->file, O_RDONLY, 0, SHF_MAPHI|SHF_CLEXEC);
|
||||
s->u.shf = shf_open(s->file, O_RDONLY, 0,
|
||||
SHF_MAPHI | SHF_CLEXEC);
|
||||
if (s->u.shf == NULL) {
|
||||
exstat = 127; /* POSIX */
|
||||
errorf("%s: %s", s->file, strerror(errno));
|
||||
@ -294,7 +295,7 @@ main(int argc, char *argv[])
|
||||
l = e->loc;
|
||||
l->argv = &argv[argi - 1];
|
||||
l->argc = argc - argi;
|
||||
l->argv[0] = (char *) kshname;
|
||||
l->argv[0] = (char *)kshname;
|
||||
getopts_reset(1);
|
||||
|
||||
/* Disable during .profile/ENV reading */
|
||||
@ -315,7 +316,6 @@ main(int argc, char *argv[])
|
||||
include(substitute("$HOME/.profile", 0), 0,
|
||||
NULL, 1);
|
||||
}
|
||||
|
||||
if (Flag(FPRIVILEGED))
|
||||
include("/etc/suid_profile", 0, NULL, 1);
|
||||
else {
|
||||
@ -335,7 +335,7 @@ main(int argc, char *argv[])
|
||||
"ENV", "SHELL",
|
||||
NULL
|
||||
};
|
||||
shcomexec((char **) restr_com);
|
||||
shcomexec((char **)restr_com);
|
||||
/* After typeset command... */
|
||||
Flag(FRESTRICTED) = 1;
|
||||
}
|
||||
@ -361,7 +361,7 @@ include(const char *name, int argc, char **argv, int intr_ok)
|
||||
volatile int old_argc;
|
||||
int i;
|
||||
|
||||
shf = shf_open(name, O_RDONLY, 0, SHF_MAPHI|SHF_CLEXEC);
|
||||
shf = shf_open(name, O_RDONLY, 0, SHF_MAPHI | SHF_CLEXEC);
|
||||
if (shf == NULL)
|
||||
return -1;
|
||||
|
||||
@ -431,7 +431,7 @@ command(const char *comm)
|
||||
* run the commands from the input source, returning status.
|
||||
*/
|
||||
int
|
||||
shell(Source *volatile s, volatile int toplevel)
|
||||
shell(Source * volatile s, volatile int toplevel)
|
||||
{
|
||||
struct op *t;
|
||||
volatile int wastty = s->flags & SF_TTY;
|
||||
@ -483,7 +483,6 @@ shell(Source *volatile s, volatile int toplevel)
|
||||
/*NOREACHED*/
|
||||
}
|
||||
}
|
||||
|
||||
while (1) {
|
||||
if (trap)
|
||||
runtraps(0);
|
||||
@ -494,12 +493,10 @@ shell(Source *volatile s, volatile int toplevel)
|
||||
else
|
||||
s->flags &= ~SF_ECHO;
|
||||
}
|
||||
|
||||
if (interactive) {
|
||||
j_notify();
|
||||
set_prompt(PS1, s);
|
||||
}
|
||||
|
||||
t = compile(s);
|
||||
if (t != NULL && t->type == TEOF) {
|
||||
if (wastty && Flag(FIGNOREEOF) && --attempts > 0) {
|
||||
@ -520,7 +517,6 @@ shell(Source *volatile s, volatile int toplevel)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (t && (!Flag(FNOEXEC) || (s->flags & SF_TTY)))
|
||||
exstat = execute(t, 0);
|
||||
|
||||
@ -600,7 +596,6 @@ quitenv(struct shf *shf)
|
||||
if (ep->savefd[2]) /* Clear any write errors */
|
||||
shf_reopen(2, SHF_WR, shl_out);
|
||||
}
|
||||
|
||||
/* Bottom of the stack.
|
||||
* Either main shell is exiting or cleanup_parents_env() was called.
|
||||
*/
|
||||
@ -620,7 +615,7 @@ quitenv(struct shf *shf)
|
||||
if ((sig == SIGINT || sig == SIGTERM) &&
|
||||
getpgrp() == kshpid) {
|
||||
setsig(&sigtraps[sig], SIG_DFL,
|
||||
SS_RESTORE_CURR|SS_FORCE);
|
||||
SS_RESTORE_CURR | SS_FORCE);
|
||||
kill(0, sig);
|
||||
}
|
||||
}
|
||||
@ -736,7 +731,6 @@ tty_init(int init_ttystate)
|
||||
strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
if (tfd < 0) {
|
||||
do_close = 0;
|
||||
if (isatty(0))
|
||||
@ -1113,7 +1107,7 @@ maketemp(Area *ap, Temp_type type, struct temp **tlist)
|
||||
dir = tmpdir ? tmpdir : "/tmp";
|
||||
len = strlen(dir) + 6 + 10 + 1;
|
||||
tp = (struct temp *) alloc(sizeof(struct temp) + len, ap);
|
||||
tp->name = pathname = (char *) &tp[1];
|
||||
tp->name = pathname = (char *)&tp[1];
|
||||
tp->shf = NULL;
|
||||
tp->type = type;
|
||||
shf_snprintf(pathname, len, "%s/mksh.XXXXXXXXXX", dir);
|
||||
@ -1159,28 +1153,28 @@ texpand(struct table *tp, int nsize)
|
||||
struct tbl **ntblp, **otblp = tp->tbls;
|
||||
int osize = tp->size;
|
||||
|
||||
ntblp = (struct tbl**) alloc(sizeofN(struct tbl *, nsize), tp->areap);
|
||||
ntblp = (struct tbl **)alloc(sizeofN(struct tbl *, nsize), tp->areap);
|
||||
for (i = 0; i < nsize; i++)
|
||||
ntblp[i] = NULL;
|
||||
tp->size = nsize;
|
||||
tp->nfree = 8*nsize/10; /* table can get 80% full */
|
||||
tp->nfree = 8 * nsize / 10; /* table can get 80% full */
|
||||
tp->tbls = ntblp;
|
||||
if (otblp == NULL)
|
||||
return;
|
||||
for (i = 0; i < osize; i++)
|
||||
if ((tblp = otblp[i]) != NULL) {
|
||||
if ((tblp->flag&DEFINED)) {
|
||||
if ((tblp->flag & DEFINED)) {
|
||||
for (p = &ntblp[hash(tblp->name) &
|
||||
(tp->size-1)]; *p != NULL; p--)
|
||||
(tp->size - 1)]; *p != NULL; p--)
|
||||
if (p == ntblp) /* wrap */
|
||||
p += tp->size;
|
||||
*p = tblp;
|
||||
tp->nfree--;
|
||||
} else if (!(tblp->flag & FINUSE)) {
|
||||
afree((void*)tblp, tp->areap);
|
||||
afree((void *)tblp, tp->areap);
|
||||
}
|
||||
}
|
||||
afree((void*)otblp, tp->areap);
|
||||
afree((void *)otblp, tp->areap);
|
||||
}
|
||||
|
||||
/* table */
|
||||
@ -1195,9 +1189,9 @@ tsearch(struct table *tp, const char *n, unsigned int h)
|
||||
return NULL;
|
||||
|
||||
/* search for name in hashed table */
|
||||
for (pp = &tp->tbls[h & (tp->size-1)]; (p = *pp) != NULL; pp--) {
|
||||
for (pp = &tp->tbls[h & (tp->size - 1)]; (p = *pp) != NULL; pp--) {
|
||||
if (*p->name == *n && strcmp(p->name, n) == 0 &&
|
||||
(p->flag&DEFINED))
|
||||
(p->flag & DEFINED))
|
||||
return p;
|
||||
if (pp == tp->tbls) /* wrap */
|
||||
pp += tp->size;
|
||||
@ -1217,9 +1211,9 @@ tenter(struct table *tp, const char *n, unsigned int h)
|
||||
|
||||
if (tp->size == 0)
|
||||
texpand(tp, INIT_TBLS);
|
||||
Search:
|
||||
Search:
|
||||
/* search for name in hashed table */
|
||||
for (pp = &tp->tbls[h & (tp->size-1)]; (p = *pp) != NULL; pp--) {
|
||||
for (pp = &tp->tbls[h & (tp->size - 1)]; (p = *pp) != NULL; pp--) {
|
||||
if (*p->name == *n && strcmp(p->name, n) == 0)
|
||||
return p; /* found */
|
||||
if (pp == tp->tbls) /* wrap */
|
||||
@ -1227,13 +1221,12 @@ tenter(struct table *tp, const char *n, unsigned int h)
|
||||
}
|
||||
|
||||
if (tp->nfree <= 0) { /* too full */
|
||||
texpand(tp, 2*tp->size);
|
||||
texpand(tp, 2 * tp->size);
|
||||
goto Search;
|
||||
}
|
||||
|
||||
/* create new tbl entry */
|
||||
len = strlen(n) + 1;
|
||||
p = (struct tbl *) alloc(offsetof(struct tbl, name[0]) + len,
|
||||
p = (struct tbl *)alloc(offsetof(struct tbl, name[0])+len,
|
||||
tp->areap);
|
||||
p->flag = 0;
|
||||
p->type = 0;
|
||||
@ -1266,7 +1259,7 @@ tnext(struct tstate *ts)
|
||||
{
|
||||
while (--ts->left >= 0) {
|
||||
struct tbl *p = *ts->next++;
|
||||
if (p != NULL && (p->flag&DEFINED))
|
||||
if (p != NULL && (p->flag & DEFINED))
|
||||
return p;
|
||||
}
|
||||
return NULL;
|
||||
@ -1284,15 +1277,15 @@ tsort(struct table *tp)
|
||||
int i;
|
||||
struct tbl **p, **sp, **dp;
|
||||
|
||||
p = (struct tbl **)alloc(sizeofN(struct tbl *, tp->size+1), ATEMP);
|
||||
p = (struct tbl **)alloc(sizeofN(struct tbl *, tp->size + 1), ATEMP);
|
||||
sp = tp->tbls; /* source */
|
||||
dp = p; /* dest */
|
||||
for (i = 0; i < tp->size; i++)
|
||||
if ((*dp = *sp++) != NULL && (((*dp)->flag&DEFINED) ||
|
||||
((*dp)->flag&ARRAY)))
|
||||
if ((*dp = *sp++) != NULL && (((*dp)->flag & DEFINED) ||
|
||||
((*dp)->flag & ARRAY)))
|
||||
dp++;
|
||||
i = dp - p;
|
||||
qsortp((void**)p, (size_t)i, tnamecmp);
|
||||
qsortp((void **)p, (size_t)i, tnamecmp);
|
||||
p[i] = NULL;
|
||||
return p;
|
||||
}
|
||||
|
Reference in New Issue
Block a user