summaryrefslogtreecommitdiff
path: root/readline.cpp
diff options
context:
space:
mode:
authorJochen Dolze <vdr@dolze.de>2009-03-17 18:22:01 +0100
committerJochen Dolze <vdr@dolze.de>2009-03-17 18:22:01 +0100
commit636d56b051907e5041ee501284c4a2552489ca50 (patch)
tree493ba1d4f71a2eb29efdb7ef1bd01cfa6487d3ba /readline.cpp
parent2da0dc7af7c885c10b9511040c42ee5198a2cfa1 (diff)
downloadvdr-plugin-infosatepg-636d56b051907e5041ee501284c4a2552489ca50.tar.gz
vdr-plugin-infosatepg-636d56b051907e5041ee501284c4a2552489ca50.tar.bz2
Removed EventTimeDiff option
Found bug in readline.cpp Added unlocated events info
Diffstat (limited to 'readline.cpp')
-rw-r--r--readline.cpp36
1 files changed, 19 insertions, 17 deletions
diff --git a/readline.cpp b/readline.cpp
index f13852e..50d2b2b 100644
--- a/readline.cpp
+++ b/readline.cpp
@@ -10,6 +10,8 @@
#include <stdio.h>
#include "readline.h"
+extern char *strcatrealloc(char *dest, const char *src);
+
// --- cReadLineInfosatepg ---------------------------------------------------
cReadLineInfosatepg::cReadLineInfosatepg(void)
@@ -19,52 +21,52 @@ cReadLineInfosatepg::cReadLineInfosatepg(void)
cReadLineInfosatepg::~cReadLineInfosatepg()
{
- free(buffer);
+ if (buffer) free(buffer);
}
char *cReadLineInfosatepg::Read(FILE *f,size_t *size)
{
- free(buffer); buffer=NULL;
+ if (buffer) free(buffer);
+ buffer=NULL;
if ((!size) || (!f)) return NULL;
bool ext=false;
*size=0;
+ char *tempbuffer=NULL;
+ size_t tempsize=0;
do
{
- char *tempbuffer=NULL;
- size_t tempsize=0;
-
ext=false;
int n = getline(&tempbuffer, &tempsize, f);
if (n > 0)
{
if (tempbuffer[n-1] == '\n')
{
- n--;
- tempbuffer[n] = 0;
+ tempbuffer[--n] = 0;
if (n > 0)
{
if (tempbuffer[n-1] == '\r')
- n--;
- tempbuffer[n] = 0;
+ tempbuffer[--n] = 0;
}
}
if (n>0)
{
if (tempbuffer[n-1] == '\\')
{
- n--;
- tempbuffer[n]=0;
+ tempbuffer[--n]=0;
ext=true;
}
}
-
- buffer=(char*) realloc(buffer,*size+(n+1));
- snprintf(&buffer[*size],n+1,tempbuffer);
- free(tempbuffer);
- *size+=n;
+ if (n>0) {
+ buffer=strcatrealloc(buffer,tempbuffer);
+ //tempbuffer[0]=0;
+ *size+=n;
+ } else {
+ //tempbuffer[0]=0;
+ ext=true;
+ }
}
}
while (ext==true);
-
+ if (tempbuffer) free(tempbuffer);
return buffer;
}