From patchwork Tue Jan 15 00:37:10 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Theodore Ts'o X-Patchwork-Id: 211963 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 66AD12C00A2 for ; Tue, 15 Jan 2013 11:37:25 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756769Ab3AOAhZ (ORCPT ); Mon, 14 Jan 2013 19:37:25 -0500 Received: from li9-11.members.linode.com ([67.18.176.11]:43392 "EHLO imap.thunk.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756760Ab3AOAhY (ORCPT ); Mon, 14 Jan 2013 19:37:24 -0500 Received: from root (helo=closure.thunk.org) by imap.thunk.org with local-esmtp (Exim 4.80) (envelope-from ) id 1TuuWf-0008CP-H2; Tue, 15 Jan 2013 00:37:13 +0000 Received: by closure.thunk.org (Postfix, from userid 15806) id 3BBA82E99A1; Mon, 14 Jan 2013 19:37:12 -0500 (EST) From: Theodore Ts'o To: Ext4 Developers List Cc: gnehzuil.liu@gmail.com, Theodore Ts'o Subject: [PATCH 3/5] libe2p: teach parse_num_blocks2() to return bytes if log_block_size < 0 Date: Mon, 14 Jan 2013 19:37:10 -0500 Message-Id: <1358210232-30578-3-git-send-email-tytso@mit.edu> X-Mailer: git-send-email 1.7.12.rc0.22.gcdd159b In-Reply-To: <1358210232-30578-1-git-send-email-tytso@mit.edu> References: <20130114211014.GA22642@thunk.org> <1358210232-30578-1-git-send-email-tytso@mit.edu> X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: tytso@thunk.org X-SA-Exim-Scanned: No (on imap.thunk.org); SAEximRunCond expanded to false Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org Previously the behavior of parse_num_block2 was undefined if log_block_size was less than zero. It will now return a number in units of bytes. Signed-off-by: "Theodore Ts'o" Reviewed-by: Zheng Liu --- lib/e2p/parse_num.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/lib/e2p/parse_num.c b/lib/e2p/parse_num.c index d9ad3e7..cb0dc5b 100644 --- a/lib/e2p/parse_num.c +++ b/lib/e2p/parse_num.c @@ -35,10 +35,16 @@ unsigned long long parse_num_blocks2(const char *arg, int log_block_size) num <<= 10; /* fallthrough */ case 'K': case 'k': - num >>= log_block_size; + if (log_block_size < 0) + num <<= 10; + else + num >>= log_block_size; break; case 's': - num >>= (1+log_block_size); + if (log_block_size < 0) + num << 1; + else + num >>= (1+log_block_size); break; case '\0': break; @@ -62,11 +68,21 @@ main(int argc, char **argv) unsigned long num; int log_block_size = 0; - if (argc != 2) { - fprintf(stderr, "Usage: %s arg\n", argv[0]); + if (argc != 2 && argc != 3) { + fprintf(stderr, "Usage: %s arg [log_block_size]\n", argv[0]); exit(1); } + if (argc == 3) { + char *p; + + log_block_size = strtol(argv[2], &p, 0); + if (*p) { + fprintf(stderr, "Bad log_block_size: %s\n", argv[2]); + exit(1); + } + } + num = parse_num_blocks(argv[1], log_block_size); printf("Parsed number: %lu\n", num);