148404Sbostic /*-
2*61496Sbostic * Copyright (c) 1988, 1993
3*61496Sbostic * The Regents of the University of California. All rights reserved.
448404Sbostic *
548404Sbostic * %sccs.include.proprietary.c%
621133Sdist */
74410Smckusic
821133Sdist #ifndef lint
9*61496Sbostic static char copyright[] =
10*61496Sbostic "@(#) Copyright (c) 1988, 1993\n\
11*61496Sbostic The Regents of the University of California. All rights reserved.\n";
1248404Sbostic #endif /* not lint */
1321133Sdist
1448404Sbostic #ifndef lint
15*61496Sbostic static char sccsid[] = "@(#)icheck.c 8.1 (Berkeley) 06/05/93";
1648404Sbostic #endif /* not lint */
1748404Sbostic
184240Smckusick /*
194240Smckusick * icheck
204240Smckusick */
214240Smckusick #define NB 500
224240Smckusick #define MAXFN 500
235349Smckusic #define MAXNINDIR (MAXBSIZE / sizeof (daddr_t))
244240Smckusick
2538509Sbostic #include <sys/param.h>
2653733Smckusick #include <sys/time.h>
2751619Sbostic #include <ufs/ufs/dinode.h>
2851619Sbostic #include <ufs/ffs/fs.h>
294240Smckusick #ifndef STANDALONE
3057999Sralph #include <unistd.h>
314240Smckusick #include <stdio.h>
324240Smckusick #endif
334240Smckusick
344240Smckusick union {
354240Smckusick struct fs sb;
3634148Smckusick char pad[SBSIZE];
374240Smckusick } sbun;
384240Smckusick #define sblock sbun.sb
394240Smckusick
404240Smckusick union {
414240Smckusick struct cg cg;
425326Smckusic char pad[MAXBSIZE];
434240Smckusick } cgun;
444240Smckusick #define cgrp cgun.cg
454240Smckusick
4634148Smckusick struct dinode itab[MAXBSIZE / sizeof(struct dinode)];
4734148Smckusick
484240Smckusick daddr_t blist[NB];
499298Smckusick daddr_t fsblist[NB];
504240Smckusick char *bmap;
514240Smckusick
524240Smckusick int mflg;
534240Smckusick int dflg;
544240Smckusick int fi;
554240Smckusick ino_t ino;
564240Smckusick int cginit;
574240Smckusick
584240Smckusick ino_t nrfile;
594240Smckusick ino_t ndfile;
604240Smckusick ino_t nbfile;
614240Smckusick ino_t ncfile;
626286Smckusick ino_t nlfile;
6334148Smckusick ino_t nsfile;
644240Smckusick
654240Smckusick daddr_t nblock;
664240Smckusick daddr_t nfrag;
674240Smckusick daddr_t nindir;
684240Smckusick daddr_t niindir;
694240Smckusick
704240Smckusick daddr_t nffree;
714240Smckusick daddr_t nbfree;
724240Smckusick
734240Smckusick daddr_t ndup;
744240Smckusick
754240Smckusick int nerror;
7630558Smckusick long dev_bsize = 1;
774240Smckusick
7859260Storek int bread __P((daddr_t, char *, ssize_t));
794240Smckusick long atol();
804240Smckusick #ifndef STANDALONE
814240Smckusick char *malloc();
825098Smckusic char *calloc();
834240Smckusick #endif
844240Smckusick
main(argc,argv)854240Smckusick main(argc, argv)
865098Smckusic int argc;
875098Smckusic char *argv[];
884240Smckusick {
894240Smckusick register i;
904240Smckusick long n;
914240Smckusick
924240Smckusick blist[0] = -1;
934240Smckusick #ifndef STANDALONE
944240Smckusick while (--argc) {
954240Smckusick argv++;
964240Smckusick if (**argv=='-')
974240Smckusick switch ((*argv)[1]) {
984240Smckusick case 'd':
994240Smckusick dflg++;
1004240Smckusick continue;
1014240Smckusick
1024240Smckusick case 'm':
1034240Smckusick mflg++;
1044240Smckusick continue;
1054240Smckusick
1064240Smckusick case 'b':
10753026Sbostic for(i=0; i<NB && argc >= 2; i++) {
1084240Smckusick n = atol(argv[1]);
1094240Smckusick if(n == 0)
1104240Smckusick break;
1114240Smckusick blist[i] = n;
1124240Smckusick argv++;
1134240Smckusick argc--;
1144240Smckusick }
1154240Smckusick blist[i] = -1;
1164240Smckusick continue;
1174240Smckusick
1184240Smckusick default:
1194240Smckusick printf("Bad flag\n");
1204240Smckusick }
1214240Smckusick check(*argv);
1224240Smckusick }
1234240Smckusick #else
1244240Smckusick {
1254240Smckusick static char fname[128];
1264240Smckusick
1274240Smckusick printf("File: ");
1284240Smckusick gets(fname);
1294240Smckusick check(fname);
1304240Smckusick }
1314240Smckusick #endif
1324240Smckusick return(nerror);
1334240Smckusick }
1344240Smckusick
check(file)1354240Smckusick check(file)
1365098Smckusic char *file;
1374240Smckusick {
1384240Smckusick register i, j, c;
1394240Smckusick daddr_t d, cgd, cbase, b;
1404240Smckusick long n;
1419298Smckusick char buf[BUFSIZ];
1424240Smckusick
14334148Smckusick fi = open(file, 0);
1444240Smckusick if (fi < 0) {
1455098Smckusic perror(file);
1464240Smckusick nerror |= 04;
1474240Smckusick return;
1484240Smckusick }
1494240Smckusick printf("%s:\n", file);
1504240Smckusick nrfile = 0;
1514240Smckusick ndfile = 0;
1524240Smckusick ncfile = 0;
1534240Smckusick nbfile = 0;
1546286Smckusick nlfile = 0;
15534148Smckusick nsfile = 0;
1564240Smckusick
1574240Smckusick nblock = 0;
1584240Smckusick nfrag = 0;
1594240Smckusick nindir = 0;
1604240Smckusick niindir = 0;
1614240Smckusick
1624240Smckusick ndup = 0;
1634240Smckusick #ifndef STANDALONE
1644240Smckusick sync();
1654240Smckusick #endif
1665326Smckusic getsb(&sblock, file);
1675326Smckusic if (nerror)
1684240Smckusick return;
1699298Smckusick for (n=0; blist[n] != -1; n++)
1709298Smckusick fsblist[n] = dbtofsb(&sblock, blist[n]);
1714240Smckusick ino = 0;
1725098Smckusic n = roundup(howmany(sblock.fs_size, NBBY), sizeof(short));
1734240Smckusick #ifdef STANDALONE
1744240Smckusick bmap = NULL;
1754240Smckusick #else
1764240Smckusick bmap = malloc((unsigned)n);
1774240Smckusick #endif
1784240Smckusick if (bmap==NULL) {
1794240Smckusick printf("Not enough core; duplicates unchecked\n");
1804240Smckusick dflg++;
1814240Smckusick }
1824240Smckusick ino = 0;
1834240Smckusick cginit = 1;
1846534Smckusick if (!dflg) {
1856534Smckusick for (i = 0; i < (unsigned)n; i++)
1864240Smckusick bmap[i] = 0;
1876534Smckusick for (c = 0; c < sblock.fs_ncg; c++) {
1885382Smckusic cgd = cgtod(&sblock, c);
1896534Smckusick if (c == 0)
1906534Smckusick d = cgbase(&sblock, c);
1916534Smckusick else
1926534Smckusick d = cgsblock(&sblock, c);
19332441Sbostic (void)sprintf(buf, "spare super block %d", c);
1946534Smckusick for (; d < cgd; d += sblock.fs_frag)
1959298Smckusick chk(d, buf, sblock.fs_bsize);
1965382Smckusic d = cgimin(&sblock, c);
19732441Sbostic (void)sprintf(buf, "cylinder group %d", c);
1984240Smckusick while (cgd < d) {
1999298Smckusick chk(cgd, buf, sblock.fs_bsize);
2005326Smckusic cgd += sblock.fs_frag;
2014240Smckusick }
2025382Smckusic d = cgdmin(&sblock, c);
2039298Smckusick i = INOPB(&sblock);
2049298Smckusick for (; cgd < d; cgd += sblock.fs_frag) {
20532441Sbostic (void)sprintf(buf, "inodes %d-%d", ino, ino + i);
2069298Smckusick chk(cgd, buf, sblock.fs_bsize);
2079298Smckusick ino += i;
2089298Smckusick }
2094240Smckusick if (c == 0) {
2106534Smckusick d += howmany(sblock.fs_cssize, sblock.fs_fsize);
2116534Smckusick for (; cgd < d; cgd++)
2126534Smckusick chk(cgd, "csum", sblock.fs_fsize);
2134240Smckusick }
2144240Smckusick }
2154240Smckusick }
2169298Smckusick ino = 0;
2174240Smckusick cginit = 0;
2184240Smckusick for (c = 0; c < sblock.fs_ncg; c++) {
21934148Smckusick for (i = 0;
22034148Smckusick i < sblock.fs_ipg / INOPF(&sblock);
22134148Smckusick i += sblock.fs_frag) {
22234148Smckusick bread(fsbtodb(&sblock, cgimin(&sblock, c) + i),
22334148Smckusick (char *)itab, sblock.fs_bsize);
22434148Smckusick for (j = 0; j < INOPB(&sblock); j++) {
22534148Smckusick pass1(&itab[j]);
22634148Smckusick ino++;
22734148Smckusick }
2284240Smckusick }
2294240Smckusick }
2304240Smckusick ino = 0;
2314240Smckusick #ifndef STANDALONE
2324240Smckusick sync();
2334240Smckusick #endif
2344240Smckusick nffree = 0;
2354240Smckusick nbfree = 0;
2364240Smckusick for (c = 0; c < sblock.fs_ncg; c++) {
2375382Smckusic cbase = cgbase(&sblock, c);
2385382Smckusic bread(fsbtodb(&sblock, cgtod(&sblock, c)), (char *)&cgrp,
2395326Smckusic sblock.fs_cgsize);
24034148Smckusick if (!cg_chkmagic(&cgrp))
2416534Smckusick printf("cg %d: bad magic number\n", c);
2425326Smckusic for (b = 0; b < sblock.fs_fpg; b += sblock.fs_frag) {
24334148Smckusick if (isblock(&sblock, cg_blksfree(&cgrp),
2445326Smckusic b / sblock.fs_frag)) {
2454240Smckusick nbfree++;
2469298Smckusick chk(cbase+b, "free block", sblock.fs_bsize);
2474240Smckusick } else {
2485326Smckusic for (d = 0; d < sblock.fs_frag; d++)
24934148Smckusick if (isset(cg_blksfree(&cgrp), b+d)) {
2509298Smckusick chk(cbase+b+d, "free frag", sblock.fs_fsize);
2514240Smckusick nffree++;
2524240Smckusick }
2534240Smckusick }
2544240Smckusick }
2554240Smckusick }
2564240Smckusick close(fi);
2574240Smckusick #ifndef STANDALONE
2584240Smckusick if (bmap)
2594240Smckusick free(bmap);
2604240Smckusick #endif
2614240Smckusick
26234148Smckusick i = nrfile + ndfile + ncfile + nbfile + nlfile + nsfile;
2634240Smckusick #ifndef STANDALONE
26434148Smckusick printf("files %6u (r=%u,d=%u,b=%u,c=%u,sl=%u,sock=%u)\n",
26534148Smckusick i, nrfile, ndfile, nbfile, ncfile, nlfile, nsfile);
2664240Smckusick #else
26734148Smckusick printf("files %u (r=%u,d=%u,b=%u,c=%u,sl=%u,sock=%u)\n",
26834148Smckusick i, nrfile, ndfile, nbfile, ncfile, nlfile, nsfile);
2694240Smckusick #endif
2705326Smckusic n = (nblock + nindir + niindir) * sblock.fs_frag + nfrag;
2714240Smckusick #ifdef STANDALONE
2724240Smckusick printf("used %ld (i=%ld,ii=%ld,b=%ld,f=%ld)\n",
2734240Smckusick n, nindir, niindir, nblock, nfrag);
2745326Smckusic printf("free %ld (b=%ld,f=%ld)\n", nffree + sblock.fs_frag * nbfree,
2754240Smckusick nbfree, nffree);
2764240Smckusick #else
2774240Smckusick printf("used %7ld (i=%ld,ii=%ld,b=%ld,f=%ld)\n",
2784240Smckusick n, nindir, niindir, nblock, nfrag);
2795326Smckusic printf("free %7ld (b=%ld,f=%ld)\n", nffree + sblock.fs_frag * nbfree,
2804240Smckusick nbfree, nffree);
2814240Smckusick #endif
2824240Smckusick if(!dflg) {
2834240Smckusick n = 0;
2844410Smckusic for (d = 0; d < sblock.fs_size; d++)
2855326Smckusic if(!duped(d, sblock.fs_fsize)) {
2864240Smckusick if(mflg)
2874240Smckusick printf("%ld missing\n", d);
2884240Smckusick n++;
2894240Smckusick }
2904240Smckusick printf("missing%5ld\n", n);
2914240Smckusick }
2924240Smckusick }
2934240Smckusick
pass1(ip)2944240Smckusick pass1(ip)
2954410Smckusic register struct dinode *ip;
2964240Smckusick {
2975326Smckusic daddr_t ind1[MAXNINDIR];
2985326Smckusic daddr_t ind2[MAXNINDIR];
2994429Smckusic daddr_t db, ib;
3004429Smckusic register int i, j, k, siz;
3019298Smckusick int lbn;
3029298Smckusick char buf[BUFSIZ];
3034240Smckusick
3044240Smckusick i = ip->di_mode & IFMT;
3054790Smckusic if(i == 0)
3064240Smckusick return;
3074240Smckusick switch (i) {
3084240Smckusick case IFCHR:
3094240Smckusick ncfile++;
3104240Smckusick return;
3114240Smckusick case IFBLK:
3124240Smckusick nbfile++;
3134240Smckusick return;
3144240Smckusick case IFDIR:
3154240Smckusick ndfile++;
3164240Smckusick break;
3174240Smckusick case IFREG:
3184240Smckusick nrfile++;
3194240Smckusick break;
32034148Smckusick case IFSOCK:
32134148Smckusick nsfile++;
32234148Smckusick break;
3236286Smckusick case IFLNK:
3246286Smckusick nlfile++;
3256286Smckusick break;
3264240Smckusick default:
3274240Smckusick printf("bad mode %u\n", ino);
3284240Smckusick return;
3294240Smckusick }
3304410Smckusic for (i = 0; i < NDADDR; i++) {
3314410Smckusic db = ip->di_db[i];
3324410Smckusic if (db == 0)
3334240Smckusick continue;
3345326Smckusic siz = dblksize(&sblock, ip, i);
33532441Sbostic (void)sprintf(buf, "logical data block %d", i);
3369298Smckusick chk(db, buf, siz);
3375326Smckusic if (siz == sblock.fs_bsize)
3384429Smckusic nblock++;
3394429Smckusic else
3405326Smckusic nfrag += howmany(siz, sblock.fs_fsize);
3414240Smckusick }
3424410Smckusic for(i = 0; i < NIADDR; i++) {
3434410Smckusic ib = ip->di_ib[i];
3449298Smckusick if (ib == 0)
3454240Smckusick continue;
3465326Smckusic if (chk(ib, "1st indirect", sblock.fs_bsize))
3474410Smckusic continue;
3485326Smckusic bread(fsbtodb(&sblock, ib), (char *)ind1, sblock.fs_bsize);
3494240Smckusick nindir++;
3505326Smckusic for (j = 0; j < NINDIR(&sblock); j++) {
3514410Smckusic ib = ind1[j];
3524410Smckusic if (ib == 0)
3534240Smckusick continue;
3544410Smckusic if (i == 0) {
3559298Smckusick lbn = NDADDR + j;
3569298Smckusick siz = dblksize(&sblock, ip, lbn);
35732441Sbostic (void)sprintf(buf, "logical data block %d", lbn);
3589298Smckusick chk(ib, buf, siz);
3595326Smckusic if (siz == sblock.fs_bsize)
3604429Smckusic nblock++;
3614429Smckusic else
3625326Smckusic nfrag += howmany(siz, sblock.fs_fsize);
3634240Smckusick continue;
3644240Smckusick }
3655326Smckusic if (chk(ib, "2nd indirect", sblock.fs_bsize))
3664410Smckusic continue;
3675326Smckusic bread(fsbtodb(&sblock, ib), (char *)ind2,
3685326Smckusic sblock.fs_bsize);
3694240Smckusick niindir++;
3705326Smckusic for (k = 0; k < NINDIR(&sblock); k++) {
3714410Smckusic ib = ind2[k];
3724410Smckusic if (ib == 0)
3734240Smckusick continue;
3749298Smckusick lbn = NDADDR + NINDIR(&sblock) * (i + j) + k;
3759298Smckusick siz = dblksize(&sblock, ip, lbn);
37632441Sbostic (void)sprintf(buf, "logical data block %d", lbn);
3779298Smckusick chk(ib, buf, siz);
3785326Smckusic if (siz == sblock.fs_bsize)
3794429Smckusic nblock++;
3804429Smckusic else
3815326Smckusic nfrag += howmany(siz, sblock.fs_fsize);
3824240Smckusick }
3834240Smckusick }
3844240Smckusick }
3854240Smckusick }
3864240Smckusick
chk(bno,s,size)3874429Smckusic chk(bno, s, size)
3884410Smckusic daddr_t bno;
3894410Smckusic char *s;
3904429Smckusic int size;
3914240Smckusick {
3924240Smckusick register n, cg;
3935957Smckusic int frags;
3944240Smckusick
3955382Smckusic cg = dtog(&sblock, bno);
3966534Smckusick if (cginit == 0 && bno >= sblock.fs_frag * sblock.fs_size) {
3974240Smckusick printf("%ld bad; inode=%u, class=%s\n", bno, ino, s);
3984240Smckusick return(1);
3994240Smckusick }
4009298Smckusick frags = numfrags(&sblock, size);
4019298Smckusick if (frags == sblock.fs_frag) {
4024429Smckusic if (duped(bno, size)) {
4034429Smckusic printf("%ld dup block; inode=%u, class=%s\n",
4044429Smckusic bno, ino, s);
4055326Smckusic ndup += sblock.fs_frag;
4064429Smckusic }
4074429Smckusic } else {
4085957Smckusic for (n = 0; n < frags; n++) {
4095326Smckusic if (duped(bno + n, sblock.fs_fsize)) {
4104429Smckusic printf("%ld dup frag; inode=%u, class=%s\n",
4114429Smckusic bno, ino, s);
4124429Smckusic ndup++;
4134429Smckusic }
4144429Smckusic }
4154240Smckusick }
4164240Smckusick for (n=0; blist[n] != -1; n++)
4179298Smckusick if (fsblist[n] >= bno && fsblist[n] < bno + frags)
4189298Smckusick printf("%ld arg; frag %d of %d, inode=%u, class=%s\n",
4199298Smckusick blist[n], fsblist[n] - bno, frags, ino, s);
4204240Smckusick return(0);
4214240Smckusick }
4224240Smckusick
duped(bno,size)4234429Smckusic duped(bno, size)
4244410Smckusic daddr_t bno;
4254429Smckusic int size;
4264240Smckusick {
4274240Smckusick if(dflg)
4284240Smckusick return(0);
4295326Smckusic if (size != sblock.fs_fsize && size != sblock.fs_bsize)
4304429Smckusic printf("bad size %d to duped\n", size);
4315326Smckusic if (size == sblock.fs_fsize) {
4324410Smckusic if (isset(bmap, bno))
4334410Smckusic return(1);
4344410Smckusic setbit(bmap, bno);
4354410Smckusic return (0);
4364410Smckusic }
4375326Smckusic if (bno % sblock.fs_frag != 0)
4384410Smckusic printf("bad bno %d to duped\n", bno);
4395326Smckusic if (isblock(&sblock, bmap, bno/sblock.fs_frag))
4404410Smckusic return (1);
4415326Smckusic setblock(&sblock, bmap, bno/sblock.fs_frag);
4424240Smckusick return(0);
4434240Smckusick }
4444240Smckusick
getsb(fs,file)4455326Smckusic getsb(fs, file)
4465326Smckusic register struct fs *fs;
4475326Smckusic char *file;
4485326Smckusic {
4496534Smckusick int i, j, size;
4505326Smckusic
45159260Storek if (bread(SBOFF, (char *)fs, SBSIZE)) {
4525326Smckusic printf("bad super block");
4535326Smckusic perror(file);
4545326Smckusic nerror |= 04;
4555326Smckusic return;
4565326Smckusic }
4575326Smckusic if (fs->fs_magic != FS_MAGIC) {
4585326Smckusic printf("%s: bad magic number\n", file);
4595326Smckusic nerror |= 04;
4605326Smckusic return;
4615326Smckusic }
46230558Smckusick dev_bsize = fs->fs_fsize / fsbtodb(fs, 1);
4636534Smckusick for (i = 0, j = 0; i < sblock.fs_cssize; i += sblock.fs_bsize, j++) {
4646534Smckusick size = sblock.fs_cssize - i < sblock.fs_bsize ?
4656534Smckusick sblock.fs_cssize - i : sblock.fs_bsize;
4666534Smckusick sblock.fs_csp[j] = (struct csum *)calloc(1, size);
4676534Smckusick bread(fsbtodb(fs, fs->fs_csaddr + (j * fs->fs_frag)),
4686534Smckusick (char *)fs->fs_csp[j], size);
4695326Smckusic }
4705326Smckusic }
4715326Smckusic
bread(bno,buf,cnt)4724240Smckusick bread(bno, buf, cnt)
4734410Smckusic daddr_t bno;
4744410Smckusic char *buf;
47559260Storek ssize_t cnt;
4764240Smckusick {
4774240Smckusick register i;
4784240Smckusick
47957999Sralph lseek(fi, (off_t)bno * dev_bsize, SEEK_SET);
4804240Smckusick if ((i = read(fi, buf, cnt)) != cnt) {
48157999Sralph for (i = 0; i < sblock.fs_bsize; i++)
4824240Smckusick buf[i] = 0;
4835326Smckusic return (1);
4844240Smckusick }
4855326Smckusic return (0);
4864240Smckusick }
4875326Smckusic
4885326Smckusic /*
4898143Smckusick * check if a block is available
4905326Smckusic */
4915326Smckusic isblock(fs, cp, h)
4925326Smckusic struct fs *fs;
4935326Smckusic unsigned char *cp;
4945326Smckusic int h;
4955326Smckusic {
4965326Smckusic unsigned char mask;
4975326Smckusic
4985326Smckusic switch (fs->fs_frag) {
4995326Smckusic case 8:
5005326Smckusic return (cp[h] == 0xff);
5015326Smckusic case 4:
5025326Smckusic mask = 0x0f << ((h & 0x1) << 2);
5035326Smckusic return ((cp[h >> 1] & mask) == mask);
5045326Smckusic case 2:
5055326Smckusic mask = 0x03 << ((h & 0x3) << 1);
5065326Smckusic return ((cp[h >> 2] & mask) == mask);
5075326Smckusic case 1:
5085326Smckusic mask = 0x01 << (h & 0x7);
5095326Smckusic return ((cp[h >> 3] & mask) == mask);
5105326Smckusic default:
5118143Smckusick #ifdef STANDALONE
5128143Smckusick printf("isblock bad fs_frag %d\n", fs->fs_frag);
5138143Smckusick #else
5145326Smckusic fprintf(stderr, "isblock bad fs_frag %d\n", fs->fs_frag);
5158143Smckusick #endif
5165326Smckusic return;
5175326Smckusic }
5185326Smckusic }
5195326Smckusic
5208143Smckusick /*
5218143Smckusick * put a block into the map
5228143Smckusick */
5235326Smckusic setblock(fs, cp, h)
5245326Smckusic struct fs *fs;
5255326Smckusic unsigned char *cp;
5265326Smckusic int h;
5275326Smckusic {
5285326Smckusic switch (fs->fs_frag) {
5295326Smckusic case 8:
5305326Smckusic cp[h] = 0xff;
5315326Smckusic return;
5325326Smckusic case 4:
5335326Smckusic cp[h >> 1] |= (0x0f << ((h & 0x1) << 2));
5345326Smckusic return;
5355326Smckusic case 2:
5365326Smckusic cp[h >> 2] |= (0x03 << ((h & 0x3) << 1));
5375326Smckusic return;
5385326Smckusic case 1:
5395326Smckusic cp[h >> 3] |= (0x01 << (h & 0x7));
5405326Smckusic return;
5415326Smckusic default:
5428143Smckusick #ifdef STANDALONE
5438143Smckusick printf("setblock bad fs_frag %d\n", fs->fs_frag);
5448143Smckusick #else
5455326Smckusic fprintf(stderr, "setblock bad fs_frag %d\n", fs->fs_frag);
5468143Smckusick #endif
5475326Smckusic return;
5485326Smckusic }
5495326Smckusic }
550