return -1;
}
-static void fputs_info(const char *msg, FILE *out, char *buf, size_t bufsz)
+static void fputs_info(struct fdisk_ask *ask, FILE *out, char *buf, size_t bufsz)
{
+ const char *msg;
+ unsigned int flags;
+
+ assert(ask);
+
+ msg = fdisk_ask_print_get_mesg(ask);
+ flags = fdisk_ask_get_flags(ask);
+
+ if (!msg)
+ return;
if (info_count == 1)
fputc('\n', out);
+ if (flags == 0 || !colors_wanted())
+ goto simple;
- if (msg && colors_wanted()) {
+ if (flags & FDISK_INFO_COLON) {
+ size_t sz;
char *sep = _(": ");
char *p = strstr(msg, sep);
- if (p) {
- size_t sz = strlen(sep);
-
- strncpy(buf, msg, bufsz);
- buf[p - msg + sz] = '\0';
-
- color_enable(UL_COLOR_BROWN);
- fputs(buf, out);
- color_disable();
- fputs(p + sz, out);
- goto done;
- }
+ if (!p)
+ goto simple;
+
+ sz = strlen(sep);
+ strncpy(buf, msg, bufsz);
+ buf[p - msg + sz] = '\0';
+
+ color_enable(UL_COLOR_BROWN);
+ fputs(buf, out);
+ color_disable();
+ fputs(p + sz, out);
+
+ } else if (flags & FDISK_INFO_SUCCESS) {
+ color_enable(UL_COLOR_BOLD);
+ fputs(msg, out);
+ color_disable();
+ } else {
+simple:
+ fputs(msg, out);
}
-
- fputs(msg, out);
-done:
fputc('\n', out);
}
return ask_offset(cxt, ask, buf, sizeof(buf));
case FDISK_ASKTYPE_INFO:
info_count++;
- fputs_info(fdisk_ask_print_get_mesg(ask), stdout, buf, sizeof(buf));
+ fputs_info(ask, stdout, buf, sizeof(buf));
break;
case FDISK_ASKTYPE_WARNX:
color_fenable(UL_COLOR_RED, stderr);
return 0;
}
+unsigned int fdisk_ask_get_flags(struct fdisk_ask *ask)
+{
+ assert(ask);
+ return ask->flags;
+}
+
+int fdisk_ask_set_flags(struct fdisk_ask *ask, unsigned int flags)
+{
+ assert(ask);
+ ask->flags = flags;
+ return 0;
+}
+
int fdisk_do_ask(struct fdisk_context *cxt, struct fdisk_ask *ask)
{
int rc;
}
static int do_vprint(struct fdisk_context *cxt, int errnum, int type,
- const char *fmt, va_list va)
+ unsigned int flags, const char *fmt, va_list va)
{
struct fdisk_ask *ask;
int rc;
}
fdisk_ask_set_type(ask, type);
+ fdisk_ask_set_flags(ask, flags);
fdisk_ask_print_set_mesg(ask, mesg);
if (errnum >= 0)
fdisk_ask_print_set_errno(ask, errnum);
assert(cxt);
va_start(ap, fmt);
- rc = do_vprint(cxt, -1, FDISK_ASKTYPE_INFO, fmt, ap);
+ rc = do_vprint(cxt, -1, FDISK_ASKTYPE_INFO, 0, fmt, ap);
va_end(ap);
return rc;
}
+/* "smart" version, allows to set flags for the message */
+int fdisk_sinfo(struct fdisk_context *cxt,
+ unsigned int flags, const char *fmt, ...)
+{
+ int rc;
+ va_list ap;
+
+ assert(cxt);
+ va_start(ap, fmt);
+ rc = do_vprint(cxt, -1, FDISK_ASKTYPE_INFO, flags, fmt, ap);
+ va_end(ap);
+ return rc;
+
+}
+
+int fdisk_colon(struct fdisk_context *cxt, const char *fmt, ...)
+{
+ int rc;
+ va_list ap;
+
+ assert(cxt);
+ va_start(ap, fmt);
+ rc = do_vprint(cxt, -1, FDISK_ASKTYPE_INFO, FDISK_INFO_COLON, fmt, ap);
+ va_end(ap);
+ return rc;
+
+}
+
int fdisk_warn(struct fdisk_context *cxt, const char *fmt, ...)
{
int rc;
assert(cxt);
va_start(ap, fmt);
- rc = do_vprint(cxt, errno, FDISK_ASKTYPE_WARN, fmt, ap);
+ rc = do_vprint(cxt, errno, FDISK_ASKTYPE_WARN, 0, fmt, ap);
va_end(ap);
return rc;
}
assert(cxt);
va_start(ap, fmt);
- rc = do_vprint(cxt, -1, FDISK_ASKTYPE_WARNX, fmt, ap);
+ rc = do_vprint(cxt, -1, FDISK_ASKTYPE_WARNX, 0, fmt, ap);
va_end(ap);
return rc;
}
char *str = size_to_human_string(SIZE_SUFFIX_3LETTER | SIZE_SUFFIX_SPACE,
(uint64_t)(stop - start + 1) * cxt->sector_size);
- rc = fdisk_info(cxt, _("Partition %d of type %s and of size %s is set\n"),
+ rc = fdisk_sinfo(cxt, FDISK_INFO_SUCCESS,
+ _("Partition %d of type %s and of size %s is set."),
num, t ? t->name : _("Unknown"), str);
free(str);
return rc;
FDISK_ASKTYPE_STRING
};
-
+/* extra flags for info massages (see fdisk_sinfo() */
+enum {
+ FDISK_INFO_COLON = 1, /* colorize "foo bar:" prefix in the message */
+ FDISK_INFO_SUCCESS, /* info after successful action */
+};
/* init.c */
extern void fdisk_init_debug(int mask);
extern int fdisk_ask_set_query(struct fdisk_ask *ask, const char *str);
extern int fdisk_ask_get_type(struct fdisk_ask *ask);
extern int fdisk_ask_set_type(struct fdisk_ask *ask, int type);
+extern int fdisk_ask_set_flags(struct fdisk_ask *ask, unsigned int flags);
+extern unsigned int fdisk_ask_get_flags(struct fdisk_ask *ask);
+
extern int fdisk_do_ask(struct fdisk_context *cxt, struct fdisk_ask *ask);
extern const char *fdisk_ask_number_get_range(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_colon(struct fdisk_context *cxt, const char *fmt, ...);
+extern int fdisk_sinfo(struct fdisk_context *cxt, unsigned int flags, 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, ...);