From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24548 invoked by alias); 10 Mar 2011 14:51:36 -0000 Received: (qmail 24531 invoked by uid 9737); 10 Mar 2011 14:51:36 -0000 Date: Thu, 10 Mar 2011 14:51:00 -0000 Message-ID: <20110310145136.24528.qmail@sourceware.org> From: zkabelac@sourceware.org To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org Subject: LVM2 lib/config/config.c ./WHATS_NEW Mailing-List: contact lvm2-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: lvm2-cvs-owner@sourceware.org X-SW-Source: 2011-03/txt/msg00045.txt.bz2 CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: zkabelac@sourceware.org 2011-03-10 14:51:36 Modified files: lib/config : config.c . : WHATS_NEW Log message: Optimise _eat_space and _get_token Makes the code more readable and has a smaller number of memory accesses thus it's small optimisation as well. For _get_token() optimize number parsing. Check for '.' char only if it's not a digit. Move pointer incrementation into one place. For _eat_space() check only p->te for '\0' in skipping of comment line. Avoid check for '\0' when we know it is space. Also master while loop doesn't need checking p->tb for '\0'. We just need to check p->tb isn't already at the end of buffer. This could give 'extra' loop cycle if we are already there - but safes memory access in every other case. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/config/config.c.diff?cvsroot=lvm2&r1=1.90&r2=1.91 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1943&r2=1.1944 --- LVM2/lib/config/config.c 2011/02/28 19:53:03 1.90 +++ LVM2/lib/config/config.c 2011/03/10 14:51:35 1.91 @@ -822,18 +822,20 @@ case '+': case '-': if (values_allowed) { - te++; - while ((te != p->fe) && (*te)) { - if (*te == '.') { - if (p->t == TOK_FLOAT) - break; - p->t = TOK_FLOAT; - } else if (!isdigit((int) *te)) + while (++te != p->fe) { + if (!isdigit((int) *te)) { + if (*te == '.') { + if (p->t != TOK_FLOAT) { + p->t = TOK_FLOAT; + continue; + } + } break; - te++; + } } break; } + /* fall through */ default: p->t = TOK_IDENTIFIER; @@ -850,21 +852,19 @@ static void _eat_space(struct parser *p) { - while ((p->tb != p->fe) && (*p->tb)) { + while (p->tb != p->fe) { if (*p->te == '#') - while ((p->te != p->fe) && (*p->te) && (*p->te != '\n')) - p->te++; + while ((p->te != p->fe) && (*p->te != '\n') && (*p->te)) + ++p->te; - else if (isspace(*p->te)) { - while ((p->te != p->fe) && (*p->te) && isspace(*p->te)) { - if (*p->te == '\n') - p->line++; - p->te++; - } - } + else if (!isspace(*p->te)) + break; - else - return; + while ((p->te != p->fe) && isspace(*p->te)) { + if (*p->te == '\n') + ++p->line; + ++p->te; + } p->tb = p->te; } --- LVM2/WHATS_NEW 2011/03/10 14:40:33 1.1943 +++ LVM2/WHATS_NEW 2011/03/10 14:51:35 1.1944 @@ -1,5 +1,6 @@ Version 2.02.85 - =================================== + Optimise _get_token() and _eat_space(). Add _lv_postorder_vg() to improve efficiency for all LVs in VG. Use hash tables to speedup string search in validate_vg(). Refactor allocation of VG structure, add alloc_vg().