[PATCH] makedumpfile: Support line mode terminals
Ken'ichi Ohmichi
oomichi at mxs.nes.nec.co.jp
Thu Aug 18 20:31:09 EDT 2011
Hi Michael,
On Mon, 15 Aug 2011 15:24:26 +0200
Michael Holzheu <holzheu at linux.vnet.ibm.com> wrote:
>
> From: Michael Holzheu <holzheu at linux.vnet.ibm.com>
>
> On S390 we have line mode terminals that do not have the ability to
> position the cursor. When using kdump the output of makedumpfile will be shown
> on such terminals. Currently the output looks very strange because the '\r'
> control character is ignored. It looks like the following:
>
> Checking for memory holes : [ 0 %] Checking for memory holes
> : [100 %] Copying data : [ 33 %] Copying data
> : [ 65 %] Copying data : [ 96 %] Copying d
> ata : [100 %]
>
> For those line mode terminals the TERM environment variable is set to "dumb".
> With this patch makedumpfile checks the TERM variable and in case of "dumb"
> instead of using '\r' each progress message is printed into a separate line.
> The output will then look like the following:
>
> Checking for memory holes : [ 0 %]
> Checking for memory holes : [100 %]
> Copying data : [ 11 %]
> Copying data : [ 44 %]
> Copying data : [ 75 %]
> Copying data : [100 %]
>
> Signed-off-by: Michael Holzheu <holzheu at linux.vnet.ibm.com>
Thank you for the patch, and it has been merged to devel tree.
http://makedumpfile.git.sourceforge.net/git/gitweb.cgi?p=makedumpfile/makedumpfile;a=commit;h=4b4e1625a5ebe37cb0991fe1628f19bca2b1502f
Acked-by: Ken'ichi Ohmichi <oomichi at mxs.nes.nec.co.jp>
Thanks
Ken'ichi Ohmichi
> ---
> makedumpfile.c | 22 +++++++++++++++++++---
> 1 file changed, 19 insertions(+), 3 deletions(-)
>
> --- a/makedumpfile.c
> +++ b/makedumpfile.c
> @@ -29,6 +29,7 @@ struct DumpInfo *info = NULL;
>
> char filename_stdout[] = FILENAME_STDOUT;
> int message_level;
> +static int dumb_term;
>
> /*
> * Forward declarations
> @@ -5661,9 +5662,14 @@ print_progress(const char *msg, unsigned
> progress = current * 100 / end;
> } else
> progress = 100;
> -
> - PROGRESS_MSG("\r");
> - PROGRESS_MSG("%-" PROGRESS_MAXLEN "s: [%3d %%] ", msg, progress);
> + if (dumb_term) {
> + PROGRESS_MSG("%-" PROGRESS_MAXLEN "s: [%3d %%]\n",
> + msg, progress);
> + } else {
> + PROGRESS_MSG("\r");
> + PROGRESS_MSG("%-" PROGRESS_MAXLEN "s: [%3d %%] ",
> + msg, progress);
> + }
> }
>
> unsigned long long
> @@ -7825,11 +7831,21 @@ static struct option longopts[] = {
> {0, 0, 0, 0}
> };
>
> +static void setup_term(void)
> +{
> + char *term_str = getenv("TERM");
> +
> + if (term_str && strcmp(term_str, "dumb") == 0)
> + dumb_term = 1;
> +}
> +
> int
> main(int argc, char *argv[])
> {
> int i, opt, flag_debug = FALSE;
>
> + setup_term();
> +
> if ((info = calloc(1, sizeof(struct DumpInfo))) == NULL) {
> ERRMSG("Can't allocate memory for the pagedesc cache. %s.\n",
> strerror(errno));
>
>
More information about the kexec
mailing list