diff options
-rw-r--r-- | sbin/fdisk/cmd.c | 6 | ||||
-rw-r--r-- | sbin/fdisk/misc.c | 37 | ||||
-rw-r--r-- | sbin/fdisk/misc.h | 5 |
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); |