+/* vi: set sw=4 ts=4: */
/*
* util.c --- helper functions used by tune2fs and mke2fs
- *
+ *
* Copyright 1995, 1996, 1997, 1998, 1999, 2000 by Theodore Ts'o.
*
* %Begin-Header%
void check_plausibility(const char *device, int force)
{
int val;
-#ifdef CONFIG_LFS
- struct stat64 s;
- val = stat64(device, &s);
-#else
struct stat s;
val = stat(device, &s);
-#endif
if (force)
return;
if(val == -1)
- bb_perror_msg_and_die("Could not stat %s", device);
+ bb_perror_msg_and_die("cannot stat %s", device);
if (!S_ISBLK(s.st_mode)) {
printf("%s is not a block special device.\n", device);
proceed_question();
retval = ext2fs_check_if_mounted(device, &mount_flags);
if (retval) {
- bb_error_msg("Could not determine if %s is mounted", device);
+ bb_error_msg("cannot determine if %s is mounted", device);
return;
}
- if (!(mount_flags & EXT2_MF_MOUNTED))
- return;
+ if (mount_flags & EXT2_MF_MOUNTED) {
+ bb_error_msg("%s is mounted !", device);
+force_check:
+ if (force)
+ bb_error_msg("badblocks forced anyways");
+ else
+ bb_error_msg_and_die("it's not safe to run badblocks!");
+ }
+
+ if (mount_flags & EXT2_MF_BUSY) {
+ bb_error_msg("%s is apparently in use by the system", device);
+ goto force_check;
+ }
- bb_error_msg("%s is mounted !", device);
- if (force)
- bb_error_msg("forcing anyways and ignoring /etc/mtab status");
- else
- bb_error_msg_and_die("will not make a %s here!", type);
}
-void parse_journal_opts(char **journal_device, int *journal_flags,
- int *journal_size, const char *opts)
+void parse_journal_opts(char **journal_device, int *journal_flags,
+ int *journal_size, const char *opts)
{
char *buf, *token, *next, *p, *arg;
int journal_usage = 0;
-#if 0
- int len;
- len = strlen(opts);
- buf = xmalloc(len+1);
- strcpy(buf, opts);
-#else
- buf = bb_xstrdup(opts);
-#endif
+ buf = xstrdup(opts);
for (token = buf; token && *token; token = next) {
p = strchr(token, ',');
next = 0;
if (p) {
*p = 0;
next = p+1;
- }
+ }
arg = strchr(token, '=');
if (arg) {
*arg = 0;
"\tdevice=<journal device>\n\n"
"The journal size must be between "
"1024 and 102400 filesystem blocks.\n\n");
-}
+}
/*
* Determine the number of journal blocks to use, either via
* user-specified # of megabytes, or via some intelligently selected
* defaults.
- *
+ *
* Find a reasonable journal file size (in blocks) given the number of blocks
* in the filesystem. For very small filesystems, it is not reasonable to
* have a journal that fills more than half of the filesystem.
if (fs->super->s_blocks_count < 32768)
j_blocks = 1024;
- else if (fs->super->s_blocks_count < 262144)
+ else if (fs->super->s_blocks_count < 256*1024)
j_blocks = 4096;
- else
+ else if (fs->super->s_blocks_count < 512*1024)
j_blocks = 8192;
+ else if (fs->super->s_blocks_count < 1024*1024)
+ j_blocks = 16384;
+ else
+ j_blocks = 32768;
return j_blocks;
}
io_manager io_ptr;
check_plausibility(journal_device, force);
- check_mount(journal_device, force, "journal");
- io_ptr = unix_io_manager;
+ check_mount(journal_device, force, "journal");
+ io_ptr = unix_io_manager;
retval = ext2fs_open(journal_device, EXT2_FLAG_RW|
EXT2_FLAG_JOURNAL_DEV_OK, 0,
fs->blocksize, io_ptr, &jfs);
if (retval)
- bb_error_msg_and_die("Could not journal device %s", journal_device);
+ bb_error_msg_and_die("cannot journal device %s", journal_device);
if(!quiet)
printf("Adding journal to device %s: ", journal_device);
fflush(stdout);
{
unsigned long journal_blocks;
errcode_t retval;
-
+
journal_blocks = figure_journal_size(journal_size, fs);
if (!journal_blocks) {
fs->super->s_feature_compat &=
retval = ext2fs_add_journal_inode(fs, journal_blocks,
journal_flags);
if(retval)
- bb_error_msg_and_die("Could not create journal");
+ bb_error_msg_and_die("cannot create journal");
if(!quiet)
puts("done");
}
+
+char *e2fs_set_sbin_path(void)
+{
+ char *oldpath = getenv("PATH");
+ /* Update our PATH to include /sbin */
+#define PATH_SET "/sbin"
+ if (oldpath)
+ oldpath = xasprintf("%s:%s", PATH_SET, oldpath);
+ else
+ oldpath = PATH_SET;
+ putenv (oldpath);
+ return oldpath;
+}