Module Name:    src
Committed By:   dsl
Date:           Wed Aug  5 21:31:50 UTC 2009

Modified Files:
        src/sbin/fdisk: fdisk.c

Log Message:
Change arguments to decimal() to be int64_t.
They need to be able to hold disk sector numbers > 2^31 and also -1.
Should fix PR/34807


To generate a diff of this commit:
cvs rdiff -u -r1.122 -r1.123 src/sbin/fdisk/fdisk.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/fdisk/fdisk.c
diff -u src/sbin/fdisk/fdisk.c:1.122 src/sbin/fdisk/fdisk.c:1.123
--- src/sbin/fdisk/fdisk.c:1.122	Tue Jun  2 21:15:53 2009
+++ src/sbin/fdisk/fdisk.c	Wed Aug  5 21:31:50 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: fdisk.c,v 1.122 2009/06/02 21:15:53 christos Exp $ */
+/*	$NetBSD: fdisk.c,v 1.123 2009/08/05 21:31:50 dsl Exp $ */
 
 /*
  * Mach Operating System
@@ -39,7 +39,7 @@
 #include <sys/cdefs.h>
 
 #ifndef lint
-__RCSID("$NetBSD: fdisk.c,v 1.122 2009/06/02 21:15:53 christos Exp $");
+__RCSID("$NetBSD: fdisk.c,v 1.123 2009/08/05 21:31:50 dsl Exp $");
 #endif /* not lint */
 
 #define MBRPTYPENAMES
@@ -246,7 +246,7 @@
 int	read_gpt(daddr_t, struct gpt_hdr *);
 int	delete_gpt(struct gpt_hdr *);
 int	yesno(const char *, ...);
-int	decimal(const char *, int, int, int, int);
+int	decimal(const char *, int64_t, int, int64_t, int64_t);
 #define DEC_SEC		1		/* asking for a sector number */
 #define	DEC_RND		2		/* round to end of first track */
 #define	DEC_RND_0	4		/* round 0 to size of a track */
@@ -2642,19 +2642,19 @@
 }
 
 int
-decimal(const char *prompt, int dflt, int flags, int minval, int maxval)
+decimal(const char *prompt, int64_t dflt, int flags, int64_t minval, int64_t maxval)
 {
-	int acc = 0;
+	int64_t acc = 0;
 	char *cp;
 	char ch;
 
 	for (;;) {
 		if (flags & DEC_SEC) {
-			printf("%s: [%d..%dcyl default: %d, %dcyl, %uMB] ",
+			printf("%s: [%" PRId64 "..%" PRId64 "dcyl default: %" PRId64 ", %" PRId64 "dcyl, %uMB] ",
 			    prompt, SEC_TO_CYL(minval), SEC_TO_CYL(maxval),
 			    dflt, SEC_TO_CYL(dflt), SEC_TO_MB(dflt));
 		} else
-			printf("%s: [%d..%d default: %d] ",
+			printf("%s: [%" PRId64 "..%" PRId64 " default: %" PRId64 "] ",
 			    prompt, minval, maxval, dflt);
 
 		if (!fgets(lbuf, LBUF, stdin))
@@ -2670,7 +2670,7 @@
 			return maxval;
 
 		if (isdigit((unsigned char)*cp) || *cp == '-') {
-			acc = strtol(lbuf, &cp, 10);
+			acc = strtoll(lbuf, &cp, 10);
 			if (flags & DEC_SEC) {
 				ch = *cp;
 				if (ch == 'g' || ch == 'G') {
@@ -2709,7 +2709,7 @@
 
 		if (acc >= minval && acc <= maxval)
 			return acc;
-		printf("%d is not between %d and %d.\n", acc, minval, maxval);
+		printf("%" PRId64 " is not between %" PRId64 " and %" PRId64 ".\n", acc, minval, maxval);
 	}
 }
 

Reply via email to