libfdisk: add Yes/No to Ask API
Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
9ff2ce0a54
commit
ccf48af540
4 changed files with 61 additions and 2 deletions
|
@ -168,6 +168,7 @@ int ask_callback(struct fdisk_context *cxt, struct fdisk_ask *ask,
|
|||
void *data __attribute__((__unused__)))
|
||||
{
|
||||
va_list ap;
|
||||
int rc = 0;
|
||||
char buf[BUFSIZ];
|
||||
|
||||
assert(cxt);
|
||||
|
@ -197,9 +198,17 @@ int ask_callback(struct fdisk_context *cxt, struct fdisk_ask *ask,
|
|||
fprintf(stderr, ": %m\n");
|
||||
va_end(ap);
|
||||
break;
|
||||
case FDISK_ASKTYPE_YESNO:
|
||||
fputc('\n', stdout);
|
||||
fputs(fdisk_ask_get_query(ask), stdout);
|
||||
rc = get_user_reply(cxt, _(" [Y]es/[N]o: "), buf, sizeof(buf));
|
||||
if (rc == 0)
|
||||
ask->data.yesno.result = rpmatch(buf);
|
||||
DBG(ASK, dbgprint("yes-no ask: reply '%s' [rc=%d]", buf, rc));
|
||||
break;
|
||||
default:
|
||||
warnx(_("internal error: unssuported dialog type %d"), fdisk_ask_get_type(ask));
|
||||
return -EINVAL;
|
||||
}
|
||||
return 0;
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -357,6 +357,47 @@ int fdisk_ask_number(struct fdisk_context *cxt,
|
|||
return rc;
|
||||
}
|
||||
|
||||
int fdisk_ask_yesno(struct fdisk_context *cxt,
|
||||
const char *query,
|
||||
int *result)
|
||||
{
|
||||
struct fdisk_ask *ask;
|
||||
int rc;
|
||||
|
||||
assert(cxt);
|
||||
|
||||
ask = fdisk_new_ask();
|
||||
if (!ask)
|
||||
return -ENOMEM;
|
||||
|
||||
rc = fdisk_ask_set_type(ask, FDISK_ASKTYPE_YESNO);
|
||||
if (!rc)
|
||||
fdisk_ask_set_query(ask, query);
|
||||
if (!rc)
|
||||
rc = fdisk_do_ask(cxt, ask);
|
||||
if (!rc)
|
||||
*result = fdisk_ask_yesno_get_result(ask);
|
||||
|
||||
fdisk_free_ask(ask);
|
||||
DBG(ASK, dbgprint("result: %d [rc=%d]\n", *result, rc));
|
||||
return rc;
|
||||
}
|
||||
|
||||
uint64_t fdisk_ask_yesno_get_result(struct fdisk_ask *ask)
|
||||
{
|
||||
assert(ask);
|
||||
assert(fdisk_is_ask(ask, YESNO));
|
||||
return ask->data.yesno.result;
|
||||
}
|
||||
|
||||
int fdisk_ask_yesno_set_result(struct fdisk_ask *ask, uint64_t result)
|
||||
{
|
||||
assert(ask);
|
||||
ask->data.yesno.result = result;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#define is_print_ask(a) (fdisk_is_ask(a, WARN) || fdisk_is_ask(a, WARNX) || fdisk_is_ask(a, INFO))
|
||||
|
||||
int fdisk_ask_print_get_errno(struct fdisk_ask *ask)
|
||||
|
|
|
@ -234,6 +234,10 @@ struct fdisk_ask {
|
|||
unsigned int has_va:1;
|
||||
int errnum; /* errno */
|
||||
} print;
|
||||
/* FDISK_ASKTYPE_YESNO */
|
||||
struct ask_yesno {
|
||||
int result; /* TRUE or FALSE */
|
||||
} yesno;
|
||||
} data;
|
||||
};
|
||||
|
||||
|
|
|
@ -58,7 +58,8 @@ enum {
|
|||
FDISK_ASKTYPE_OFFSET,
|
||||
FDISK_ASKTYPE_WARN,
|
||||
FDISK_ASKTYPE_WARNX,
|
||||
FDISK_ASKTYPE_INFO
|
||||
FDISK_ASKTYPE_INFO,
|
||||
FDISK_ASKTYPE_YESNO
|
||||
};
|
||||
|
||||
/* init.c */
|
||||
|
@ -159,6 +160,10 @@ extern int fdisk_ask_number(struct fdisk_context *cxt,
|
|||
const char *query,
|
||||
uintmax_t *result);
|
||||
|
||||
extern int fdisk_ask_yesno(struct fdisk_context *cxt, const char *query, int *result);
|
||||
extern uint64_t fdisk_ask_yesno_get_result(struct fdisk_ask *ask);
|
||||
extern int fdisk_ask_yesno_set_result(struct fdisk_ask *ask, uint64_t result);
|
||||
|
||||
extern int fdisk_info(struct fdisk_context *cxt, const char *fmt, ...);
|
||||
extern int fdisk_warnx(struct fdisk_context *cxt, const char *fmt, ...);
|
||||
extern int fdisk_warn(struct fdisk_context *cxt, const char *fmt, ...);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue