Date: Fri, 22 Nov 1996 19:03:47 -0800 (PST) From: John-Mark Gurney <jmg@nike.efn.org> To: FreeBSD Current <freebsd-current@freebsd.org> Subject: my fsck patch (revision 1.4 of src/sbin/fsck/preen.c) Message-ID: <Pine.NEB.3.95.961122185357.16460E-100000@nike>
next in thread | raw e-mail | index | archive | help
I just relized that there is a time that this will fail to operate like it
was suppose to... say you have a /etc/fstab like:
/dev/sd0a / ufs rw 1 1
/dev/sd0s1f /usr ufs rw 1 2
/dev/cd2a /usr/anon/pub/cdrom2 cd9660 ro,noauto 0 0
but the cdrom was a ufs file system.... you boot single user mode and
try: fsck /usr/anon/pub/cdrom2 fsck won't resolve it because the patch
expects it to return a directory... most chances are you won't have a
/usr/anon/pub/cdrom2 on your /... it's probably in /usr... (I know this
may be bas fs design but it's possible)... so I was thinking something
like this patch:
Index: preen.c
===================================================================
RCS file: /usr/cvs/src/sbin/fsck/preen.c,v
retrieving revision 1.5
diff -c -r1.5 preen.c
*** preen.c 1996/10/27 18:28:39 1.5
--- preen.c 1996/11/23 02:58:07
***************
*** 304,312 ****
}
retry:
if (stat(name, &stblock) < 0) {
! perror(name);
! printf("Can't stat %s\n", name);
! return (0);
}
if ((stblock.st_mode & S_IFMT) == S_IFBLK) {
if (stslash.st_dev == stblock.st_rdev)
--- 304,310 ----
}
retry:
if (stat(name, &stblock) < 0) {
! goto trydir;
}
if ((stblock.st_mode & S_IFMT) == S_IFBLK) {
if (stslash.st_dev == stblock.st_rdev)
***************
*** 328,333 ****
--- 326,332 ----
retried++;
goto retry;
} else if ((stblock.st_mode & S_IFMT) == S_IFDIR && !retried) {
+ trydir:
l = strlen(name) - 1;
if (l > 0 && name[l] == '/')
/* remove trailing slash */
the other way would be to duplicate the code (which I would prefere)... I
detest goto :)... but there is already goto used in this function... so
I'm not as leary about using it... thanks for your ideas... ttyl..
John-Mark
gurney_j@efn.org
http://resnet.uoregon.edu/~gurney_j/
Modem/FAX: (541) 683-6954 (FreeBSD Box)
Live in Peace, destroy Micro$oft, support free software, run FreeBSD (unix)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.95.961122185357.16460E-100000>
