On 07/12/12 22:55, Alexander Hall wrote:
> On 07/11/12 23:43, Jan Stary wrote:
>> On Jul 11 19:18:21, Alexander Hall wrote:
>>> This adds DUID support to ncheck_ffs.
>>> Testers? ok?
>>
>> This indeed enables ncheck_ffs for DUIDs,
>> but breaks ncheck_ffs for /dev/wd0x
>>
>> My fstab says
>>
>> 5d2ade1fc5a8d569.n /tmp      ffs rw,softdep,nodev,nosuid     1 2
>>
>> With your diff I can do 'ncheck_ffs /tmp',
>> which previously said
>>
>>      5d2ade1fc5a8d569.n: no such file or directory
>>
>> But I can no longer do 'ncheck_ffs /dev/wd0n'
>> which worked before this diff, but now says
>>
>>      ncheck_ffs: cannot open /dev/wd0n: Device busy
>>
>> 'ncheck_ffs /dev/rwd0n' works though.
> 
> Indeed, thanks.
> 
> Another try follows, with less entangled diff. Does it work better?

Bah, fix indendation from spaces to tabs.

Comments? OK?

/Alexander


Index: Makefile
===================================================================
RCS file: /data/openbsd/cvs/src/sbin/ncheck_ffs/Makefile,v
retrieving revision 1.3
diff -u -p -r1.3 Makefile
--- Makefile    29 Jun 1996 19:25:09 -0000      1.3
+++ Makefile    11 Jul 2012 13:54:01 -0000
@@ -1,6 +1,8 @@
 #      $OpenBSD: Makefile,v 1.3 1996/06/29 19:25:09 mickey Exp $
 
 PROG=  ncheck_ffs
+LDADD=  -lutil
+DPADD=  ${LIBUTIL}
 MAN=   ncheck_ffs.8
 
 LINKS= ${BINDIR}/ncheck_ffs ${BINDIR}/ncheck
Index: ncheck_ffs.c
===================================================================
RCS file: /data/openbsd/cvs/src/sbin/ncheck_ffs/ncheck_ffs.c,v
retrieving revision 1.35
diff -u -p -r1.35 ncheck_ffs.c
--- ncheck_ffs.c        27 Oct 2009 23:59:33 -0000      1.35
+++ ncheck_ffs.c        13 Jul 2012 09:34:40 -0000
@@ -542,24 +542,34 @@ main(int argc, char *argv[])
        if (optind != argc - 1 || (mflag && format))
                usage();
 
-       odisk = argv[optind];
-       if (realpath(odisk, rdisk) == NULL)
+       disk = argv[optind];
+       if ((diskfd = opendev(disk, O_RDONLY, 0, NULL)) >= 0) {
+               if (fstat(diskfd, &stblock))
+                       err(1, "cannot stat %s", disk);
+               if (S_ISCHR(stblock.st_mode))
+                       goto gotdev;
+               close(diskfd);
+       }
+
+       if (realpath(disk, rdisk) == NULL)
                err(1, "cannot find real path for %s", odisk);
        disk = rdisk;
 
        if (stat(disk, &stblock) < 0)
                err(1, "cannot stat %s", disk);
 
-        if (S_ISBLK(stblock.st_mode)) {
+       if (S_ISBLK(stblock.st_mode)) {
                disk = rawname(disk);
        } else if (!S_ISCHR(stblock.st_mode)) {
                if ((fsp = getfsfile(disk)) == NULL)
                        err(1, "could not find file system %s", disk);
-                disk = rawname(fsp->fs_spec);
-        }
+               disk = rawname(fsp->fs_spec);
+       }
 
-       if ((diskfd = open(disk, O_RDONLY)) < 0)
+       if ((diskfd = opendev(disk, O_RDONLY, 0, NULL)) < 0)
                err(1, "cannot open %s", disk);
+
+gotdev:
        sblock = (struct fs *)sblock_buf;
        for (i = 0; sblock_try[i] != -1; i++) {
                n = pread(diskfd, sblock, SBLOCKSIZE, (off_t)sblock_try[i]);

Reply via email to