* Copyright (c) 1981, 1983 The Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
"@(#) Copyright (c) 1981, 1983 The Regents of the University of California.\n\
static char sccsid
[] = "@(#)badsect.c 5.9 (Berkeley) 6/1/90";
* Badsect takes a list of file-system relative sector numbers
* and makes files containing the blocks of which these sectors are a part.
* It can be used to contain sectors which have problems if these sectors
* are not part of the bad file for the pack (see bad144). For instance,
* this program can be used if the driver for the file system in question
* does not support bad block forwarding.
struct stat stbuf
, devstat
;
register struct direct
*dp
;
fprintf(stderr
, "usage: badsect bbdir blkno [ blkno ]\n");
if (chdir(argv
[1]) < 0 || stat(".", &stbuf
) < 0) {
if ((dirp
= opendir(name
)) == NULL
) {
while ((dp
= readdir(dirp
)) != NULL
) {
strcpy(&name
[5], dp
->d_name
);
if (stat(name
, &devstat
) < 0) {
if (stbuf
.st_dev
== devstat
.st_rdev
&&
(devstat
.st_mode
& IFMT
) == IFBLK
)
printf("Cannot find dev 0%o corresponding to %s\n",
if ((fsi
= open(name
, 0)) < 0) {
rdfs(SBOFF
, SBSIZE
, (char *)fs
);
dev_bsize
= fs
->fs_fsize
/ fsbtodb(fs
, 1);
for (argc
-= 2, argv
+= 2; argc
> 0; argc
--, argv
++) {
if (mknod(*argv
, IFMT
|0600, dbtofsb(fs
, number
)) < 0) {
printf("Don't forget to run ``fsck %s''\n", name
);
fsbn
= dbtofsb(fs
, blkno
);
if ((unsigned)(fsbn
+cnt
) > fs
->fs_size
) {
printf("block %d out of range of file system\n", blkno
);
if (fsbn
< cgdmin(fs
, cg
)) {
if (cg
== 0 || (fsbn
+cnt
) > cgsblock(fs
, cg
)) {
printf("block %d in non-data area: cannot attach\n",
if ((fsbn
+cnt
) > cgbase(fs
, cg
+1)) {
printf("block %d in non-data area: cannot attach\n",
rdfs(fsbtodb(fs
, cgtod(fs
, cg
)), (int)sblock
.fs_cgsize
,
if (!cg_chkmagic(&acg
)) {
fprintf(stderr
, "cg %d: bad magic number\n", cg
);
if (isclr(cg_blksfree(&acg
), bn
))
printf("Warning: sector %d is in use\n", blkno
);
* read a block from the file system
if (lseek(fsi
, bno
* dev_bsize
, 0) < 0) {
printf("seek error: %ld\n", bno
);
printf("read error: %ld\n", bno
);