Re: fdisk buglet

From: John Baldwin <jhb_at_freebsd.org>
Date: Tue, 19 Oct 2004 16:53:51 -0400
On Saturday 16 October 2004 02:44 am, Ruslan Ermilov wrote:
> On Fri, Oct 15, 2004 at 04:34:11PM -0500, Sam wrote:
> > fivethree% fdisk /dev/ad1
> > fdisk: cannot open disk /dev//dev/ad1: No such file or directory
> >
> > One possible fix:
> >
> > fivethree% diff -upr src/sbin/fdisk src2/sbin/fdisk
> > diff -upr src/sbin/fdisk/fdisk.c src2/sbin/fdisk/fdisk.c
> > --- src/sbin/fdisk/fdisk.c      Mon Jun 14 03:21:19 2004
> > +++ src2/sbin/fdisk/fdisk.c     Fri Oct 15 16:35:28 2004
> > _at__at_ -299,14 +299,16 _at__at_ main(int argc, char *argv[])
> >         if (argc == 0) {
> >                 disk = get_rootdisk();
> >         } else {
> > -               if (stat(argv[0], &sb) == 0) {
> > +               disk = argv[0];
> > +               if (stat(disk, &sb) == 0) {
> >                         /* OK, full pathname given */
> > -                       disk = argv[0];
> >                 } else if (errno == ENOENT) {
> >                         /* Try prepending "/dev" */
> > -                       asprintf(&disk, "%s%s", _PATH_DEV, argv[0]);
> > -                       if (disk == NULL)
> > -                               errx(1, "out of memory");
> > +                       if (strncmp(disk, _PATH_DEV, strlen(_PATH_DEV)))
> > { +                               asprintf(&disk, "%s%s", _PATH_DEV,
> > argv[0]); +                               if (disk == NULL)
> > +                                       errx(1, "out of memory");
> > +                       }
> >                 } else {
> >                         /* other stat error, let it fail below */
> >                         disk = argv[0];
>
> Simpler:
>
> %%%
> Index: fdisk.c
> ===================================================================
> RCS file: /home/ncvs/src/sbin/fdisk/fdisk.c,v
> retrieving revision 1.74
> diff -u -r1.74 fdisk.c
> --- fdisk.c	14 Jun 2004 07:21:19 -0000	1.74
> +++ fdisk.c	16 Oct 2004 06:43:16 -0000
> _at__at_ -302,7 +302,7 _at__at_
>  		if (stat(argv[0], &sb) == 0) {
>  			/* OK, full pathname given */
>  			disk = argv[0];
> -		} else if (errno == ENOENT) {
> +		} else if (errno == ENOENT && argv[0][0] != '/') {
>  			/* Try prepending "/dev" */
>  			asprintf(&disk, "%s%s", _PATH_DEV, argv[0]);
>  			if (disk == NULL)
> %%%
>
>
> Cheers,

Looks good to me, are you going to commit it?

-- 

John Baldwin <jhb_at_FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/
Received on Tue Oct 19 2004 - 19:13:16 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:18 UTC