From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752895AbcBXACD (ORCPT ); Tue, 23 Feb 2016 19:02:03 -0500 Received: from mail-wm0-f47.google.com ([74.125.82.47]:34604 "EHLO mail-wm0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750899AbcBXACA (ORCPT ); Tue, 23 Feb 2016 19:02:00 -0500 From: Rasmus Villemoes To: Jessica Yu Cc: Andrew Morton , Andy Shevchenko , Kees Cook , linux-kernel@vger.kernel.org Subject: Re: [PATCH v3] sscanf: implement basic character sets Organization: D03 References: <1456259902-31792-1-git-send-email-jeyu@redhat.com> <87bn77gi34.fsf@rasmusvillemoes.dk> X-Hashcash: 1:20:160223:linux-kernel@vger.kernel.org::+jzlsvKjq5GUmUjx:000000000000000000000000000000000103z X-Hashcash: 1:20:160223:keescook@chromium.org::d2z1keXH2DemBhxz:00000000000000000000000000000000000000001gkx X-Hashcash: 1:20:160223:andriy.shevchenko@linux.intel.com::EK62p5gmkGEZ8DvO:00000000000000000000000000007155 X-Hashcash: 1:20:160223:jeyu@redhat.com::PLYURtMwRT3wzWUN:006Rg6 X-Hashcash: 1:20:160223:akpm@linux-foundation.org::Y4ZcpFxMD6tRUvSq:000000000000000000000000000000000000AAdk Date: Wed, 24 Feb 2016 01:01:57 +0100 In-Reply-To: <87bn77gi34.fsf@rasmusvillemoes.dk> (Rasmus Villemoes's message of "Tue, 23 Feb 2016 23:47:11 +0100") Message-ID: <87fuwj9dsa.fsf@rasmusvillemoes.dk> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Feb 23 2016, Rasmus Villemoes wrote: > On that note, it seems that your field width handling is off-by-one. Sorry about that, it's me who's off-by-one. Rasmus > To get rid of the allocation, why not use a small bitmap? Something like > > { > char *s = (char *)va_arg(args, char *); > DECLARE_BITMAP(map, 256) = {0}; > bool negate = false; > > /* a field width is required, and must provide room for at least a '\0' */ > if (field_width <= 0) > return num; > should be /* a field width is required */ if (field_width < 0) and > while (test_bit((u8)*str, map) && --field_width) { should be field_width--, exactly as in your code.