More build fixes, some code cleanup and untabify.

This commit is contained in:
Joachim Nilsson 2008-12-02 21:58:55 +01:00
parent 77d483da02
commit 6d8d857dd4
5 changed files with 937 additions and 1057 deletions

View File

@ -4,8 +4,8 @@
/* Assign these to get command completion, see cli.c for /* Assign these to get command completion, see cli.c for
* example usage. */ * example usage. */
char *(*rl_complete)(char *token, int *match); extern char *(*rl_complete)(char *token, int *match);
int (*rl_list_possib)(char *token, char ***av); extern int (*rl_list_possib)(char *token, char ***av);
/* /*
** For compatibility with FSF readline. ** For compatibility with FSF readline.

View File

@ -5,32 +5,32 @@
#include "editline.h" #include "editline.h"
#if defined(NEED_STRDUP) #if defined(NEED_STRDUP)
/* /*
** Return an allocated copy of a string. ** Return an allocated copy of a string.
*/ */
char * char *
strdup(p) strdup(p)
char *p; char *p;
{ {
char *new; char *new;
if ((new = NEW(char, strlen(p) + 1)) != NULL) if ((new = NEW(char, strlen(p) + 1)) != NULL)
(void)strcpy(new, p); (void)strcpy(new, p);
return new; return new;
} }
#endif /* defined(NEED_STRDUP) */ #endif /* defined(NEED_STRDUP) */
/* /*
** strcmp-like sorting predicate for qsort. ** strcmp-like sorting predicate for qsort.
*/ */
STATIC int static int
compare(p1, p2) compare(p1, p2)
CONST void *p1; CONST void *p1;
CONST void *p2; CONST void *p2;
{ {
CONST char **v1; CONST char **v1;
CONST char **v2; CONST char **v2;
v1 = (CONST char **)p1; v1 = (CONST char **)p1;
v2 = (CONST char **)p2; v2 = (CONST char **)p2;
@ -41,25 +41,25 @@ compare(p1, p2)
** Fill in *avp with an array of names that match file, up to its length. ** Fill in *avp with an array of names that match file, up to its length.
** Ignore . and .. . ** Ignore . and .. .
*/ */
STATIC int static int
FindMatches(dir, file, avp) FindMatches(dir, file, avp)
char *dir; char *dir;
char *file; char *file;
char ***avp; char ***avp;
{ {
char **av; char **av;
char **new; char **new;
char *p; char *p;
DIR *dp; DIR *dp;
DIRENTRY *ep; DIRENTRY *ep;
SIZE_T ac; SIZE_T ac;
SIZE_T len; SIZE_T len;
SIZE_T choices; SIZE_T choices;
SIZE_T total; SIZE_T total;
#define MAX_TOTAL (256 << sizeof(char *)) #define MAX_TOTAL (256 << sizeof(char *))
if ((dp = opendir(dir)) == NULL) if ((dp = opendir(dir)) == NULL)
return 0; return 0;
av = NULL; av = NULL;
ac = 0; ac = 0;
@ -67,56 +67,56 @@ FindMatches(dir, file, avp)
choices = 0; choices = 0;
total = 0; total = 0;
while ((ep = readdir(dp)) != NULL) { while ((ep = readdir(dp)) != NULL) {
p = ep->d_name; p = ep->d_name;
if (p[0] == '.' && (p[1] == '\0' || (p[1] == '.' && p[2] == '\0'))) if (p[0] == '.' && (p[1] == '\0' || (p[1] == '.' && p[2] == '\0')))
continue; continue;
if (len && strncmp(p, file, len) != 0) if (len && strncmp(p, file, len) != 0)
continue; continue;
choices++; choices++;
if ((total += strlen(p)) > MAX_TOTAL) { if ((total += strlen(p)) > MAX_TOTAL) {
/* This is a bit too much. */ /* This is a bit too much. */
while (ac > 0) DISPOSE(av[--ac]); while (ac > 0) DISPOSE(av[--ac]);
continue; continue;
} }
if ((ac % MEM_INC) == 0) { if ((ac % MEM_INC) == 0) {
if ((new = NEW(char*, ac + MEM_INC)) == NULL) { if ((new = NEW(char*, ac + MEM_INC)) == NULL) {
total = 0; total = 0;
break; break;
} }
if (ac) { if (ac) {
COPYFROMTO(new, av, ac * sizeof (char **)); COPYFROMTO(new, av, ac * sizeof (char **));
DISPOSE(av); DISPOSE(av);
} }
*avp = av = new; *avp = av = new;
} }
if ((av[ac] = strdup(p)) == NULL) { if ((av[ac] = strdup(p)) == NULL) {
if (ac == 0) if (ac == 0)
DISPOSE(av); DISPOSE(av);
total = 0; total = 0;
break; break;
} }
ac++; ac++;
} }
/* Clean up and return. */ /* Clean up and return. */
(void)closedir(dp); (void)closedir(dp);
if (total > MAX_TOTAL) { if (total > MAX_TOTAL) {
char many[sizeof(total) * 3]; char many[sizeof(total) * 3];
p = many + sizeof(many); p = many + sizeof(many);
*--p = '\0'; *--p = '\0';
while (choices > 0) { while (choices > 0) {
*--p = '0' + choices % 10; *--p = '0' + choices % 10;
choices /= 10; choices /= 10;
} }
while (p > many + sizeof(many) - 8) *--p = ' '; while (p > many + sizeof(many) - 8) *--p = ' ';
if ((p = strdup(p)) != NULL) av[ac++] = p; if ((p = strdup(p)) != NULL) av[ac++] = p;
if ((p = strdup("choices")) != NULL) av[ac++] = p; if ((p = strdup("choices")) != NULL) av[ac++] = p;
} else { } else {
if (ac) if (ac)
qsort(av, ac, sizeof (char **), compare); qsort(av, ac, sizeof (char **), compare);
} }
return ac; return ac;
} }
@ -124,32 +124,32 @@ FindMatches(dir, file, avp)
/* /*
** Split a pathname into allocated directory and trailing filename parts. ** Split a pathname into allocated directory and trailing filename parts.
*/ */
STATIC int static int
SplitPath(path, dirpart, filepart) SplitPath(path, dirpart, filepart)
char *path; char *path;
char **dirpart; char **dirpart;
char **filepart; char **filepart;
{ {
static char DOT[] = "."; static char DOT[] = ".";
char *dpart; char *dpart;
char *fpart; char *fpart;
if ((fpart = strrchr(path, '/')) == NULL) { if ((fpart = strrchr(path, '/')) == NULL) {
if ((dpart = strdup(DOT)) == NULL) if ((dpart = strdup(DOT)) == NULL)
return -1; return -1;
if ((fpart = strdup(path)) == NULL) { if ((fpart = strdup(path)) == NULL) {
DISPOSE(dpart); DISPOSE(dpart);
return -1; return -1;
} }
} }
else { else {
if ((dpart = strdup(path)) == NULL) if ((dpart = strdup(path)) == NULL)
return -1; return -1;
dpart[fpart - path + 1] = '\0'; dpart[fpart - path + 1] = '\0';
if ((fpart = strdup(++fpart)) == NULL) { if ((fpart = strdup(++fpart)) == NULL) {
DISPOSE(dpart); DISPOSE(dpart);
return -1; return -1;
} }
} }
*dirpart = dpart; *dirpart = dpart;
*filepart = fpart; *filepart = fpart;
@ -162,69 +162,69 @@ SplitPath(path, dirpart, filepart)
*/ */
char * char *
default_rl_complete(pathname, unique) default_rl_complete(pathname, unique)
char *pathname; char *pathname;
int *unique; int *unique;
{ {
char **av; char **av;
char *dir; char *dir;
char *file; char *file;
char *new; char *new;
char *p; char *p;
SIZE_T ac; SIZE_T ac;
SIZE_T end; SIZE_T end;
SIZE_T i; SIZE_T i;
SIZE_T j; SIZE_T j;
SIZE_T len; SIZE_T len;
if (SplitPath(pathname, &dir, &file) < 0) if (SplitPath(pathname, &dir, &file) < 0)
return NULL; return NULL;
if ((ac = FindMatches(dir, file, &av)) == 0) { if ((ac = FindMatches(dir, file, &av)) == 0) {
DISPOSE(dir); DISPOSE(dir);
DISPOSE(file); DISPOSE(file);
return NULL; return NULL;
} }
p = NULL; p = NULL;
len = strlen(file); len = strlen(file);
if (ac == 1) { if (ac == 1) {
/* Exactly one match -- finish it off. */ /* Exactly one match -- finish it off. */
*unique = 1; *unique = 1;
j = strlen(av[0]) - len + 2; j = strlen(av[0]) - len + 2;
if ((p = NEW(char, j + 1)) != NULL) { if ((p = NEW(char, j + 1)) != NULL) {
COPYFROMTO(p, av[0] + len, j); COPYFROMTO(p, av[0] + len, j);
if ((new = NEW(char, strlen(dir) + strlen(av[0]) + 2)) != NULL) { if ((new = NEW(char, strlen(dir) + strlen(av[0]) + 2)) != NULL) {
(void)strcpy(new, dir); (void)strcpy(new, dir);
(void)strcat(new, "/"); (void)strcat(new, "/");
(void)strcat(new, av[0]); (void)strcat(new, av[0]);
rl_add_slash(new, p); rl_add_slash(new, p);
DISPOSE(new); DISPOSE(new);
} }
} }
} }
else { else {
*unique = 0; *unique = 0;
if (len) { if (len) {
/* Find largest matching substring. */ /* Find largest matching substring. */
for (i = len, end = strlen(av[0]); i < end; i++) for (i = len, end = strlen(av[0]); i < end; i++)
for (j = 1; j < ac; j++) for (j = 1; j < ac; j++)
if (av[0][i] != av[j][i]) if (av[0][i] != av[j][i])
goto breakout; goto breakout;
breakout: breakout:
if (i > len) { if (i > len) {
j = i - len + 1; j = i - len + 1;
if ((p = NEW(char, j)) != NULL) { if ((p = NEW(char, j)) != NULL) {
COPYFROMTO(p, av[0] + len, j); COPYFROMTO(p, av[0] + len, j);
p[j - 1] = '\0'; p[j - 1] = '\0';
} }
} }
} }
} }
/* Clean up and return. */ /* Clean up and return. */
DISPOSE(dir); DISPOSE(dir);
DISPOSE(file); DISPOSE(file);
for (i = 0; i < ac; i++) for (i = 0; i < ac; i++)
DISPOSE(av[i]); DISPOSE(av[i]);
DISPOSE(av); DISPOSE(av);
return p; return p;
} }
@ -234,15 +234,15 @@ default_rl_complete(pathname, unique)
*/ */
int int
default_rl_list_possib(pathname, avp) default_rl_list_possib(pathname, avp)
char *pathname; char *pathname;
char ***avp; char ***avp;
{ {
char *dir; char *dir;
char *file; char *file;
int ac; int ac;
if (SplitPath(pathname, &dir, &file) < 0) if (SplitPath(pathname, &dir, &file) < 0)
return 0; return 0;
ac = FindMatches(dir, file, avp); ac = FindMatches(dir, file, avp);
DISPOSE(dir); DISPOSE(dir);
DISPOSE(file); DISPOSE(file);

File diff suppressed because it is too large Load Diff

View File

@ -35,21 +35,6 @@
typedef unsigned char CHAR; typedef unsigned char CHAR;
#if defined(HIDE)
#define STATIC static
#else
#define STATIC /* NULL */
#endif /* !defined(HIDE) */
#if !defined(CONST)
#if defined(__STDC__)
#define CONST const
#else
#define CONST
#endif /* defined(__STDC__) */
#endif /* !defined(CONST) */
#define MEM_INC 64 #define MEM_INC 64
#define SCREEN_INC 256 #define SCREEN_INC 256

View File

@ -4,69 +4,69 @@
*/ */
#include "editline.h" #include "editline.h"
#if defined(HAVE_TCGETATTR) #if defined(HAVE_TCGETATTR)
#include <termios.h> #include <termios.h>
void void
rl_ttyset(Reset) rl_ttyset(Reset)
int Reset; int Reset;
{ {
static struct termios old; static struct termios old;
struct termios new; struct termios new;
if (Reset == 0) { if (Reset == 0) {
if (tcgetattr(0, &old) < 0) perror("tcgetattr"); if (tcgetattr(0, &old) < 0) perror("tcgetattr");
rl_erase = old.c_cc[VERASE]; rl_erase = old.c_cc[VERASE];
rl_kill = old.c_cc[VKILL]; rl_kill = old.c_cc[VKILL];
rl_eof = old.c_cc[VEOF]; rl_eof = old.c_cc[VEOF];
rl_intr = old.c_cc[VINTR]; rl_intr = old.c_cc[VINTR];
rl_quit = old.c_cc[VQUIT]; rl_quit = old.c_cc[VQUIT];
#if defined(DO_SIGTSTP) #if defined(DO_SIGTSTP)
rl_susp = old.c_cc[VSUSP]; rl_susp = old.c_cc[VSUSP];
#endif /* defined(DO_SIGTSTP) */ #endif /* defined(DO_SIGTSTP) */
new = old; new = old;
new.c_lflag &= ~(ECHO | ICANON | ISIG); new.c_lflag &= ~(ECHO | ICANON | ISIG);
new.c_iflag &= ~(ISTRIP | INPCK); new.c_iflag &= ~(ISTRIP | INPCK);
new.c_cc[VMIN] = 1; new.c_cc[VMIN] = 1;
new.c_cc[VTIME] = 0; new.c_cc[VTIME] = 0;
if (tcsetattr(0, TCSADRAIN, &new) < 0) perror("tcsetattr"); if (tcsetattr(0, TCSADRAIN, &new) < 0) perror("tcsetattr");
} }
else else
(void)tcsetattr(0, TCSADRAIN, &old); (void)tcsetattr(0, TCSADRAIN, &old);
} }
#else #else
#if defined(HAVE_TERMIO_H) #if defined(HAVE_TERMIO_H)
#include <termio.h> #include <termio.h>
void void
rl_ttyset(Reset) rl_ttyset(Reset)
int Reset; int Reset;
{ {
static struct termio old; static struct termio old;
struct termio new; struct termio new;
if (Reset == 0) { if (Reset == 0) {
(void)ioctl(0, TCGETA, &old); (void)ioctl(0, TCGETA, &old);
rl_erase = old.c_cc[VERASE]; rl_erase = old.c_cc[VERASE];
rl_kill = old.c_cc[VKILL]; rl_kill = old.c_cc[VKILL];
rl_eof = old.c_cc[VEOF]; rl_eof = old.c_cc[VEOF];
rl_intr = old.c_cc[VINTR]; rl_intr = old.c_cc[VINTR];
rl_quit = old.c_cc[VQUIT]; rl_quit = old.c_cc[VQUIT];
#if defined(DO_SIGTSTP) #if defined(DO_SIGTSTP)
rl_susp = old.c_cc[VSUSP]; rl_susp = old.c_cc[VSUSP];
#endif /* defined(DO_SIGTSTP) */ #endif /* defined(DO_SIGTSTP) */
new = old; new = old;
new.c_lflag &= ~(ECHO | ICANON | ISIG); new.c_lflag &= ~(ECHO | ICANON | ISIG);
new.c_iflag &= ~(ISTRIP | INPCK); new.c_iflag &= ~(ISTRIP | INPCK);
new.c_cc[VMIN] = 1; new.c_cc[VMIN] = 1;
new.c_cc[VTIME] = 0; new.c_cc[VTIME] = 0;
(void)ioctl(0, TCSETAW, &new); (void)ioctl(0, TCSETAW, &new);
} }
else else
(void)ioctl(0, TCSETAW, &old); (void)ioctl(0, TCSETAW, &old);
} }
#else #else
@ -74,61 +74,61 @@ rl_ttyset(Reset)
void void
rl_ttyset(Reset) rl_ttyset(Reset)
int Reset; int Reset;
{ {
static struct sgttyb old_sgttyb; static struct sgttyb old_sgttyb;
static struct tchars old_tchars; static struct tchars old_tchars;
struct sgttyb new_sgttyb; struct sgttyb new_sgttyb;
struct tchars new_tchars; struct tchars new_tchars;
#if defined(DO_SIGTSTP) #if defined(DO_SIGTSTP)
struct ltchars old_ltchars; struct ltchars old_ltchars;
#endif /* defined(DO_SIGTSTP) */ #endif /* defined(DO_SIGTSTP) */
if (Reset == 0) { if (Reset == 0) {
(void)ioctl(0, TIOCGETP, &old_sgttyb); (void)ioctl(0, TIOCGETP, &old_sgttyb);
rl_erase = old_sgttyb.sg_erase; rl_erase = old_sgttyb.sg_erase;
rl_kill = old_sgttyb.sg_kill; rl_kill = old_sgttyb.sg_kill;
(void)ioctl(0, TIOCGETC, &old_tchars); (void)ioctl(0, TIOCGETC, &old_tchars);
rl_eof = old_tchars.t_eofc; rl_eof = old_tchars.t_eofc;
rl_intr = old_tchars.t_intrc; rl_intr = old_tchars.t_intrc;
rl_quit = old_tchars.t_quitc; rl_quit = old_tchars.t_quitc;
#if defined(DO_SIGTSTP) #if defined(DO_SIGTSTP)
(void)ioctl(0, TIOCGLTC, &old_ltchars); (void)ioctl(0, TIOCGLTC, &old_ltchars);
rl_susp = old_ltchars.t_suspc; rl_susp = old_ltchars.t_suspc;
#endif /* defined(DO_SIGTSTP) */ #endif /* defined(DO_SIGTSTP) */
new_sgttyb = old_sgttyb; new_sgttyb = old_sgttyb;
new_sgttyb.sg_flags &= ~ECHO; new_sgttyb.sg_flags &= ~ECHO;
new_sgttyb.sg_flags |= RAW; new_sgttyb.sg_flags |= RAW;
#if defined(PASS8) #if defined(PASS8)
new_sgttyb.sg_flags |= PASS8; new_sgttyb.sg_flags |= PASS8;
#endif /* defined(PASS8) */ #endif /* defined(PASS8) */
(void)ioctl(0, TIOCSETP, &new_sgttyb); (void)ioctl(0, TIOCSETP, &new_sgttyb);
new_tchars = old_tchars; new_tchars = old_tchars;
new_tchars.t_intrc = -1; new_tchars.t_intrc = -1;
new_tchars.t_quitc = -1; new_tchars.t_quitc = -1;
(void)ioctl(0, TIOCSETC, &new_tchars); (void)ioctl(0, TIOCSETC, &new_tchars);
} }
else { else {
(void)ioctl(0, TIOCSETP, &old_sgttyb); (void)ioctl(0, TIOCSETP, &old_sgttyb);
(void)ioctl(0, TIOCSETC, &old_tchars); (void)ioctl(0, TIOCSETC, &old_tchars);
} }
} }
#endif /* defined(HAVE_TERMIO_H) */ #endif /* defined(HAVE_TERMIO_H) */
#endif /* defined(HAVE_TCGETATTR) */ #endif /* defined(HAVE_TCGETATTR) */
void void
rl_add_slash(path, p) rl_add_slash(path, p)
char *path; char *path;
char *p; char *p;
{ {
struct stat Sb; struct stat Sb;
if (stat(path, &Sb) >= 0) if (stat(path, &Sb) >= 0)
(void)strcat(p, S_ISDIR(Sb.st_mode) ? "/" : " "); (void)strcat(p, S_ISDIR(Sb.st_mode) ? "/" : " ");
} }
/* /*