* Ported to Linux's Second Extended File System as part of the
* dump and restore backup suit
* Remy Card <card@Linux.EU.Org>, 1994-1997
- * Stelian Pop <pop@noos.fr>, 1999-2000
- * Stelian Pop <pop@noos.fr> - Alcôve <www.alcove.fr>, 2000
+ * Stelian Pop <stelian@popies.net>, 1999-2000
+ * Stelian Pop <stelian@popies.net> - Alcôve <www.alcove.com>, 2000-2002
*/
/*
#ifndef lint
static const char rcsid[] =
- "$Id: interactive.c,v 1.16 2001/03/20 10:02:48 stelian Exp $";
+ "$Id: interactive.c,v 1.24 2002/06/08 07:10:37 stelian Exp $";
#endif /* not lint */
#include <config.h>
#include <sys/stat.h>
#ifdef __linux__
+#ifdef HAVE_EXT2FS_EXT2_FS_H
+#include <ext2fs/ext2_fs.h>
+#else
#include <linux/ext2_fs.h>
+#endif
#include <bsdcompat.h>
#else /* __linux__ */
#include <ufs/ufs/dinode.h>
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))
void
runcmdshell(void)
{
- register struct entry *np;
+ struct entry *np;
dump_ino_t ino;
struct arglist arglist;
char curdir[MAXPATHLEN];
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) {
goto bad;
createfiles();
createlinks();
- setdirmodes(0);
+ setdirmodes(oflag ? FORCE : 0);
if (dflag)
checkrestore();
volno = 0;
if (strncmp(cmd, "what", strlen(cmd)) != 0)
goto bad;
printdumpinfo();
+ printvolinfo();
break;
/*
* Turn on debugging.
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 */
static char *
copynext(char *input, char *output)
{
- register char *cp, *bp;
+ char *cp, *bp;
char quote;
for (cp = input; *cp == ' ' || *cp == '\t'; cp++)
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, "");
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;
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;
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))
#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;
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';
- rl_instream = terminal;
-}
-
-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;
}
static char *
-filename_generator(char *text, int state)
+filename_generator(const char *text, int state)
{
static int list_index;
char *name;
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 */