summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sbin/fdisk/cmd.c6
-rw-r--r--sbin/fdisk/misc.c37
-rw-r--r--sbin/fdisk/misc.h5
3 files changed, 40 insertions, 8 deletions
diff --git a/sbin/fdisk/cmd.c b/sbin/fdisk/cmd.c
index ef9531fe786..dadcfec52ae 100644
--- a/sbin/fdisk/cmd.c
+++ b/sbin/fdisk/cmd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd.c,v 1.80 2015/03/26 14:08:12 krw Exp $ */
+/* $OpenBSD: cmd.c,v 1.81 2015/03/26 20:32:10 krw Exp $ */
/*
* Copyright (c) 1997 Tobias Weingartner
@@ -205,8 +205,8 @@ Xsetpid(char *args, struct mbr *mbr)
PRT_print(0, NULL, NULL);
PRT_print(pn, pp, NULL);
- /* Ask for partition type */
- num = ask_pid(pp->id);
+ /* Ask for MBR partition type */
+ num = ask_pid(pp->id, 0x01, 0xff);
if (num == pp->id)
return (CMD_CONT);
diff --git a/sbin/fdisk/misc.c b/sbin/fdisk/misc.c
index e070ac868e6..20ba29c4552 100644
--- a/sbin/fdisk/misc.c
+++ b/sbin/fdisk/misc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: misc.c,v 1.47 2015/03/26 16:32:16 krw Exp $ */
+/* $OpenBSD: misc.c,v 1.48 2015/03/26 20:32:10 krw Exp $ */
/*
* Copyright (c) 1997 Tobias Weingartner
@@ -121,12 +121,14 @@ ask_num(const char *str, int dflt, int low, int high)
}
int
-ask_pid(int dflt)
+ask_pid(int dflt, int low, int high)
{
char lbuf[100], *cp;
size_t lbuflen;
int num = -1;
- const int low = 0, high = 0xff;
+
+ if (low == 1)
+ low = 0; /* Show continguous range */
if (dflt < low)
dflt = low;
@@ -159,6 +161,8 @@ ask_pid(int dflt)
if (*cp != '\0') {
printf("'%s' is not a valid number.\n", lbuf);
num = low - 1;
+ } else if (num == 0) {
+ break;
} else if (num < low || num > high) {
printf("'%x' is out of range.\n", num);
}
@@ -310,3 +314,30 @@ getuint64(char *prompt, u_int64_t oval, u_int64_t maxval)
return((u_int64_t)d);
}
+
+char *
+ask_string(const char *prompt, const char *oval)
+{
+ static char buf[BUFSIZ];
+ int n;
+
+ buf[0] = '\0';
+ do {
+ printf("%s: [%s] ", prompt, oval ? oval : "");
+ if (fgets(buf, sizeof(buf), stdin) == NULL) {
+ buf[0] = '\0';
+ if (feof(stdin)) {
+ clearerr(stdin);
+ putchar('\n');
+ return(NULL);
+ }
+ }
+ n = strlen(buf);
+ if (n > 0 && buf[n-1] == '\n')
+ buf[--n] = '\0';
+ else if (oval != NULL && buf[0] == '\0')
+ strlcpy(buf, oval, sizeof(buf));
+ } while (buf[0] == '?');
+
+ return(&buf[0]);
+}
diff --git a/sbin/fdisk/misc.h b/sbin/fdisk/misc.h
index fb956437764..e0de59f6e83 100644
--- a/sbin/fdisk/misc.h
+++ b/sbin/fdisk/misc.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: misc.h,v 1.26 2015/03/26 16:32:16 krw Exp $ */
+/* $OpenBSD: misc.h,v 1.27 2015/03/26 20:32:10 krw Exp $ */
/*
* Copyright (c) 1997 Tobias Weingartner
@@ -31,7 +31,8 @@ extern struct unit_type unit_types[];
int unit_lookup(char *);
int ask_cmd(char **, char **);
int ask_num(const char *, int, int, int);
-int ask_pid(int);
+int ask_pid(int, int, int);
+char *ask_string(const char *, const char *);
int ask_yn(const char *);
u_int64_t getuint64(char *, u_int64_t, u_int64_t);