diff options
Diffstat (limited to 'core/util-linux/0001-libfdisk-do-not-use-va_list-in-the-Ask-API.patch')
-rw-r--r-- | core/util-linux/0001-libfdisk-do-not-use-va_list-in-the-Ask-API.patch | 163 |
1 files changed, 0 insertions, 163 deletions
diff --git a/core/util-linux/0001-libfdisk-do-not-use-va_list-in-the-Ask-API.patch b/core/util-linux/0001-libfdisk-do-not-use-va_list-in-the-Ask-API.patch deleted file mode 100644 index 86bb6e572..000000000 --- a/core/util-linux/0001-libfdisk-do-not-use-va_list-in-the-Ask-API.patch +++ /dev/null @@ -1,163 +0,0 @@ -From 4fb18cde32a6cb672090762c785d89a6ed02ef57 Mon Sep 17 00:00:00 2001 -From: Karel Zak <kzak@redhat.com> -Date: Thu, 9 May 2013 13:06:02 +0200 -Subject: [PATCH] libfdisk: do not use va_list in the Ask API - - # fdisk /dev/sda - Welcome to fdisk (util-linux 2.23). - - [...] - - Command (m for help): a - Segmentation fault (core dumped) - -It's too fragile, the va_list implementation is architecture specific -and it seems we need such thing in libfdisk at all. - -Reported-by: "Gabor Z. Papp" <gzp@papp.hu> -Signed-off-by: Karel Zak <kzak@redhat.com> ---- - fdisks/fdisk-ask.c | 13 +++---------- - libfdisk/src/ask.c | 35 +++++++++-------------------------- - libfdisk/src/fdiskP.h | 2 -- - libfdisk/src/libfdisk.h | 2 -- - 4 files changed, 12 insertions(+), 40 deletions(-) - -diff --git a/fdisks/fdisk-ask.c b/fdisks/fdisk-ask.c -index 7495d85..61dc0c2 100644 ---- a/fdisks/fdisk-ask.c -+++ b/fdisks/fdisk-ask.c -@@ -167,7 +167,6 @@ static int ask_offset(struct fdisk_context *cxt, - int ask_callback(struct fdisk_context *cxt, struct fdisk_ask *ask, - void *data __attribute__((__unused__))) - { -- va_list ap; - int rc = 0; - char buf[BUFSIZ]; - -@@ -180,23 +179,17 @@ int ask_callback(struct fdisk_context *cxt, struct fdisk_ask *ask, - case FDISK_ASKTYPE_OFFSET: - return ask_offset(cxt, ask, buf, sizeof(buf)); - case FDISK_ASKTYPE_INFO: -- fdisk_ask_print_get_va(ask, ap); -- vfprintf(stdout, fdisk_ask_print_get_mesg(ask), ap); -+ fputs(fdisk_ask_print_get_mesg(ask), stdout); - fputc('\n', stdout); -- va_end(ap); - break; - case FDISK_ASKTYPE_WARNX: -- fdisk_ask_print_get_va(ask, ap); -- vfprintf(stderr, fdisk_ask_print_get_mesg(ask), ap); -+ fputs(fdisk_ask_print_get_mesg(ask), stderr); - fputc('\n', stderr); -- va_end(ap); - break; - case FDISK_ASKTYPE_WARN: -- fdisk_ask_print_get_va(ask, ap); -- vfprintf(stderr, fdisk_ask_print_get_mesg(ask), ap); -+ fputs(fdisk_ask_print_get_mesg(ask), stderr); - errno = fdisk_ask_print_get_errno(ask); - fprintf(stderr, ": %m\n"); -- va_end(ap); - break; - case FDISK_ASKTYPE_YESNO: - fputc('\n', stdout); -diff --git a/libfdisk/src/ask.c b/libfdisk/src/ask.c -index d2325d5..cdb4d01 100644 ---- a/libfdisk/src/ask.c -+++ b/libfdisk/src/ask.c -@@ -18,11 +18,6 @@ void fdisk_reset_ask(struct fdisk_ask *ask) - case FDISK_ASKTYPE_NUMBER: - free(ask->data.num.range); - break; -- case FDISK_ASKTYPE_WARNX: -- case FDISK_ASKTYPE_WARN: -- if (ask->data.print.has_va) -- va_end(ask->data.print.va); -- break; - default: - break; - } -@@ -452,44 +447,32 @@ int fdisk_ask_print_set_mesg(struct fdisk_ask *ask, const char *mesg) - return 0; - } - --/* caller has to call va_end(ap) */ --int fdisk_ask_print_get_va(struct fdisk_ask *ask, va_list ap) --{ -- assert(ask); -- assert(is_print_ask(ask)); -- va_copy(ap, ask->data.print.va); -- return 0; --} -- --/* note that fdisk_free_ask() calls va_end() to free the private va list. */ --int fdisk_ask_print_set_va(struct fdisk_ask *ask, va_list ap) --{ -- assert(ask); -- va_copy(ask->data.print.va, ap); -- ask->data.print.has_va = 1; -- return 0; --} -- - static int do_vprint(struct fdisk_context *cxt, int errnum, int type, - const char *fmt, va_list va) - { - struct fdisk_ask *ask; - int rc; -+ char *mesg; - - assert(cxt); - -+ if (vasprintf(&mesg, fmt, va) < 0) -+ return -ENOMEM; -+ - ask = fdisk_new_ask(); -- if (!ask) -+ if (!ask) { -+ free(mesg); - return -ENOMEM; -+ } - - fdisk_ask_set_type(ask, type); -- fdisk_ask_print_set_mesg(ask, fmt); -- fdisk_ask_print_set_va(ask, va); -+ fdisk_ask_print_set_mesg(ask, mesg); - if (errnum >= 0) - fdisk_ask_print_set_errno(ask, errnum); - rc = fdisk_do_ask(cxt, ask); - - fdisk_free_ask(ask); -+ free(mesg); - return rc; - } - -diff --git a/libfdisk/src/fdiskP.h b/libfdisk/src/fdiskP.h -index 570108c..ce42860 100644 ---- a/libfdisk/src/fdiskP.h -+++ b/libfdisk/src/fdiskP.h -@@ -231,8 +231,6 @@ struct fdisk_ask { - /* FDISK_ASKTYPE_{WARN,WARNX,..} */ - struct ask_print { - const char *mesg; -- va_list va; -- unsigned int has_va:1; - int errnum; /* errno */ - } print; - /* FDISK_ASKTYPE_YESNO */ -diff --git a/libfdisk/src/libfdisk.h b/libfdisk/src/libfdisk.h -index 0a23236..8a44067 100644 ---- a/libfdisk/src/libfdisk.h -+++ b/libfdisk/src/libfdisk.h -@@ -182,8 +182,6 @@ extern int fdisk_ask_print_get_errno(struct fdisk_ask *ask); - extern int fdisk_ask_print_set_errno(struct fdisk_ask *ask, int errnum); - extern const char *fdisk_ask_print_get_mesg(struct fdisk_ask *ask); - extern int fdisk_ask_print_set_mesg(struct fdisk_ask *ask, const char *mesg); --extern int fdisk_ask_print_get_va(struct fdisk_ask *ask, va_list ap); --extern int fdisk_ask_print_set_va(struct fdisk_ask *ask, va_list ap); - - #ifdef __cplusplus - } --- -1.8.2.3 - |