From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_PASS,USER_AGENT_NEOMUTT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 16342C10F0E for ; Fri, 12 Apr 2019 14:04:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E30EC2083E for ; Fri, 12 Apr 2019 14:04:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726882AbfDLOD6 (ORCPT ); Fri, 12 Apr 2019 10:03:58 -0400 Received: from mx2.suse.de ([195.135.220.15]:51920 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726714AbfDLOD6 (ORCPT ); Fri, 12 Apr 2019 10:03:58 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id D5469AD63; Fri, 12 Apr 2019 14:03:54 +0000 (UTC) Date: Fri, 12 Apr 2019 16:03:53 +0200 From: Petr Mladek To: Alastair D'Silva Cc: alastair@d-silva.org, Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , David Airlie , Daniel Vetter , Karsten Keil , Jassi Brar , Tom Lendacky , "David S. Miller" , Jose Abreu , Kalle Valo , Stanislaw Gruszka , Benson Leung , Enric Balletbo i Serra , "James E.J. Bottomley" , "Martin K. Petersen" , Greg Kroah-Hartman , Alexander Viro , Sergey Senozhatsky , Steven Rostedt , Andrew Morton , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, ath10k@lists.infradead.org, linux-wireless@vger.kernel.org, linux-scsi@vger.kernel.org, linux-fbdev@vger.kernel.org, devel@driverdev.osuosl.org, linux-fsdevel@vger.kernel.org Subject: Re: [PATCH 2/4] lib/hexdump.c: Optionally suppress lines of filler bytes Message-ID: <20190412140353.mgvksn3yk6n65hbk@pathway.suse.cz> References: <20190410031720.11067-1-alastair@au1.ibm.com> <20190410031720.11067-3-alastair@au1.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190410031720.11067-3-alastair@au1.ibm.com> User-Agent: NeoMutt/20170912 (1.9.0) Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org On Wed 2019-04-10 13:17:18, Alastair D'Silva wrote: > From: Alastair D'Silva > > Some buffers may only be partially filled with useful data, while the rest > is padded (typically with 0x00 or 0xff). > > This patch introduces flags which allow lines of padding bytes to be > suppressed, making the output easier to interpret: HEXDUMP_SUPPRESS_0X00, > HEXDUMP_SUPPRESS_0XFF > > The first and last lines are not suppressed by default, so the function > always outputs something. This behaviour can be further controlled with > the HEXDUMP_SUPPRESS_FIRST & HEXDUMP_SUPPRESS_LAST flags. > > An inline wrapper function is provided for backwards compatibility with > existing code, which maintains the original behaviour. > > diff --git a/lib/hexdump.c b/lib/hexdump.c > index b8a164814744..2f3bafb55a44 100644 > --- a/lib/hexdump.c > +++ b/lib/hexdump.c > +void print_hex_dump_ext(const char *level, const char *prefix_str, > + int prefix_type, int rowsize, int groupsize, > + const void *buf, size_t len, u64 flags) > { > const u8 *ptr = buf; > - int i, linelen, remaining = len; > + int i, remaining = len; > unsigned char linebuf[64 * 3 + 2 + 64 + 1]; > + bool first_line = true; > > if (rowsize != 16 && rowsize != 32 && rowsize != 64) > rowsize = 16; > > for (i = 0; i < len; i += rowsize) { > - linelen = min(remaining, rowsize); > + bool skip = false; > + int linelen = min(remaining, rowsize); > + > remaining -= rowsize; > > + if (flags & HEXDUMP_SUPPRESS_0X00) > + skip = buf_is_all(ptr + i, linelen, 0x00); > + > + if (!skip && (flags & HEXDUMP_SUPPRESS_0XFF)) > + skip = buf_is_all(ptr + i, linelen, 0xff); > + > + if (first_line && !(flags & HEXDUMP_SUPPRESS_FIRST)) > + skip = false; > + > + if (remaining <= 0 && !(flags & HEXDUMP_SUPPRESS_LAST)) > + skip = false; > + > + if (skip) > + continue; IMHO, quietly skipping lines could cause a lot of confusion, espcially when the address is not printed. I wonder how it would look like when we print something like: --- skipped XX lines full of 0x00 --- Then we might even remove the SUPPRESS_FIRST, SUPPRESS_LAST and the ambiguous QUIET flags. > + > + first_line = false; This should be above the if (skip). > + > hex_dump_to_buffer(ptr + i, linelen, rowsize, groupsize, > - linebuf, sizeof(linebuf), ascii); > + linebuf, sizeof(linebuf), > + flags & HEXDUMP_ASCII); > > switch (prefix_type) { > case DUMP_PREFIX_ADDRESS: > @@ -272,7 +316,7 @@ void print_hex_dump(const char *level, const char *prefix_str, int prefix_type, > } > } > } > -EXPORT_SYMBOL(print_hex_dump); > +EXPORT_SYMBOL(print_hex_dump_ext); We should still export even the original function that is still used everywhere. Best Regards, Petr