summaryrefslogtreecommitdiff
path: root/sys-fs/e2fsprogs/files/fsck_ext2fs.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys-fs/e2fsprogs/files/fsck_ext2fs.c')
-rw-r--r--sys-fs/e2fsprogs/files/fsck_ext2fs.c147
1 files changed, 0 insertions, 147 deletions
diff --git a/sys-fs/e2fsprogs/files/fsck_ext2fs.c b/sys-fs/e2fsprogs/files/fsck_ext2fs.c
deleted file mode 100644
index f5e3e5e9a8c9..000000000000
--- a/sys-fs/e2fsprogs/files/fsck_ext2fs.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * fsck_ext2fs - wrapper for e2fsck on FreeBSD
- * Copyright (C) 2004,2006 Matthias Andree <matthias.andree@gmx.de>
- * redistributable in accordance with the
- * GNU General Public License v2
- *
- * $FreeBSD: ports/sysutils/e2fsprogs/files/fsck_ext2fs.c,v 1.5 2006/07/04 15:47:51 leeym Exp $
- *
- * Upstream: $Id: fsck_ext2fs.c,v 1.6 2006/07/02 11:37:49 emma Exp $
- *
- * format: gindent -kr
- */
-
-#include <sys/types.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/wait.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <errno.h>
-
-__attribute__ ((noreturn))
-static int die(const char *tag)
-{
- perror(tag);
- exit(EXIT_FAILURE);
-}
-
-int main(int argc, char **argv)
-{
- int ch, i = 1, force = 0, status, verbose = 0, t;
- long block = 0;
- enum { normal, preen, yes, no } mode = normal;
- char *cmd[256];
- pid_t pid;
-
- cmd[0] = "/sbin/e2fsck";
- while ((ch = getopt(argc, argv, "BFpfnyb:v")) != -1) {
- switch (ch) {
- case 'p':
- mode = preen;
- break;
- case 'f':
- force = 1;
- break;
- case 'n':
- mode = no;
- break;
- case 'y':
- mode = yes;
- break;
- case 'b':
- block = atol(optarg);
- break;
- case 'v':
- verbose++;
- break;
- case 'F':
- /* e2fsck does not support background checking,
- * hence exit with nonzero status to force
- * the foreground check. */
- exit(1);
- case 'B':
- default:
- fprintf(stderr, "%s: unknown option -%c\n",
- argv[0], optopt);
- exit(EXIT_FAILURE);
- }
- }
-
- if (force)
- cmd[i++] = "-f";
-
- switch (mode) {
- case normal:
- /* FreeBSD needs -f to force a check only in context
- * with -p -- so map normal to force to match
- * expectations */
- if (!force)
- cmd[i++] = "-f";
- break;
- case yes:
- cmd[i++] = "-y";
- break;
- case no:
- cmd[i++] = "-n";
- break;
- case preen:
- cmd[i++] = "-p";
- break;
- }
-
- if (block) {
- static char b[30];
-
- sprintf(b, "-b %ld", block);
- cmd[i++] = b;
- }
-
- /* silently limit verbose to 15 so we don't overflow the cmd array */
- if (verbose > 15)
- verbose = 15;
-
- for (t = verbose; t > 1; t--)
- cmd[i++] = "-v";
-
- while (optind < argc) {
- cmd[i++] = argv[optind++];
- /* sanity check so we don't overflow the cmd buffer */
- if (i+1 == sizeof(cmd)/sizeof(cmd[0])) {
- errno = E2BIG;
- die(argv[0]);
- }
- }
-
- cmd[i++] = 0;
-
- if (verbose) {
- for (i=0; cmd[i]; i++)
- fputs(cmd[i], stderr),
- fputc(' ', stderr);
- fputc('\n', stderr);
- }
-
- pid = fork();
- switch (pid) {
- case -1:
- /* error */
- die("fork");
- break;
- case 0:
- /* child */
- (void) execv(cmd[0], cmd);
- perror("execve");
- _exit(127);
- default:
- /* parent */
- if (pid != waitpid(pid, &status, 0))
- die("waitpid");
- if (WIFSIGNALED(status)
- || (WIFEXITED(status) && WEXITSTATUS(status) >= 4))
- exit(EXIT_FAILURE);
- }
- exit(EXIT_SUCCESS);
-}