X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=restore%2Finteractive.c;h=1f00b2a022ebb43b60a02343835fd7f2e717a9f8;hb=ed7c25a371480f96746518a4c4d4bb932ae16b77;hp=d8854c663e84523364ddb21df32b52b82e051ae6;hpb=c38e5b6a9c658f06d9b27f33e9db131ffa23d947;p=dump.git diff --git a/restore/interactive.c b/restore/interactive.c index d8854c6..1f00b2a 100644 --- a/restore/interactive.c +++ b/restore/interactive.c @@ -2,7 +2,8 @@ * Ported to Linux's Second Extended File System as part of the * dump and restore backup suit * Remy Card , 1994-1997 - * Stelian Pop , 1999-2000 + * Stelian Pop , 1999-2000 + * Stelian Pop - AlcĂ´ve , 2000-2002 */ /* @@ -40,14 +41,19 @@ #ifndef lint static const char rcsid[] = - "$Id: interactive.c,v 1.11 2000/05/29 14:17:37 stelian Exp $"; + "$Id: interactive.c,v 1.24 2002/06/08 07:10:37 stelian Exp $"; #endif /* not lint */ +#include #include #include #ifdef __linux__ +#ifdef HAVE_EXT2FS_EXT2_FS_H +#include +#else #include +#endif #include #else /* __linux__ */ #include @@ -77,9 +83,9 @@ extern char * __progname; static char *rl_gets (char *prompt); static void initialize_readline(void); -static char **restore_completion (char *text, int start, int end); -static char *command_generator(char *text, int state); -static char *filename_generator(char *text, int state); +static char **restore_completion (const char *text, int start, int end); +static char *command_generator(const char *text, int state); +static char *filename_generator(const char *text, int state); #endif #define round(a, b) (((a) + (b) - 1) / (b) * (b)) @@ -95,7 +101,7 @@ static int pflag = 0; /* prompt mode */ * Structure and routines associated with listing directories. */ struct afile { - ino_t fnum; /* inode number of file */ + dump_ino_t fnum; /* inode number of file */ char *fname; /* file name */ short len; /* name length */ char prefix; /* prefix character */ @@ -123,8 +129,8 @@ static void printlist __P((char *, char *)); void runcmdshell(void) { - register struct entry *np; - ino_t ino; + struct entry *np; + dump_ino_t ino; struct arglist arglist; char curdir[MAXPATHLEN]; char name[MAXPATHLEN]; @@ -139,8 +145,8 @@ runcmdshell(void) arglist.glob.gl_opendir = (void *)rst_opendir; arglist.glob.gl_readdir = (void *)glob_readdir; arglist.glob.gl_closedir = (void *)rst_closedir; - arglist.glob.gl_lstat = glob_stat; - arglist.glob.gl_stat = glob_stat; + arglist.glob.gl_lstat = (int (*)(const char *, void *))glob_stat; + arglist.glob.gl_stat = (int (*)(const char *, void *))glob_stat; canon("/", curdir, sizeof(curdir)); loop: if (setjmp(reset) != 0) { @@ -205,7 +211,7 @@ loop: goto bad; createfiles(); createlinks(); - setdirmodes(0); + setdirmodes(oflag ? FORCE : 0); if (dflag) checkrestore(); volno = 0; @@ -310,6 +316,7 @@ loop: if (strncmp(cmd, "what", strlen(cmd)) != 0) goto bad; printdumpinfo(); + printvolinfo(); break; /* * Turn on debugging. @@ -350,7 +357,7 @@ loop: static void getcmd(char *curdir, char *cmd, char *name, int size, struct arglist *ap) { - register char *cp; + char *cp; static char input[BUFSIZ]; char output[BUFSIZ]; # define rawname input /* save space by reusing input buffer */ @@ -446,7 +453,7 @@ retnext: static char * copynext(char *input, char *output) { - register char *cp, *bp; + char *cp, *bp; char quote; for (cp = input; *cp == ' ' || *cp == '\t'; cp++) @@ -495,7 +502,7 @@ copynext(char *input, char *output) void canon(char *rawname, char *canonname, int len) { - register char *cp, *np; + char *cp, *np; if (strcmp(rawname, ".") == 0 || strncmp(rawname, "./", 2) == 0) (void) strcpy(canonname, ""); @@ -547,8 +554,8 @@ canon(char *rawname, char *canonname, int len) static void printlist(char *name, char *basename) { - register struct afile *fp, *list, *listp = NULL; - register struct direct *dp; + struct afile *fp, *list, *listp = NULL; + struct direct *dp; struct afile single; RST_DIR *dirp; int entries, len, namelen; @@ -692,7 +699,7 @@ mkentry(char *name, struct direct *dp, struct afile *fp) static void formatf(struct afile *list, int nentry) { - register struct afile *fp, *endlist; + struct afile *fp, *endlist; int width, bigino, haveprefix, havepostfix; int i, j, w, precision = 0, columns, lines; @@ -789,7 +796,7 @@ glob_readdir(RST_DIR *dirp) static int glob_stat(const char *name, struct stat *stp) { - register struct direct *dp; + struct direct *dp; dp = pathsearch(name); if (dp == NULL || (!dflag && TSTINO(dp->d_ino, dumpmap) == 0) || (!vflag && dp->d_ino == WINO)) @@ -829,6 +836,10 @@ onintr(int signo) #if HAVE_READLINE +#if !HAVE_READLINE_RLCM +#define rl_completion_matches completion_matches +#endif + /* A static variable for holding the line. */ static char *line_read = NULL; @@ -891,29 +902,8 @@ rl_gets (char *dir) return (line_read); } -static void -initialize_readline(void) -{ - rl_attempted_completion_function = restore_completion; - rl_completion_entry_function = (Function *)NULL; - rl_completion_append_character = '\0'; -} - -static char ** -restore_completion (char *text, int start, int end) -{ - char **matches; - - if (start == 0) - matches = completion_matches (text, command_generator); - else - matches = completion_matches (text, filename_generator); - - return (matches); -} - static char * -command_generator(char *text, int state) +command_generator(const char *text, int state) { static int list_index, len; char *name; @@ -935,7 +925,7 @@ command_generator(char *text, int state) } static char * -filename_generator(char *text, int state) +filename_generator(const char *text, int state) { static int list_index; char *name; @@ -1018,4 +1008,30 @@ filename_generator(char *text, int state) return name; } + +static char ** +restore_completion (const char *text, int start, int end) +{ + char **matches; + + if (start == 0) + matches = rl_completion_matches (text, command_generator); + else + matches = rl_completion_matches (text, filename_generator); + + return (matches); +} + +static void +initialize_readline(void) +{ + rl_readline_name = "dump"; + rl_attempted_completion_function = restore_completion; + rl_completion_entry_function = NULL; +#if HAVE_READLINE_CAC /* compile with readline 2.0 */ + rl_completion_append_character = '\0'; +#endif + rl_instream = terminal; +} + #endif /* HAVE_READLINE */