From 4c90306502f858ec95683baf2bfeb9b1fe669c66 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 21 Jul 2007 13:39:02 +0200 Subject: Made skipspace() an inline function and changed it to handle the most common case of 'no leading space' very fast, and avoid calling isspace() --- CONTRIBUTORS | 1 + HISTORY | 5 ++++- tools.c | 9 +-------- tools.h | 11 +++++++++-- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 937e2a59..6ea33dcc 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2114,3 +2114,4 @@ Patrice Staudt Tobias Bratfisch for improving numdigits(), isnumber() and strreplace() + for suggesting to make skipspace() an inline function diff --git a/HISTORY b/HISTORY index 317bfcbe..6b933e80 100644 --- a/HISTORY +++ b/HISTORY @@ -5276,7 +5276,7 @@ Video Disk Recorder Revision History - Improved performance of the SVDRP commands LSTC and CHAN when used with a channel name. -2007-07-20: Version 1.5.6 +2007-07-21: Version 1.5.6 - Fixed a buffer overflow in initializing the system character table (thanks to Marco Schlüßler). @@ -5290,3 +5290,6 @@ Video Disk Recorder Revision History - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). - Improved cControl::Launch() to keep 'control' from pointing to uninitialized memory (thanks to Rolf Ahrenberg). +- Made skipspace() an inline function (suggested by Tobias Bratfisch) and changed + it to handle the most common case of 'no leading space' very fast, and avoid + calling isspace(), which made the whole function a lot faster. diff --git a/tools.c b/tools.c index dc91d11a..0d471bb7 100644 --- a/tools.c +++ b/tools.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.c 1.133 2007/07/20 14:25:46 kls Exp $ + * $Id: tools.c 1.134 2007/07/21 13:02:45 kls Exp $ */ #include "tools.h" @@ -167,13 +167,6 @@ char *strreplace(char *s, const char *s1, const char *s2) return s; } -char *skipspace(const char *s) -{ - while (*s && isspace(*s)) - s++; - return (char *)s; -} - char *stripspace(char *s) { if (s && *s) { diff --git a/tools.h b/tools.h index fc9c87bf..a0c5a528 100644 --- a/tools.h +++ b/tools.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.h 1.103 2007/06/23 13:34:28 kls Exp $ + * $Id: tools.h 1.104 2007/07/21 13:35:45 kls Exp $ */ #ifndef __TOOLS_H @@ -173,7 +173,14 @@ char *strcpyrealloc(char *dest, const char *src); char *strn0cpy(char *dest, const char *src, size_t n); char *strreplace(char *s, char c1, char c2); char *strreplace(char *s, const char *s1, const char *s2); ///< re-allocates 's' and deletes the original string if necessary! -char *skipspace(const char *s); +inline char *skipspace(const char *s) +{ + if (*s > ' ') // most strings don't have any leading space, so handle this case as fast as possible + return (char *)s; + while (*s && *s <= ' ') // avoiding isspace() here, because it is much slower + s++; + return (char *)s; +} char *stripspace(char *s); char *compactspace(char *s); cString strescape(const char *s, const char *chars); -- cgit v1.2.3