void *data __attribute__((__unused__)))
{
va_list ap;
+ int rc = 0;
char buf[BUFSIZ];
assert(cxt);
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;
}
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)
unsigned int has_va:1;
int errnum; /* errno */
} print;
+ /* FDISK_ASKTYPE_YESNO */
+ struct ask_yesno {
+ int result; /* TRUE or FALSE */
+ } yesno;
} data;
};
FDISK_ASKTYPE_OFFSET,
FDISK_ASKTYPE_WARN,
FDISK_ASKTYPE_WARNX,
- FDISK_ASKTYPE_INFO
+ FDISK_ASKTYPE_INFO,
+ FDISK_ASKTYPE_YESNO
};
/* init.c */
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, ...);