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__)))
|
void *data __attribute__((__unused__)))
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
int rc = 0;
|
||||||
char buf[BUFSIZ];
|
char buf[BUFSIZ];
|
||||||
|
|
||||||
assert(cxt);
|
assert(cxt);
|
||||||
|
@ -197,9 +198,17 @@ int ask_callback(struct fdisk_context *cxt, struct fdisk_ask *ask,
|
||||||
fprintf(stderr, ": %m\n");
|
fprintf(stderr, ": %m\n");
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
break;
|
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:
|
default:
|
||||||
warnx(_("internal error: unssuported dialog type %d"), fdisk_ask_get_type(ask));
|
warnx(_("internal error: unssuported dialog type %d"), fdisk_ask_get_type(ask));
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
return 0;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
|
@ -357,6 +357,47 @@ int fdisk_ask_number(struct fdisk_context *cxt,
|
||||||
return rc;
|
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))
|
#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)
|
int fdisk_ask_print_get_errno(struct fdisk_ask *ask)
|
||||||
|
|
|
@ -234,6 +234,10 @@ struct fdisk_ask {
|
||||||
unsigned int has_va:1;
|
unsigned int has_va:1;
|
||||||
int errnum; /* errno */
|
int errnum; /* errno */
|
||||||
} print;
|
} print;
|
||||||
|
/* FDISK_ASKTYPE_YESNO */
|
||||||
|
struct ask_yesno {
|
||||||
|
int result; /* TRUE or FALSE */
|
||||||
|
} yesno;
|
||||||
} data;
|
} data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,8 @@ enum {
|
||||||
FDISK_ASKTYPE_OFFSET,
|
FDISK_ASKTYPE_OFFSET,
|
||||||
FDISK_ASKTYPE_WARN,
|
FDISK_ASKTYPE_WARN,
|
||||||
FDISK_ASKTYPE_WARNX,
|
FDISK_ASKTYPE_WARNX,
|
||||||
FDISK_ASKTYPE_INFO
|
FDISK_ASKTYPE_INFO,
|
||||||
|
FDISK_ASKTYPE_YESNO
|
||||||
};
|
};
|
||||||
|
|
||||||
/* init.c */
|
/* init.c */
|
||||||
|
@ -159,6 +160,10 @@ extern int fdisk_ask_number(struct fdisk_context *cxt,
|
||||||
const char *query,
|
const char *query,
|
||||||
uintmax_t *result);
|
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_info(struct fdisk_context *cxt, const char *fmt, ...);
|
||||||
extern int fdisk_warnx(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, ...);
|
extern int fdisk_warn(struct fdisk_context *cxt, const char *fmt, ...);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue