summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2007-07-21 13:39:02 +0200
committerKlaus Schmidinger <vdr@tvdr.de>2007-07-21 13:39:02 +0200
commit4c90306502f858ec95683baf2bfeb9b1fe669c66 (patch)
tree36089396af32aa217f75c32619bbd2a58a1edd80
parent214c12289f58c90369fce58af20ae50a22fda34d (diff)
downloadvdr-4c90306502f858ec95683baf2bfeb9b1fe669c66.tar.gz
vdr-4c90306502f858ec95683baf2bfeb9b1fe669c66.tar.bz2
Made skipspace() an inline function and changed it to handle the most common case of 'no leading space' very fast, and avoid calling isspace()
-rw-r--r--CONTRIBUTORS1
-rw-r--r--HISTORY5
-rw-r--r--tools.c9
-rw-r--r--tools.h11
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 <staudt@engsystem.net>
Tobias Bratfisch <tobias@reel-multimedia.com>
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);