Module Name: src Committed By: christos Date: Sun Nov 29 13:46:23 UTC 2015
Modified Files: src/sbin/gpt: gpt.c Log Message: Only use the ioctl's if we have them. To generate a diff of this commit: cvs rdiff -u -r1.43 -r1.44 src/sbin/gpt/gpt.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sbin/gpt/gpt.c diff -u src/sbin/gpt/gpt.c:1.43 src/sbin/gpt/gpt.c:1.44 --- src/sbin/gpt/gpt.c:1.43 Sun Nov 29 08:24:28 2015 +++ src/sbin/gpt/gpt.c Sun Nov 29 08:46:23 2015 @@ -35,7 +35,7 @@ __FBSDID("$FreeBSD: src/sbin/gpt/gpt.c,v 1.16 2006/07/07 02:44:23 marcel Exp $"); #endif #ifdef __RCSID -__RCSID("$NetBSD: gpt.c,v 1.43 2015/11/29 13:24:28 jnemeth Exp $"); +__RCSID("$NetBSD: gpt.c,v 1.44 2015/11/29 13:46:23 christos Exp $"); #endif #include <sys/param.h> @@ -486,24 +486,38 @@ gpt_open(const char *dev, int flags) } if ((sb.st_mode & S_IFMT) != S_IFREG) { + if (secsz == 0) { #ifdef DIOCGSECTORSIZE - if ((secsz == 0 && ioctl(fd, DIOCGSECTORSIZE, &secsz) == -1) || - (mediasz == 0 && ioctl(fd, DIOCGMEDIASIZE, &mediasz) == -1)) { - if (!quiet) - warn("Cannot get sector/media size for `%s'", - device_name); - goto close; - } -#else - if (getdisksize(device_name, &secsz, &mediasz) == -1) { - if (!quiet) - warn("Cannot get sector/media size for `%s'", - device_name); - goto close; + if (ioctl(fd, DIOCGSECTORSIZE, &secsz) == -1) { + if (!quiet) + warn("Cannot get sector size for `%s'", + device_name); + goto close; + } +#endif + if (secsz == 0) { + if (!quiet) + warnx("Sector size for `%s' can't be 0", + device_name); + goto close; + } } + if (mediasz == 0) { +#ifdef DIOCGMEDIASIZE + if (ioctl(fd, DIOCGMEDIASIZE, &mediasz) == -1) { + if (!quiet) + warn("Cannot get media size for `%s'", + device_name); + goto close; + } #endif - if (secsz == 0 || mediasz == 0) - errx(1, "Please specify sector/media size"); + if (mediasz == 0) { + if (!quiet) + warnx("Media size for `%s' can't be 0", + device_name); + goto close; + } + } } else { if (secsz == 0) secsz = 512; /* Fixed size for files. */