static int ask_callback(struct fdisk_context *cxt, struct fdisk_ask *ask, void *data) { struct sfdisk *sf = (struct sfdisk *) data; int rc = 0; assert(cxt); assert(ask); switch(fdisk_ask_get_type(ask)) { case FDISK_ASKTYPE_INFO: if (sf->quiet) break; fputs(fdisk_ask_print_get_mesg(ask), stdout); fputc('\n', stdout); break; case FDISK_ASKTYPE_WARNX: color_scheme_fenable("warn", UL_COLOR_RED, stderr); fputs(fdisk_ask_print_get_mesg(ask), stderr); color_fdisable(stderr); fputc('\n', stderr); break; case FDISK_ASKTYPE_WARN: color_scheme_fenable("warn", UL_COLOR_RED, stderr); fputs(fdisk_ask_print_get_mesg(ask), stderr); errno = fdisk_ask_print_get_errno(ask); fprintf(stderr, ": %m\n"); color_fdisable(stderr); break; case FDISK_ASKTYPE_YESNO: { char buf[BUFSIZ]; fputc('\n', stdout); do { int x; fputs(fdisk_ask_get_query(ask), stdout); rc = get_user_reply(_(" [Y]es/[N]o: "), buf, sizeof(buf)); if (rc) break; x = rpmatch(buf); if (x == RPMATCH_YES || x == RPMATCH_NO) { fdisk_ask_yesno_set_result(ask, x); break; } } while(1); DBG(ASK, ul_debug("yes-no ask: reply '%s' [rc=%d]", buf, rc)); break; } default: break; } return rc; }
static void fputs_info(struct fdisk_ask *ask, FILE *out) { const char *msg; assert(ask); msg = fdisk_ask_print_get_mesg(ask); if (!msg) return; if (info_count == 1) fputc('\n', out); fputs(msg, out); fputc('\n', out); }