Print this page
PSARC 2008/290 lofi mount
6384817 Need persistent lofi based mounts and direct mount(1m) support for lofi
*** 24,34 ****
* THIS SOFTWARE IS PROVIDED '`AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
! #pragma ident "@(#)main.c 1.54 08/02/06 SMI"
/*
* In-core structures:
* blockmap[]
* A bitmap of block usage very similar to what's on disk, but
--- 24,34 ----
* THIS SOFTWARE IS PROVIDED '`AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
! #pragma ident "@(#)main.c 1.55 08/05/07 SMI"
/*
* In-core structures:
* blockmap[]
* A bitmap of block usage very similar to what's on disk, but
*** 694,737 ****
FILE *vfstab;
struct statvfs vfs_stat;
int found_magic[MAGIC_LIMIT];
int magic_cnt;
int is_magic = 0;
! int is_block;
(void) memset((void *)found_magic, 0, sizeof (found_magic));
if (stat64(filename, &stbd) < 0) {
(void) fprintf(stderr,
"ufs fsck: sanity check failed : cannot stat %s\n", filename);
exit(EXNOSTAT);
}
! if ((stbd.st_mode & S_IFMT) == S_IFBLK) {
is_block = 1;
! } else if ((stbd.st_mode & S_IFMT) == S_IFCHR) {
is_block = 0;
! } else {
! /*
! * In !mflag mode, we allow checking the contents
! * of a file. Since this is intended primarily for
! * speeding up boot-time checks and allowing for a
! * file complicates the ok-input tests, we'll disallow
! * that option.
! */
! (void) fprintf(stderr,
! "ufs fsck: sanity check failed: "
! "%s not block or character device\n", filename);
! exit(EXNOSTAT);
}
/*
* Determine if this is the root file system via vfstab. Give up
* silently on failures. The whole point of this is to be tolerant
* of the magic file systems being already mounted.
*/
! if ((vfstab = fopen(VFSTAB, "r")) != 0) {
for (magic_cnt = 0; magic_cnt < MAGIC_LIMIT; magic_cnt++) {
if (magic_cnt == MAGIC_NONE)
continue;
if (getvfsfile(vfstab, &vfsbuf,
magic_fs[magic_cnt]) == 0) {
--- 694,728 ----
FILE *vfstab;
struct statvfs vfs_stat;
int found_magic[MAGIC_LIMIT];
int magic_cnt;
int is_magic = 0;
! int is_block = 0;
! int is_file = 0;
(void) memset((void *)found_magic, 0, sizeof (found_magic));
if (stat64(filename, &stbd) < 0) {
(void) fprintf(stderr,
"ufs fsck: sanity check failed : cannot stat %s\n", filename);
exit(EXNOSTAT);
}
! if (S_ISBLK(stbd.st_mode)) {
is_block = 1;
! } else if (S_ISCHR(stbd.st_mode)) {
is_block = 0;
! } else if (S_ISREG(stbd.st_mode)) {
! is_file = 1;
}
/*
* Determine if this is the root file system via vfstab. Give up
* silently on failures. The whole point of this is to be tolerant
* of the magic file systems being already mounted.
*/
! if (!is_file && (vfstab = fopen(VFSTAB, "r")) != NULL) {
for (magic_cnt = 0; magic_cnt < MAGIC_LIMIT; magic_cnt++) {
if (magic_cnt == MAGIC_NONE)
continue;
if (getvfsfile(vfstab, &vfsbuf,
magic_fs[magic_cnt]) == 0) {