[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