From 08390642c8b1f8ab76e8c9322ab96b28aef9ae82 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 13 Jan 2002 16:08:45 +0100 Subject: [PATCH] Improved performance of SVDRP command entry --- HISTORY | 1 + svdrp.c | 80 ++++++++++++++++++++++++++++----------------------------- 2 files changed, 41 insertions(+), 40 deletions(-) diff --git a/HISTORY b/HISTORY index 4ed37eb2..cb705d62 100644 --- a/HISTORY +++ b/HISTORY @@ -889,3 +889,4 @@ Video Disk Recorder Revision History Schreiber). - Prepared the OSD functions for multiple overlapping windows. - Removed the check to see whether the system time is running linearly. +- Improved performance of SVDRP command entry. diff --git a/svdrp.c b/svdrp.c index 48c95639..67de63c3 100644 --- a/svdrp.c +++ b/svdrp.c @@ -10,7 +10,7 @@ * and interact with the Video Disk Recorder - or write a full featured * graphical interface that sits on top of an SVDRP connection. * - * $Id: svdrp.c 1.27 2001/11/04 11:25:05 kls Exp $ + * $Id: svdrp.c 1.28 2002/01/13 16:07:42 kls Exp $ */ #include "svdrp.h" @@ -899,49 +899,49 @@ void cSVDRP::Process(void) } if (NewConnection) lastActivity = time(NULL); - if (file.Ready(false)) { - unsigned char c; - int r = safe_read(file, &c, 1); - if (r > 0) { - if (c == '\n' || c == 0x00) { - // strip trailing whitespace: - while (numChars > 0 && strchr(" \t\r\n", cmdLine[numChars - 1])) - cmdLine[--numChars] = 0; - // make sure the string is terminated: - cmdLine[numChars] = 0; - // showtime! - Execute(cmdLine); - numChars = 0; + while (file.Ready(false)) { + unsigned char c; + int r = safe_read(file, &c, 1); + if (r > 0) { + if (c == '\n' || c == 0x00) { + // strip trailing whitespace: + while (numChars > 0 && strchr(" \t\r\n", cmdLine[numChars - 1])) + cmdLine[--numChars] = 0; + // make sure the string is terminated: + cmdLine[numChars] = 0; + // showtime! + Execute(cmdLine); + numChars = 0; + } + else if (c == 0x04 && numChars == 0) { + // end of file (only at beginning of line) + Close(); + } + else if (c == 0x08 || c == 0x7F) { + // backspace or delete (last character) + if (numChars > 0) + numChars--; + } + else if (c <= 0x03 || c == 0x0D) { + // ignore control characters + } + else if (numChars < sizeof(cmdLine) - 1) { + cmdLine[numChars++] = c; + cmdLine[numChars] = 0; + } + else { + Reply(501, "Command line too long"); + esyslog(LOG_ERR, "SVDRP: command line too long: '%s'", cmdLine); + numChars = 0; + } + lastActivity = time(NULL); } - else if (c == 0x04 && numChars == 0) { - // end of file (only at beginning of line) + else if (r <= 0) { + isyslog(LOG_INFO, "lost connection to SVDRP client"); Close(); } - else if (c == 0x08 || c == 0x7F) { - // backspace or delete (last character) - if (numChars > 0) - numChars--; - } - else if (c <= 0x03 || c == 0x0D) { - // ignore control characters - } - else if (numChars < sizeof(cmdLine) - 1) { - cmdLine[numChars++] = c; - cmdLine[numChars] = 0; - } - else { - Reply(501, "Command line too long"); - esyslog(LOG_ERR, "SVDRP: command line too long: '%s'", cmdLine); - numChars = 0; - } - lastActivity = time(NULL); } - else if (r <= 0) { - isyslog(LOG_INFO, "lost connection to SVDRP client"); - Close(); - } - } - else if (Setup.SVDRPTimeout && time(NULL) - lastActivity > Setup.SVDRPTimeout) { + if (Setup.SVDRPTimeout && time(NULL) - lastActivity > Setup.SVDRPTimeout) { isyslog(LOG_INFO, "timeout on SVDRP connection"); Close(true); }