diff options
author | Erik Troan <ewt@redhat.com> | 2000-05-30 21:38:15 +0000 |
---|---|---|
committer | Erik Troan <ewt@redhat.com> | 2000-05-30 21:38:15 +0000 |
commit | 4a7c9c2e1d4c38f3d1618badf24ed04ce12e8d3d (patch) | |
tree | a9b12e10e4a5fd662f5a4cf623f588ae215fdd83 | |
parent | 8b8cac329eeb9c7ce6f8a4a9ac63f47f20e37c5a (diff) | |
download | anaconda-4a7c9c2e1d4c38f3d1618badf24ed04ce12e8d3d.tar.gz anaconda-4a7c9c2e1d4c38f3d1618badf24ed04ce12e8d3d.tar.xz anaconda-4a7c9c2e1d4c38f3d1618badf24ed04ce12e8d3d.zip |
1) added chroot
2) cleaned up error reporting for mount
3) fixed misc build complaints
-rw-r--r-- | collage/collage.c | 1 | ||||
-rw-r--r-- | collage/commands.c | 32 | ||||
-rw-r--r-- | collage/commands.h | 1 |
3 files changed, 30 insertions, 4 deletions
diff --git a/collage/collage.c b/collage/collage.c index 40d11dde3..25f367cbb 100644 --- a/collage/collage.c +++ b/collage/collage.c @@ -11,6 +11,7 @@ struct commandTableEntry { struct commandTableEntry commandTable[] = { { "cat", catCommand }, { "chmod", chmodCommand }, + { "chroot", chrootCommand }, { "df", dfCommand }, { "gunzip", gunzipCommand }, { "ln", lnCommand }, diff --git a/collage/commands.c b/collage/commands.c index 810c4a162..c27fae26c 100644 --- a/collage/commands.c +++ b/collage/commands.c @@ -122,7 +122,7 @@ int mountCommand(int argc, char ** argv) { } if (doPwMount(dev, dir, fs, 0, 1, NULL, NULL)) { - fprintf(strerror, "mount failed: %s\n", strerror(errno)); + fprintf(stderr, "mount failed: %s\n", strerror(errno)); return 1; } @@ -280,6 +280,30 @@ int rmCommand(int argc, char ** argv) { return 0; } +int chrootCommand(int argc, char ** argv) { + char * defaultCommand[] = { "/bin/sh", NULL }; + char ** command = defaultCommand; + + if (argc < 2) { + fprintf(stderr, "usage: chroot <dir> [<cmd>...]\n"); + return 1; + } + + if (chroot(argv[1])) { + fprintf(stderr, "chroot failed: %s\n", strerror(errno)); + return 1; + } + + if (argc > 2) + command = argv + 2; + + execvp(command[0], command); + + fprintf(stderr, "exec failed: %s\n", strerror(errno)); + + return 1; +} + int chmodCommand(int argc, char ** argv) { char ** argptr = argv + 2; int mode; @@ -366,7 +390,7 @@ int dfCommand(int argc, char ** argv) { badjust = fs.f_bsize / 1024; - printf("%-30s %-10d %-10d %-10d\n", + printf("%-30s %-10ld %-10ld %-10ld\n", buf, fs.f_blocks * badjust, (fs.f_blocks - fs.f_bfree) * badjust, fs.f_bfree * badjust); @@ -400,7 +424,7 @@ int lsCommand(int argc, char ** argv) { { NULL, '\0', 0, NULL, '\0' } }; - optCon = poptGetContext(NULL, argc, argv, ksOptions, 0); + optCon = poptGetContext(NULL, argc, (const char **) argv, ksOptions, 0); if (isatty(1)) flags |= SENDDIR_MULTICOLUMN; while ((rc = poptGetNextOpt(optCon)) >= 0) { @@ -434,7 +458,7 @@ int lsCommand(int argc, char ** argv) { } else { idInit(); - argv = poptGetArgs(optCon); + argv = (char **) poptGetArgs(optCon); if (argv) { while (*argv) { if (argv[0][0] == '/') diff --git a/collage/commands.h b/collage/commands.h index 46ed53fd6..817b6f81c 100644 --- a/collage/commands.h +++ b/collage/commands.h @@ -3,6 +3,7 @@ int catCommand(int argc, char ** argv); int chmodCommand(int argc, char ** argv); +int chrootCommand(int argc, char ** argv); int dfCommand(int argc, char ** argv); int gunzipCommand(int argc, char ** argv); int lnCommand(int argc, char ** argv); |